java如何调用ejb
Java调用EJB的方法
Java调用EJB(Enterprise JavaBean)通常涉及本地或远程接口的访问,具体方式取决于EJB的类型(如无状态、有状态或消息驱动Bean)以及部署环境(如本地或远程JVM)。以下是常见的调用方法:
使用依赖注入(适用于同一容器内调用)
在Java EE环境中,可以通过@EJB注解直接注入EJB实例。适用于调用方和被调用方在同一个应用服务器中。

@EJB
private MyStatelessEJB myEjb;
public void useEjb() {
myEjb.businessMethod();
}
通过JNDI查找(适用于远程或跨容器调用)
对于远程调用或不同JVM的EJB,需通过JNDI(Java Naming and Directory Interface)查找EJB的远程或本地接口。

try {
Context context = new InitialContext();
MyStatelessEJBRemote myEjb = (MyStatelessEJBRemote)
context.lookup("java:global/myApp/MyStatelessEJB!com.example.MyStatelessEJBRemote");
myEjb.businessMethod();
} catch (NamingException e) {
e.printStackTrace();
}
远程调用配置
若EJB部署在远程服务器上,需指定JNDI提供者的URL和凭据:
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
props.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
props.put(Context.SECURITY_PRINCIPAL, "username");
props.put(Context.SECURITY_CREDENTIALS, "password");
Context context = new InitialContext(props);
MyStatelessEJBRemote myEjb = (MyStatelessEJBRemote)
context.lookup("myApp/MyStatelessEJB!com.example.MyStatelessEJBRemote");
本地接口调用
对于本地接口(同一JVM),使用@Local注解并直接注入或通过JNDI查找:
@EJB
private MyStatelessEJBLocal myEjbLocal;
// 或通过JNDI
Context context = new InitialContext();
MyStatelessEJBLocal myEjbLocal = (MyStatelessEJBLocal)
context.lookup("java:module/MyStatelessEJB!com.example.MyStatelessEJBLocal");
注意事项
- EJB类型:无状态Bean(
@Stateless)和有状态Bean(@Stateful)的调用方式相同,但生命周期不同。 - 安全性:远程调用需配置安全凭证,如JAAS或HTTPS。
- 事务管理:默认情况下,EJB方法参与容器管理的事务,可通过
@TransactionAttribute调整。
通过以上方法,Java应用可以灵活调用本地或远程的EJB服务。






