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都支持此方式。


  • 相关阅读:
    用POP动画模拟真实秒钟摆动效果
    解析苹果的官方例子LazyTableImages实现图片懒加载原理
    支持xcode6的缓动函数Easing以及使用示例
    [转] iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么?
    NSJSONSerialization能够处理的JSONData
    [翻译] USING GIT IN XCODE [6] 在XCODE中使用GIT[6]
    [翻译] USING GIT IN XCODE [5] 在XCODE中使用GIT[5]
    [翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
    [翻译] USING GIT IN XCODE [3] 在XCODE中使用GIT[3]
    【转】断点继传
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5322721.html
Copyright © 2011-2022 走看看