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