Тонкий (нер) автономный клиент для корпоративных приложений - PullRequest
3 голосов
/ 05 сентября 2010

Сначала немного фона :

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

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

Текущие подходы

  • Учитывая эту проблему, я подумалЯ бы сам развернул приложение (я планирую написать какой-нибудь автообновитель, чтобы все было синхронизировано).Поэтому я следовал инструкциям здесь и все было круто, за исключением того факта, что контейнер приложения, который мне нужно развернуть на клиенте, составляет около 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 ...

Спасибо за чтение этого длинного поста!

РЕДАКТИРОВАТЬ:

Некоторые деталио моей среде:

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

Ответы [ 3 ]

1 голос
/ 15 сентября 2010

Вы сможете избавиться от множества зависимостей, если разделите свой ejb на отдельные модули, то есть jar интерфейса и реализации.
JAR-файлы impl и client должны зависеть от intf, и тогда клиент больше не должен зависеть от hibernate.
Я нашел maven очень полезным набором инструментов для разделения и управления зависимостями, а также для создания файлов jnlp, дескрипторов развертывания, файлов подписи jar и т. Д.

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

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

1 голос
/ 13 апреля 2011

Вот полный список клиентских банок для 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
1 голос
/ 14 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...