使用@Remote(interface.class)

时间:2015-08-26 12:22:10

标签: annotations ejb

在ejb中使用@Remote(interface.class)会产生什么影响吗?

换句话说。这之间有什么不同:

@Remote(MyRemoteInterface.class)
@Stateless
public class MyBean implements MyRemoteInterface {

而且:

@Stateless
public class MyBean implements MyRemoteInterface {

当界面看起来像这样:

@Remote
public interface MyRemoteInterface {

当通过远程接口使用bean时,两种解决方案都可以在JBoss 6.4上正常工作。

2 个答案:

答案 0 :(得分:0)

没有区别,只是它的编写方式不同,参见EJB 3.1规范的2.1.2:

  

可以使用@Local或@Remote对界面进行注释   接口类,或使用@Local(.class)或@Remote注释   bean类的(.class)

答案 1 :(得分:0)

除了@maress在评论中所说的,在bean类上使用@Local@Remote还有其他优点/缺点,你可以找到一个很好的摘要here

我将引用有关您问题的相关部分:

带有@Local / @Remote注释的Bean类:

  

<强> 优点:

     
      
  • 有关接口类型的信息是松散耦合的。您可以将API发送到客户端,而不关心EJB语义。如果你用一个外观隐藏它,你的最终用户(甚至是开发人员)甚至不必知道它使用的是EJB技术。
  •   
  • 感谢Java implements子句,您可以使用javac或IDE来确保实现所有EJB业务方法。
  •   
     

<强> 缺点:

     
      
  • 您的EJB现在必须使用@Local注释定义其所有业务接口,因此这对您来说是额外的工作。不仅你实现了   接口,但你需要记住声明你的EJB   暴露它。没有(从javac的角度来看)阻止   你将界面放入@Local注释中   实际上是由你的EJB实现的。
  •   

与@Local / @Remote注释的接口:

  

<强> 优点:

     
      
  • 您不必在EJB中指定接口类型。你只需要“Java实现”它,容器就可以完成其余工作。
  •   
  • 有关接口类型的信息强烈附加到接口,因此对其他开发人员来说可能更容易理解。
  •   
  • 感谢Java implements子句,您可以使用javac或IDE来确保实现所有EJB业务方法。
  •   
     

<强> 缺点:

     
      
  • 您的界面现在与EJB技术紧密结合(导入javax.ejb.*包。)您现在必须提供您的API客户端   使用必需的库。
  •