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