JBOSS系列 -EJB远程调用-客户端的配置
EJB访问方式分为远程客户端访问、本地客户端访问和WebService客户端。
所谓的EJB的远程调用是说客户端与服务端的EJB对象不在同一个JVM进程中。
本地客户端是说客户端与服务端的EJB对象在同一个JVM进程中。
WebService客户端可以访问无状态会话Bean的接口,只有在业务逻辑方法被标识为@WebMethod的时候,webService客户端才可以访问到。
远程调用
在没有远程调用的时候,我们需要用到别人的数据了,就直接把别人的接口和实现都拿过来了,接着打到自己的包中,这样做一方面来说是造成了代码的冗余,自己的包会很大,另一方面这样也不是远程调用。
接下来我们改进,改成远程调用,直接调用别人的接口就可以操作了。这样的好处是针对接口编程,结构清晰,很灵活。
客户端配置:
1、当然需要调用的EJB的BEAN必须是远程的:
@Stateless(name="ClassEao") @Remote(ClassEao.class) @TransactionManagement(TransactionManagementType.CONTAINER) @TransactionAttribute(TransactionAttributeType.REQUIRED) public class ClassEaoImpl extends ExamBase<Class> implements ClassEao { }
我们在EAO的实现上加远程的注解。
2、我们注入Bean的时候需要用远程的JNDI,在自己的web层spring-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的配置,也就是需要远程调用的JBOSS的ip,端口号,用户名和密码。
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的配置。