2010-09-05 3 views
3

Сначала немного фона:Thin (Нер) автономный клиент для корпоративных приложений

Я работаю над приложением предприятия (EAR) с модулем EJB & модуль клиентского приложения. Я также использую hibernate JPA для настойчивости и swingx для GUI. Это единственные сторонние стороны. Это приложение развернуто на Glassfish.

Все шло хорошо, пока я не развернул свое приложение в первый раз и не начал его запускать с помощью Java Web Start. Я попал в крупные блокировщики дорог - JWS не любит hibernate3.jar, жалуется, что он не подписан, хотя это так. Я описал проблему here, если вам интересно. В любом случае, это может быть связано с этим unresolved bug в JVM. Есть и другие вещи, которые мне не нравятся в JWS, но это не имеет значения сейчас.

Современных подходы

  • Учитывая эту проблему, я думал, что я развернуть приложение сам (я планирую написать какое-то автоматическое обновление, чтобы держать все синхронизированный). Поэтому я выполнил инструкции от here, и все было круто, за исключением того факта, что контейнер приложения, который мне нужно развернуть для клиента, составляет около 40 МБ !!!. Это слишком!

  • Хорошо, поэтому я сказал, что я сброшу контейнер приложения, создайте автономный клиент, выполнив EJB-поиск через JNDI и включив только минимум.

И вот я застрял!

Это поиск JNDI я использую:

Properties prop = new Properties(); 
prop.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory"); 
prop.put("org.omg.CORBA.ORBInitialHost", "bogdan-pc"); 
prop.put("org.omg.CORBA.ORBInitialPort", "3700"); 
try { 
    InitialContext ctx = new InitialContext(prop); 

    DatabaseCacheEJBRemote service = (DatabaseCacheEJBRemote) ctx.lookup("ejbs.DatabaseCacheEJBRemote"); 
    System.out.println("count: " + service.getProductionCount()); 

} catch (NamingException ex) { 
    Logger.getLogger(MyFrame.class.getName()).log(Level.SEVERE, null, ex); 
} 

1) Я подумал, что если я включаю AppServ-rt.jar & javaee.jar должно быть достаточно. Видимо, мне нужны другие вещи из GF ... Вопрос в том, какой минимальный минимум мне нужно развернуть клиенту, чтобы заставить EJB искать работу?

2) Зачем мне нужно включать все зависимости ejb-модуля (например, библиотеки спящего режима) ?. Я не использую нигде в своем клиенте из hibernate ...

Спасибо, что прочитали этот длинный пост!

EDIT:

Некоторые подробности о моей среде:

  • Java 1.6.0_21
  • GF 3.0.1
  • Windows (XP/2003/7)
+0

Какой версии GF? –

+0

Я использую GF 3.0.1 – Bogdan

ответ

1

Подумайте о том, как использовать WebServices для подключения настольного приложения к службе приложений э. Из Java EE 6 это намного проще, потому что вы можете просто комментировать некоторый сеансовый компонент (не так уверен в деталях), чтобы стать веб-сервисом. Это «тонкое» решение, и соединения могут выполняться с помощью http (s), поэтому стандартные порты 80/443 не должны блокироваться в частных или корпоративных сетях.

+0

Когда клиент не работает внутри контейнера Jave EE, это определенно лучший подход. Также см. Соответствующую дискуссию: http://stackoverflow.com/questions/3675661/ejb-vs-webservice-performance-point-of-view –

1

Вы должны быть в состоянии избавиться от множества зависимостей, если вы разделите ejb на отдельные модули, то есть на интерфейс и на реализацию.
Драйверы и клиентские банки должны зависеть от intf, а затем клиент больше не должен иметь никакой зависимости от спящего режима.
Я нашел maven быть очень полезным набором инструментами для разделения и управления зависимостями, а также генерации файлов JNLP, дескрипторы развертывания, подписание баночка файлов и т.д.

Вашего спящий режим файл банка может иметь дублирующие подписи, и, возможно, потребуется сначала быть без знака, а затем уйти в отставку.

Почему вы не рассматриваете интерфейс на основе браузера, например gwt или vaadin или jboss-шов или калитку или гравюры или гобелены или один из многих других. Тогда вам не придется беспокоиться о том, чтобы получить правильную версию java, установленную на клиентском компьютере.

1

Это полный список клиентов банков для GlassFish 3:

auto-depends.jar 
deployment-common.jar 
glassfish-corba-internal-api.jar  
internal-api.jar 
management-api.jar 
bean-validator.jar 
dol.jar 
glassfish-corba-newtimer.jar   
javax.ejb.jar 
orb-connector.jar 
common-util.jar 
ejb-container.jar 
glassfish-corba-omgapi.jar  
javax.jms.jar 
orb-iiop.jar 
config-api.jar 
ejb.security.jar 
glassfish-corba-orb.jar 
javax.resource.jar 
security.jar 
config-types.jar 
glassfish-api.jar 
glassfish-corba-orbgeneric.jar  
javax.servlet.jar 
ssl-impl.jar 
config.jar 
glassfish-corba-asm.jar 
glassfish-naming.jar 
javax.transaction.jar 
transaction-internal-api.jar 
connectors-internal-api.jar  
glassfish-corba-codegen.jar  
gmbal.jar 
jta.jar 
container-common.jar 
glassfish-corba-csiv2-idl.jar  
hk2-core.jar 
kernel.jar 
+0

Каков ваш источник для этого списка? как это ** отличается ** от включения самой стеклянной рыбы в качестве библиотеки? – Thufir

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