2014-12-05 2 views
0

мой вопрос скорее архитектурный в связи с EJB 3.0 и более поздние версии с многоуровневыми приложениями.Занятия в классе презентаций?

фона: Как вы думаете, лучшим решением было бы данных о пропусках из базы данных через фасад сессии на уровне представления? Отклоненные классы сущностей предложили бы мне привлекательное решение, но в этом случае они должны быть указаны как типы аргументов в методах фазового анализа сеанса. Следовательно, классы enity также должны быть отнесены к уровню представления или к любому другому клиенту как к банке, которая хотела бы подключиться к фасаду сеанса. Почему-то я не чувствую, что это правильный путь, потому что они содержат гораздо больше, о чем должен знать уровень представления, но я не уверен, поскольку они являются отдельными и легкими классами и представляют также отношения и содержат также соответствующие коллекции классы, которые могли бы сэкономить много работы с объектами передачи, чтобы их переупаковать.

Вопрос: Pre-EJB 3.0, в возрасте от enity бобов, данные должны были rewrapped в Transfer Objects и Transfer Object Assembler дизайн pattarn также может быть использован для создания сложных структур данных для моделирования нм или 1-n. Тем не менее, классы сущностей намного более легкие, и мы могли бы сэкономить эту переделку. Что вы предлагаете предоставить данные уровню презентации, как вы обычно это делаете?

Большое спасибо за ваш ответ. С уважением, Tamas

+0

Почему бы не пойти на многоуровневую архитектуру: Модель (сущности) -Сервис/Бизнес (EJB3) -контроллеры (что-то вроде управляемых bean-компонентов JSF) -Представление – Hichamov

+0

Привет Хичамов, спасибо за быстрый ответ. Не могли бы вы дать немного больше подробностей? С помощью этого решения также следует получить данные от объектов в контроллер/JSF. Или я неправильно понимаю ваше предложение. Еще раз спасибо, Tamas – Tamas

+0

Поскольку я даю более подробную информацию, я написал ответ. – Hichamov

ответ

1

Итак, я отвечу на основании опыта JSF. Сначала вы создаете свои объекты на уровне модели, во-вторых, вы создаете свои EJB в уровне сервиса, получая сущности от entitymanager (контекст persistence: https://docs.oracle.com/html/E13981_01/usclient005.htm). В случае JSF каждая страница сервера (.xhtml) имеет доступ к управляемым компонентам (например, следующим образом: http://docs.oracle.com/javaee/6/tutorial/doc/bnaqm.html). Управляемые бобы имеют доступ к EJB (посмотрите на CalculatorBean здесь: http://tomee.apache.org/examples-trunk/jsf-managedBean-and-ejb/README.html).

Таким образом, у вас очень хорошая многоуровневая архитектура, с облегченным сцеплением и простотой обслуживания. Но помните, что я отвечаю только за среду JSF.

EDIT

Если вы имеете в виду, как получить доступ к данным классов сущностей в EJBs (с сохранением состояния, без гражданства или синглтон), то вам придется управлять объектами в EJBs и заполнить их/найти их/perist их/обновить их, используя EntityManager

EJB пример:

@Stateless

public class EmployeeDemoSessionEJB implements EmployeeDemoSession

{

  @PersistenceContext 

     EntityManager em; 

     public void createEmployee(String fName,String lName){ 

         Employee e = new e(); 

         e.setFirstName(fName); 

         e.setLastName(lName); 

         em.persist(e); 
     } 

}

Думай о нем, как стек: Веб-страница для управляемого компонента в сессионный компонент для лица Надеюсь, что это поможет

+0

Привет, Хичамов, Еще раз спасибо за ответ. Я просмотрел ссылки, которые вы разместили, а также добавил ответ для ответа. Однако это не отвечает на исходный вопрос.
Используя пример CalculatorBean, исходный вопрос заключается в том, как вы можете получать данные по сеансовому компоненту (SessionFacade в моем случае), который добавляет в ваш пример. Если вы используете классы сущностей в качестве аргументов методов, которые были бы наиболее удобным способом, тогда уровень представления, то есть классы, использующие экземпляр сеансового компонента, также должны знать классы сущностей, которые связаны с базой данных. – Tamas

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