EJB на клиенте

Мне нужно разработать приложение на java, которое использует подход клиент [встроенный сервер]-сервер-(-сервер)-(...). (данные отправляются при фиксации или автоматически)

Рабочий процесс (сущности, проверка, логика, сессии) везде одинаковый. В соединениях сервер-сервер выглядит логичным использовать EJB-компоненты (сущностные и сеансовые компоненты, в будущем, возможно, также компоненты, управляемые сообщениями). Клиент общается с локальным «сервером» или, в зависимости от пользовательских настроек, с одним или несколькими реальными серверами (серверы также могут общаться со многими серверами).

Возможно ли (и: просто) использовать локально среду EJB (без запуска локального сервера Java EE, чтобы избежать установки на клиентах и ​​использования памяти), и если это считается хорошим решением? Или я должен реализовать другую логику на клиенте и переключаться в зависимости от настроек? Что легче?


person Dutow    schedule 22.06.2010    source источник
comment
Вам действительно нужно запускать компоненты EJB на клиенте (или просто вызывать компоненты EJB)?   -  person Pascal Thivent    schedule 22.06.2010
comment
Мне нужно реализовать все в EJB (серверная часть), поэтому я подумал, зачем создавать два интерфейса/реализации, делающие одно и то же?   -  person Dutow    schedule 22.06.2010
comment
Большинство IDE позволяют создавать веб-службы из сеансовых компонентов без сохранения состояния.   -  person Romain Hippeau    schedule 23.06.2010


Ответы (2)


Да, это возможно. спецификация EJB 3.1 определяет встраиваемый контейнер EJB (глава 20), который может быть используется в приложениях Java SE без необходимости использования сервера приложений Java EE.

Но даже до EJB 3.1 были легко встраиваемые контейнеры, например. OpenEJB из Apache.

Хорошо это или плохо, конечно, спорно, но я думаю, что если существуют существующие EJB и вы хотите использовать их локально, то почему бы и нет. Другие, вероятно, предпочтут Spring, но у меня нет большого опыта в этом, поэтому я не могу это комментировать.

person musiKk    schedule 22.06.2010
comment
Я пробовал Spring только как фреймворк web/mvc с разделением базы данных и приложений. У него есть (хорошая) поддержка клиент-сервер-сервер... такого общения? Прямая запись в серверную базу данных с клиента в этом случае была бы плохой. - person Dutow; 22.06.2010

Вполне возможно вызывать ваши EJB из клиента без локального сервера Java EE.

Все серверы Java EE поставляются с клиентским JAR-файлом, содержащим классы, необходимые для подключения к серверу Java EE. Вам нужно предоставить конфигурацию для сервера JNDI с помощью файла jndi.properties (или задать свойства системы перед получением исходного контекста JNDI), и это все.

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

Если вам действительно нужно развернуть на локальном компьютере, вы можете рассмотреть возможность развертывания вашего приложения на сервере Java EE. JBoss или Glassfish довольно модульны, и их не так уж сложно запускать. Выбросьте ненужные модули и разверните на них свое приложение.

person Peter Tillemans    schedule 22.06.2010