在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上正常工作。
答案 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客户端 使用必需的库。