zoukankan      html  css  js  c++  java
  • 菜鸟学EJB(二)——在同一个SessionBean中使用@Remote和@Local

    不废话,直接进入正题:


    在Jboss4及以前的版本中,如下代码可以成功部署:

    package com.tjb.ejb;
    
    import javax.ejb.Local;
    import javax.ejb.Remote;
    import javax.ejb.Stateless;
    
    @Stateless
    @Remote
    @Local
    public class UserManagerBean implements UserManager {
    
        public void saveUser(User user) {
            System.out.println("User对象已被保存");
        }
    
    }


    从代码可以看出,UserManagerBean对接口UserManager 同时声明了远程和本地两种发布方式,这种方式在Jboss4及以前的版本中是被允许的,但是Jboss5以后的版本则认为这是错误的(具体从哪个版本开始改的,这里就不追究了)。如果将上面的代码部署到Jboss5中,会出现以下的错误提示:

    java.lang.RuntimeException: @Remote and @Local may not both be specified on the same interface "interface 
    com.lzq.ejb.UserManager" for EJB "UserManagerBean" per EJB3 Spec 4.6.6, Bullet 5.4 [EJBTHREE-751]
        at org.jboss.ejb3.proxy.factory.ProxyFactoryHelper.getLocalAndBusinessLocalInterfaces(ProxyFactoryHelper.java:233)
        at org.jboss.ejb3.proxy.factory.ProxyFactoryHelper.getLocalBusinessInterfaces(ProxyFactoryHelper.java:550)
        at org.jboss.ejb3.session.SessionContainer.resolveBusinessInterfaces(SessionContainer.java:192)
        at org.jboss.ejb3.EJBContainer.instantiated(EJBContainer.java:1564)
        at org.jboss.ejb3.session.SessionContainer.instantiated(SessionContainer.java:182)
        at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:726)
        ... 33 more


    根据第一句话就能看出来,是因为不允许对同一个接口同时声明Remote和Local两种发布方式,因此,在Jboss5中要实现这样的功能,就需要实现两个接口,代码如下:

    package com.tgb.ejb;
    
    import javax.ejb.Local;
    import javax.ejb.Remote;
    import javax.ejb.Stateless;
    
    @Stateless
    @Remote(value=UserManagerRemote.class)
    @Local(value=UserManagerLocal.class)
    public class UserManagerBean implements UserManagerLocal,UserManagerRemote {
    
        @Override
        public void saveUser(User user) {
            System.out.println("Use对象已被保存");    
    
        }
    
    }


    如果两个接口中的方法相同,重写一个即可。


    结论:在Jboss4及以前的版本,可以在一个SessionBean中对同一个接口同时声明Remote和Local两种发布方式;而在Jboss5以后的版本中则不允许这种方式,如果要在一个SessionBean中同时使用Remote和Local方式,则必须实现两个接口,并指明哪个接口用哪种方式。推荐使用第二种,因为任何版本的Jboss都支持此方式。


  • 相关阅读:
    网上零售是国内品牌开拓海外市场的最佳途径
    一个都不能少,海外B2C实战攻略全解
    我想和你一起浅浅淡淡的生活
    中国十大电子商务网站排名
    外贸B2C必读:外贸B2C入行指南(一)
    外贸B2C必读:外贸B2C入行指南(二)
    09年美国最热门的100个B2C网站,他们是怎么成功的?
    几个jsp模块
    【Quartz】【程序目录结构】/DetectNonWorkingDay/src/main/java/com/apple/sqm/dnwd/detect/delta/Detect.java
    Servlet 工作原理解析
  • 原文地址:https://www.cnblogs.com/liushuijinger/p/3690002.html
Copyright © 2011-2022 走看看