Posted on 2010-01-13 22:42
斷點 閱讀(353)
評論(0) 編輯 收藏 所屬分類:
EJB3.0
遠程接口調用ejb的過程:
首先客戶端需要與ejb建立起socket通信,在通信管道上他們之間需要來回發送IIOP協議消息,因為數據要在網絡進行傳輸,存放數據的java對象必須要進行序列化。這個過程中,有網絡通信的開銷、協議解析的開銷、對象序列化的開銷。因為ejb是分布式技術,它允許客戶端與ejb應用在不同一機器上面,所以這些開銷也是必然的。
本地接口調用ejb的過程:
通過本地接口調用ejb,直接在內存交互,這樣就可以避免因網絡通信所造成的各種性能開銷。
注意:
1.只有客戶端與EJB應用都在同一個JVM內運行的時候,我們才能調用本地接口,否則只能調用遠程接口。
2.只要客戶端與ejb發布在同一個jboss內,我們就認為它們在同一個JVM。
3.客戶端可以調用本地接口;也可調用遠程接口;當本地接口與遠程接口都有同一個方法時,優先調用本地接口中的方法。
開發一個自己的遠程接口的無狀態會話bean:
1.需要自己開發的EJB的組件.jar包。
注意:在實現類中加入注解,綁定接口。
@Stateless、@Remote(HelloWorld.class) //為接口。
2.需要自己開發出的EJB的客戶端,并把客戶端工程打成.war文件。
注意:客戶端所要知道的JNDI名稱,下面的HelloWorld 為遠程接口。
InitialContext ctx = new InitialContext();
HelloWorld helloWorld = (HelloWorld)ctx.lookup("HelloWorldBean/remote");
out.println(helloWorld.sayHello("荊州"));
3.把.jar和.war文件拷貝到jboss的deploy區。
4.打開瀏覽器,輸入自己開發出的EJB客戶端的.jsp頁面,即可。
開發一個自己的本地接口的無狀態會話bean:
1.需要自己開發的EJB的組件.jar包。
注意:在實現類中加入注解,綁定接口。
@Stateless、@Local(HelloWorldLocal.class)//接口。
2.需要自己開發出的EJB的客戶端,并把客戶端工程打成.war文件。
注意:客戶端所要知道的JNDI名稱,下面的HelloWorldLocal 為本地接口。
InitialContext ctx = new InitialContext();
HelloWorldLocal helloWorld = (HelloWorldLocal)ctx.lookup("HelloWorldLocalBean/local");
out.println(helloWorld.sayHello("荊州"));
3.把.jar和.war文件拷貝到jboss的deploy區。
4.打開瀏覽器,輸入自己開發出的EJB客戶端的.jsp頁面,即可。
Bean實例的兩種管理技術:
1.無狀態bean使用實例池技術管理bean;
2.有狀態bean使用激活(activation)管理bean。
Jboss生成的JNDI名稱,默認命名規則如下:
如果把EJB應用打包成后題為.jar的模塊文件,默認的全局JNDI名稱是
本地接口:EJB-CLASS-NAME/local
遠程接口:EJB-CLASS-NAME/remote
例如:把EJB-HelloWorld(里面包含接口HelloWorld和實現類HelloWorldBean)應用打包成EJB-HelloWorld.jar文件,它的遠程接口的JNDI名稱是:HelloWorldBean/remote。
jndi.properties的配置:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099
posted @ 2009-03-26 09:56 斷點 閱讀(255) | 評論 (0)