2009-07-08 11 views
2

これはベストプラクティスか避けるべきかについてもっと興味があります。 2つのEJBSがあり、それぞれが異なる種類のオブジェクト、ウィジェット、およびfooで動作するとします。ウィジェットを管理するEJBは、何らかの処理を行うために一連のコレクションを取得する必要があります。この機能は、FooManager Beanですでに作成されています。EJBが別のEJBメソッドを呼び出す

WidgetManagerのメソッドが作成されているのに対し、FooManagerメソッドはすでに作成されています。

ここに私が意味するものの例があります。これは簡単な例です。

@Stateless 
public class FooManager implements FooManagerLocal, FooManagerRemote 
{ 
    public List<Foo> getAllFoosForAWidget(widgetId) 
    { 
     //runs queries and builds foo list 
    } 

    public Boolean isWidgetCloseable(widgetId) 
    { 
    //a widget is closeable if all foos for that widget are set to "done" 

    List<Foo> foos = getallFoosForAWidget(widgetId); 
    boolean isCloseable = false; 
    //process foos and update isCloseable respectively 
    return new Boolean(boolean); 

    } 

} 

@Stateless 
public class WidgetManager implements WidgetManagerLocal, WidgetManagerRemote 
{ 
    public void closeWidgetIfFoosAreDone(widgetId) //needs to do stuff with foos 
    { 
     //generate the widget based on widgetId 
     Widget widget = find(Widget.class, widgetId) 


     //is this appropriate? 
     //beans are gathered through our own beanclient 
     FooManager fooManager = BeanClient.getBean(FooManager.class); 
     if(fooManager.isWidgetCloseable(widgetId) 
     { 
     widget.setStatus(Close); 
     save(widget); //save widget back to database 
     } 
    } 
} 

私の質問は、WidgetManager BeanがFooManager Beanの既に作成されたメソッドを呼び出すべきかどうかです。クライアントは、どのウィジェットが閉じられているかを確認し、そのIDのリストをWidgetManagerに送信する必要がありますか?

私は後者の状況に傾いているので、EJBはそれぞれのメソッドを呼び出すことを心配する必要はありません。クライアントはそれらを利用することができ、idsのリストを送信するだけでよい。

答えて

3

私はWidgetManagerに単純な 'close'メソッドを残します。そうすれば、それはfooとの関係が狭くなります。

他のビジネスビーンでは、この2つのビーンを注入してロジックを構築します。

@Stateless 
class SomeBusinessProcess implements ISomeBusinessProcess 
{ 
    @EJB FooManagerLocal fooManager; 
    @EJB WidgetManagerLocal widgetManager; 

    public void process(WidgetId id) 
    { 
     if (fooManager.isClosable(id)) 
      widgetManager.close(id); 
    } 
} 

このようにすれば、自由度が増し、Manager Beanがより明確になります。

1

上記のパターンは、サービス・ファサードと呼ばれ、niclyここで議論される:http://www.adam-bien.com/roller/abien/entry/why_service_isn_t_a

+0

正直に記述が完全かつ抽象のようなものではありません。 –

+0

私は同意します。どこかに行くように始まり、それから始まりません。 – b3bop

関連する問題