2009-07-08 5 views
2

Мне больше любопытно, является ли это лучшей практикой или ее следует избегать. Скажем, у меня есть два EJBS, каждый из которых работает с другим типом объекта, виджетами и foo. EJB, который управляет виджетами, должен получить коллекцию foos для обработки. Эта функциональность уже создана в компоненте FooManager.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 называют уже созданные методы в бобе FooManager? Должен ли клиент проверить, какие виджеты могут быть закрыты, а затем отправить список идентификаторов в WidgetManager?

Я склоняюсь к последней ситуации, так что EJB не нужно беспокоиться о вызове друг друга методами. Клиент может их использовать и просто нужно отправить список идентификаторов.

ответ

3

Я оставил бы простой метод «закрыть» в WidgetManager. Таким образом, он будет менее жестким с foo.

Итак, просто в каком-либо другом бизнес-компоненте вы будете вводить эти два компонента и будете строить свою логику.

Таким образом, у вас будет больше свободы, и ваши фасоль-менеджер будет более понятным.

1

выше модель называется Service Фасад и nicly обсуждается здесь: http://www.adam-bien.com/roller/abien/entry/why_service_isn_t_a

+0

Честно описание не является полным и вид реферата. –

+0

Согласен. Начинается, как будто собирается куда-то, а потом не – b3bop

Смежные вопросы