Мы хотели бы служить некоторым клиентским запросам в нашем сервере JAVA EE-приложения (JBoss 4.2.3). Я считал, что Java спецификация EE не позволяет открывать сокет от компонента уровня предприятия. Но спецификация не предлагает альтернатив.
А именно, компоненты уровня предприятия не должны:
- послушайте на, примите соединения на или многоадресно передайте от сетевого сокета
Таким образом, вопрос: Что я могу сделать для обслуживания некоторого двоичного файла tcp базирующиеся протоколы (не http) из сервера приложений?
Здесь кто-то предлагает реализовать адаптер ресурса. Действительно ли это - способ, которым Вы должны пойти или являетесь там другими (более легкими) решениями?
Прямо сейчас я реализую обходной путь:
alt text http://yuml.me/7f82bd5c
Я использую отдельное java-приложение, которое принимает tcp-вызовы от клиента и перенаправляет их как JNDI-вызовы на сервер приложения.
Вы правы, Поскольку вы можете объявить операции на все в Java EE, они должны поддерживаться от всех компонентов, которые вы хотите подключиться. Файлы, если какие-либо следует хранить в базе данных. Все должно контролироваться контейнером, потому что это единственный способ иметь масштабирующую приложение с использованием Java EE.
Несколько вариантов:
внедрить соединитель (JCA) Пример здесь: http://www.theserverside.com/tt/articles/article.tss?l=j2ee1_4 Вероятно, лучший способ, если у вас есть существующие клиенты.
Используйте очереди сообщений Java
Отношения между этими методами обсуждаются здесь http://java.sun.com/products/jms/faq.html#Relship_ejbs
Написать сервер, который хранит запросы в базе данных. (Нет поддержки TX)
, если у вас есть только один сервер и это кажется слишком много накладных расходов, вы могли бы игнорировать эти аспекты и следуйте предположению уксуса. Но если вам нужен TX позже или дополнительные узлы Эта часть должна быть переработана.
Ни один не доступа к файлам: (
Это в спецификации, потому что EJBS должны быть:
, которые в виду ничего не остановит вас от начала сокета сервера в вашем приложении (лучшее место, вероятно, Сервлет) Но вы должны позаботиться о том, как сервесокет закрыт, когда ваше приложение снизится ...