1. 程式人生 > >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的配置。