Клиентский контейнер приложения GlassFish - PullRequest
2 голосов
/ 24 июля 2011

Я пытаюсь работать с клиентским контейнером приложения Embeddable Glassfish . Единственные ресурсы, которые я могу найти, это вышеупомянутые javadoc, которые содержат этот дразнящий фрагмент кода

import org.glassfish.appclient.client.acc.AppClientContainer;
import org.glassfish.appclient.client.acc.config.TargetServer;

AppClientContainerBuilder builder = AppClientContainer.newBuilder(
   new TargetServer("localhost", 3700));

AppClientContainer acc = builder.newContainer(new File("myAC.jar").toURI());

(или, альтернативно)

AppClientContainer acc = builder.newContainer(MyClient.class);

тогда

acc.startClient(clientArgs);
// The newContainer method returns as soon as the client's main method returns,
// even if the client has started another thread or is using the AWT event
// dispatcher thread 
// At some later point, the program can synchronize with the app client in
// a user-specified way at which point it could invoke

acc.stop();

Это выглядит довольно круто, но я пытался заставить его работать пару раз с различными ошибками.

У кого-нибудь есть опыт использования этого или они могут указать мне на некоторые ресурсы, объясняющие, как с этим работать?

Ответы [ 2 ]

3 голосов
/ 15 мая 2012

У меня это работает со Glassfish 3.1.2 и простым приложением Java Swing UI.Хост / порт, указанный в TargetServer, похоже, игнорируется, мне пришлось установить системные свойства:

org.omg.CORBA.ORBInitialHost = hostname
org.omg.CORBA.ORBInitialPort = 2037

, чтобы получить соединение, поскольку я не работаю на портах по умолчанию.

Комуполучить все это для компиляции, это поможет, если Oracle задокументирует, что AppClientContainer и т. д. находятся в пакете:

org.glassfish.appclient.client.acc

, тогда вы можете найти, какие .jars необходимы для компиляции, а именно:

gf-client,jar, gf-client-module.jar, acc-config.jar

AppClientContainer.startClient пытается вызвать метод:

public static void main(String[] args)

в MyClient.class, который может быть не совсем тем, что вы хотите;В моем случае моя цель состоит в том, чтобы заставить это работать с приложением на основе Eclipse, которое также хотело бы "владеть" запуском.Кроме того, мне кажется, что среда OSGI, которая мне нужна, полностью расходится с ACC Glassfish и имеет собственный несовместимый механизм загрузки классов.

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

Кажется, что вся эта реализация ACC является единственным поддерживаемым способом подключенияавтономный клиент для приложения, работающего на Glassfish 3. Это довольно неудовлетворительно по сравнению с простотой, доступной в v2.Огромный список .jars включает в себя всевозможные вещи, которые меня вообще не интересуют, действительно, при запуске я вижу это сообщение:

15-May-2012 17:49:27 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.

Также Oracle сбросил реализацию регистратора SLF4J в bean-validator.jar, который сталкивается с моей собственной предпочтительной реализацией, вызывая дальнейшее сообщение об ошибке.

Часто задаваемые вопросы по GlassJJ EJB в http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html были обновлены для v3 и также могут помочь.

1 голос
/ 28 июля 2011

Кажется, есть приличная часть документации по разработке клиентов с использованием ACC на сайте Oracle.

...