2011-07-31 12 views
3

私のユースケースは、同じインタフェースを持つ2つのEJB。それは良い練習ですか?

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); 
    } 
} 

質問以下のようにクラス階層を持つために私を必要とします。

  1. 2つのEJBの実装のための同じインターフェイスを持つことは良いEJBの練習ですか?

  2. あなたはクラスの設計/階層内の任意の他の欠点を参照していますか?

注:2つのEJBの別の名前を定義したように動作するはずです私のアプリケーションサーバーは、WebLogic

おかげ

答えて

5

EJBは単なる特殊なクラスです。そのライフサイクルはコンテナによって管理されるため、特別です。それはjavaで書かれているので、それは単なるクラスであり、必要なあらゆるインタフェースとビジネスロジックを実装することができます。

だから、私は同じインタフェースのいくつかの実装を持っていることをお勧めだと思います。これにより、特定のサービスの実装をその用途から切り離すことができます。たとえば、いくつかのコンテンツと2つの実装を送信できるインターフェイスSenderを作成できます:EmailSenderとSmsSender。両方とも同じインタフェースを実装していますが、どちらもEJBです。

唯一の問題は、この場合には、あなただけのインタフェースによって、送信者への参照をバインドしますが、あなたがしたようmappedNameを使用する必要がないということです。

2
  1. である私は、これですべての技術的な問題を見ることができない...
  2. 私はあなたの具体的な要件を理解していないので、私は間違っている可能性があり
  3. :サービス・インターフェースがAbstractClassで実装されていないEJBのの一つでオーバーライドされた場合、それはを実装する1つの別個のEJBを持つことが実用的であると思われます10。第二に、代わりに同じインターフェイスgetMetaValueのための2つの異なるEJBの実装を有するので、私はむしろインタフェースをパラメータ化し、EJBは、例えば、それはnew MetaValue(x, y)またはnew MetaValue(a, b)を実施するかどうか決めさせたいですabstract public MetaValue getMetaValue(SomeParameter param);
関連する問題