JBoss EJB 客户端访问指南

在独立的Java应用程序中访问JBoss服务器上的EJB实例是一个常见的需求。本文将介绍如何通过JNDI查找和EJB注入两种方法来实现这一目标。

依赖库

首先,需要确保应用程序包含了以下JBoss客户端库:

  • jbossall-client.jar
  • jboss-ejb3-client.jar

此外,还需要将EJB模块的引用添加到应用程序中。

获取EJB实例

在客户端模块中获取EJB实例有两种方法:

在JBoss-4.x版本中,不支持在servlets或应用客户端中使用EJB注入,这意味着@EJB注解将不起作用。从JBoss-5版本开始支持此功能。

对于任何类型的EJB客户端(无论是独立的还是web servlet),如果它没有部署在与EJB相同的ear归档中,必须设置JNDI应用程序所需的环境。

为了初始化InitialContext对象,有以下选项:

创建一个名为jndi.properties的文件,并将其保存到应用程序类路径中。添加以下行:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces java.naming.provider.url=JBOSS_IP:1099

其中JBOSS_IP是托管EJB的JBoss服务器的IP地址,1099是JBoss服务器的JNDI端口。

导航到项目属性,从类别中选择运行,在VM选项框中输入以下行:

-Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -Djava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces -Djava.naming.provider.url=JBOSS_IP:1099

工作原理

在IDE(这里使用的是NetBeans)中,创建一个新的Java应用程序项目。

将上述提到的依赖项添加到项目库中。

使用上述两种方法中的任何一种配置JNDI设置,这里使用的是保存在C盘根目录的jndi.properties

使用Properties类加载JNDI属性。

Properties props = new Properties(); props.load(new FileInputStream("c://jndi.properties"));

初始化InitialContext实例,将Properties类实例传递给构造函数。

InitialContext ctx = new InitialContext(props);

使用InitialContext实例的lookup方法查找EJB模块中的远程对象并返回其实例。为此,将会话Bean的远程或本地接口的JNDI名称传递给lookup方法,对于JBoss,JNDI名称模式如下:

EAR名称/EJB实现组件/远程或本地

如果EJB部署到JAR归档而不是EAR归档,则JNDI名称模式为:

EJB实现组件/远程或本地 try { Properties props = new Properties(); props.load(new FileInputStream("c://jndi.properties")); InitialContext ctx = new InitialContext(props); SalaryCalc a = (SalaryCalc) ctx.lookup("SalaryCalc Bean/remote"); a.doaction(); } catch(IOException ex) { System.out.println("IOException : " + ex.getMessage()); } catch(NamingException ex) { System.out.println("NamingException : " + ex.getMessage()); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485