首页 > 代码库 > JBOSS系列 -EJB远程调用-客户端的配置

JBOSS系列 -EJB远程调用-客户端的配置

 EJB访问方式分为远程客户端访问、本地客户端访问和WebService客户端。

        所谓的EJB的远程调用是说客户端与服务端的EJB对象不在同一个JVM进程中。

        本地客户端是说客户端与服务端的EJB对象在同一个JVM进程中。

         WebService客户端可以访问无状态会话Bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,webService客户端才可以访问到。

 

远程调用

         在没有远程调用的时候,我们需要用到别人的数据了,就直接把别人的接口和实现都拿过来了,接着打到自己的包中,这样做一方面来说是造成了代码的冗余,自己的包会很大,另一方面这样也不是远程调用。

        接下来我们改进,改成远程调用,直接调用别人的接口就可以操作了。这样的好处是针对接口编程,结构清晰,很灵活。

 

客户端配置:

 

1、当然需要调用的EJBBEAN必须是远程的:

 

@Stateless(name="ClassEao") @Remote(ClassEao.class) @TransactionManagement(TransactionManagementType.CONTAINER) @TransactionAttribute(TransactionAttributeType.REQUIRED) public class ClassEaoImpl extends ExamBase<Class> implements ClassEao {              } 

  

 

我们在EAO的实现上加远程的注解。

 

2、我们注入Bean的时候需要用远程的JNDI,在自己的webspring-mvc.xml里面配置,即

 
<jee:jndi-lookup id="SchoolTeachingBean"          jndi-name="ejb:itoo-basic-schoolteaching-ear/itoo-basic-schoolteaching-core-0.0.1-SNAPSHOT/SchoolTeachingBeanImpl!com.tgb.itoo.basic.service.SchoolTeachingBean"          environment-ref="evn">      </jee:jndi-lookup>  

  

注意上面的jndi-name,我们的项目是打成了一个ear包,并且去掉了ear的版本号:

 
<build>  <finalName>${project.artifactId}</finalName>  </build> 

  

同时在applicationContext-common.xml里面配置如下:

 
<util:properties id="evn"          location="classpath:config/jboss-ejb-client.properties"></util:properties>  

  

这样的目的是通过evn找到相应的JBOSS的配置,也就是需要远程调用的JBOSSip,端口号,用户名和密码。

 

3、在自己的Web层添加配置文件jboss-ejb-client.properties

 
endpoint.name=client-endpoint  remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false  org.jboss.ejb.client.scoped.context=true  jboss.naming.client.ejb.context=true  Context.URL_PKG_PREFIXES=org.jboss.ejb.client.naming  javax.naming.Context.INITIAL_CONTEXT_FACTORY=org.jboss.naming.remote.client.InitialContextFactory  remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false  remote.connectionprovider.create.options.org.xnio.Options.SSL_STARTTLS=false  jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false  remote.connections=one  remote.connection.one.host=192.*.*.*  remote.connection.one.port=4447  remote.connection.one.username=adminks  remote.connection.one.password=!adminks123

  

       主要是配置IP和端口号以及需要远程调用的JBOSS的账户名和密码,同时我们还可以在JBOSS中配置多个远程调用的接口。

 

4、最后一步,在自己的ear包里面加入jboss-deployment-structure.xml配置如下:

 
<?xml version="1.0" encoding="UTF-8"?>  <jboss-deployment-structure>          <sub-deployment name="itoo-assess-studentassess-web-0.0.1-SNAPSHOT.war">          <dependencies>              <module name="org.jboss.xnio" />          </dependencies>      </sub-deployment>  </jboss-deployment-structure> 

  

          因为现在用的JBOSS版本是eap 6.2 相比较以前的版本加入了模块的概念(用到才被加载),加入以上配置是为了找到war包里面jndi的配置。

 

总结:

        上面主要介绍了EJB远程调用的客户端的配置,主要是因为现在JBOSS提升版本后,突出的一点是JBOSS的模块化,也是因为这个又爱又恨的模块化出了一系列的问题,解决了一系列的问题。下篇博客继续说远程调用JBOSS的配置。

JBOSS系列 -EJB远程调用-客户端的配置