两个具有相同接口的EJB.这是一个好习惯吗?

nob*_*ody 3 java oop ejb-3.0

我的用例要求我有一个类层次结构,如下所示

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)

问题:

  1. 为两个EJB实现提供相同的接口是一个很好的EJB实践吗?

  2. 您是否在课程设计/层次结构中看到任何其他缺点?

注意:我的appserver是Weblogic

谢谢

Ale*_*exR 5

EJB只是一种特殊的类.它很特殊,因为它的生命周期由容器管理.它只是一个类,因为它是用java编写的,可以实现它想要的任何接口和任何业务逻辑.

所以,我认为拥有相同接口的多个实现是一个好习惯.它允许将特定服务的实现与其使用分开.例如,您可以创建Sender可以发送一些内容和2个实现的接口:EmailSender和SmsSender.两者都实现相同的接口,都是EJB.

唯一的问题是,在这种情况下,您不能仅通过其接口绑定对sender的引用,但必须mappedName像您一样使用.