您的位置:首页 > 其它

本地接口与远程接口的无状态SessionBean的实现

2011-10-30 11:26 176 查看
远程接口调用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: