1.@Remote 注释指明实现的接口是远程接口,@Local 注释指明实现的接 口是本地接口。当@Local 和@Remote 注释都不存在时,会话 Bean 实现的接口默认为 Local接口。
如果在本地用 EJB(确保客户端与 EJB 容器运行在同一个 JVM),采用 Local 接口访问 EJB 优于 Remote 接口,因为 Remote 接口访问 EJB 需要经过远程方法调用(RPCs)环节,而 Local 接口访问 EJB 直接从 JVM 中返回 EJB 的引用。
2. StatelessSessionBean不负责记录使用者状态,StatelessSessionBean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,StatelessSessionBean 的生命期也不一定结束,它可能依然存在于会话池 中,供其他用户调用。如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响。
所以有可能新NEW的那个对象,用的还是上个对象的东西
3.statefulsessionbean 必须实现 Serializable 接口,这样EJB容器才能在她们不再使用时序列化存储她们的状态信息.@SuppressWarnings("serial") 注释屏蔽缺少 serialVersionUID 定义的警告。
client端调用代码:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "127.0.0.1:1099"); props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(props);
HelloBeanRemote remote=(HelloBeanRemote)ctx.lookup("HelloBean/remote"); System.out.println(remote.sayHello("Beijing")); //远程方式
HelloBeanLocal local=(HelloBeanLocal)ctx.lookup("HelloBean/local");
System.out.println(local.localSay()); //本地方式