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的配置。