我的用例要求我有一个类层次结构,如下所示
public interface ServiceA{ public void doSomething();}
public abstract class AbstractClass implements ServiceA{
@Override
public void doSomething(){
getMetaValue();
.. do common Things applicable to all EJBS...
}
public abstract MeataValue getMetaValue();
}
@Stateless(mappedName="EJBBeanImlJ")
public EJBBeanImplJ extends AbstractClass{
public MetaValue getMetaValue(){
return new MetaValue(x, y);
}
}
@Stateless(mappedName="EJBBeanImplK")
public EJBBeanImplK extends AbstractClass{
public MetaValue getMetaValue(){
return new MetaValue(a,b);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
为两个EJB实现提供相同的接口是一个很好的EJB实践吗?
您是否在课程设计/层次结构中看到任何其他缺点?
注意:我的appserver是Weblogic
谢谢
EJB只是一种特殊的类.它很特殊,因为它的生命周期由容器管理.它只是一个类,因为它是用java编写的,可以实现它想要的任何接口和任何业务逻辑.
所以,我认为拥有相同接口的多个实现是一个好习惯.它允许将特定服务的实现与其使用分开.例如,您可以创建Sender可以发送一些内容和2个实现的接口:EmailSender和SmsSender.两者都实现相同的接口,都是EJB.
唯一的问题是,在这种情况下,您不能仅通过其接口绑定对sender的引用,但必须mappedName像您一样使用.