EJB @Local和@Stateless在一起

时间:2015-01-26 13:45:05

标签: java java-ee ejb-3.0

由于在一个EJB上使用了@Local和@Stateless,我在uni工作时拒绝了我的工作。它是一个帮助bean来验证/修复传递的对象。 我认为用本地和无国籍来诠释我的ejb是完全合法的。 有人可以向我解释为什么这会成为一个问题吗?

2 个答案:

答案 0 :(得分:5)

来自javax.ejb.Local javadoc:

  

在bean类上使用时,声明本地业务接口   对于会话bean。   ...   只有bean类才需要使用Local注释   除了任何一个接口之外,它不会只实现一个接口   以下:java.io.Serializable; java.io.Externalizable中;任何一个   javax.ejb中定义的接口。

因此,当您在bean类上使用此批注时,需要将本地接口'class as参数传递给此批注。 如果您的bean公开了一个无界面视图,您应该使用 @LocalBean 对其进行注释。来自javax.ejb.LocalBean javadoc:

  

指定会话bean公开无接口视图。这个   如果会话bean公开任何其他客户端,则需要注释   视图(本地,远程,无接口,2.x远程主页,2.x本地主页,   Web服务)除了无接口视图或其实现之外   子句包含java.io.Serializable以外的接口;   java.io.Externalizable中;或者由...定义的任何接口   javax.ejb包。

因此,如果你的bean没有实现任何接口,你可以用 @Stateless 注释它:

@Stateless
public class MyEJB {
    public void localMethod() {}
}

答案 1 :(得分:2)

如果您的EJB方法被本地客户端使用(即,如果ejb客户端位于要部署ejb会话bean的相同环境中),则必须按顺序提取由@Local注释的接口。揭露您的业务方法。

示例:

@Stateless
public class MyEJB implements MyEJBLocal{
    public void myBusinessMethod(){
        //Implementation
    }
}

@Local
public interface MyEJBLocal{
    public void myBusinessMethod();
}
相关问题