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