1 创建接口(最佳实践是创建两个接口A与B,B extends A)
interface A{}
interface B extends A{}
2 创建实现接口的会话bean,
@Stateless / @Stateful ------生成全局JNDI(就是可以被外界访问的JNDI) 两个 HelloWorldBean /remote HelloWorldBean /local
@Local(A.class) ----将A定义为 本地接口
@Remote(B.class) -----将B定义为远程接口
public class HelloWorldBean implements A,B{
略
}
3 客户端的建立,另外建立一个app或者web项目都可以.
项目----右键-----Build Path------configure build path-----Projects选项卡------add------将EJB项目加进来
这样之前创建的EJB项目的类路径就加进来了,接口A和接口B对 客户端就是可见的了
最好不要试图 自己在客户端项目去创建接口 这样很容易发生 类的冲突
4 创建 Client/src/jndi.properties
jndi.properties的内容为
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099
以上和EJB容器有关,这里用的是 客户端和EJB都部署在本机的JBOSS上
5 客户端代码的实现
public static void main(String[] args) {
InitialContext ctx=new InitialContext();
B b=(B)ctx.lookup("HelloWorldBean/remote"); ------记得吗 ,B之前就是被定义为远程接口
然后我们就可以使用b就像一个本地的对象一样
}
(注意:如果两个项目运行在 不同的JVM中 只能通过 远程接口访问;
这里是main方法一个简单的java app就运行在 别的JVM上,尽管两个项目都在一台机子上存着。
如果这里是一个web项目,而且发布在同一个JBOSS里,我们视为在同一个JVM中,通过本地接口访问。
远程接口通过网络连接访问,本地接口直接在内存里就行数据交换,速度很快)