Вот способы заставить его работать с кластером GF 2.1.1 и клиентом Swing.В настоящее время я использую автономный вариант из-за скорости запуска клиента, но ACC может работать на вас.
Автономный
То, как вы это делаете, считается автономным.
http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB
http://blogs.oracle.com/dadelhardt/entry/standalone_iiop_clients_with_glassfish
ACC
Другим способом решения этой проблемы является запуск клиента с ACC.Это означает упаковку клиентского кода в ухо в качестве Application Client и либо запуск с использованием метода JNLP, либо ручную установку связанного ACC (на самом деле мини-стеклянная рыбка) на клиентских компьютерах.В GF 2.1 любой способ работает нормально, но оба довольно толстые, и метод JNLP может увеличить время запуска.Предположительно в GF 3.1 они переработали ACC, и он запускается быстрее.Что-то, что может быть неочевидным, это то, что с помощью ACC вы получаете список серверов в кластере, предоставленный автоматически при запуске клиента.
http://blogs.oracle.com/theaquarium/entry/java_ee_clients_with_or
http://download.oracle.com/docs/cd/E18930_01/html/821-2418/beakv.html#scrolltoc
http://download.oracle.com/docs/cd/E18930_01/html/821-2418/gkusn.html
Поиск
Любой из вышеперечисленных способов обеспечивает отработку отказа RMI / CORBA и балансировку нагрузки для клиента.
В любом случае, если у вас есть правильные зависимости от вашегоclasspath и системный набор свойств com.sun.appserv.iiop.endpoints
(например, node1: 33700, node2: 33701), вам потребуется только InitialContext без аргументов, потому что материал Glassfish автоматически регистрирует их свойства подключения и т. д., как описано в первой ссылке:
new InitialContext()
И поиск будет работать.Для моих удаленных сессионных компонентов (EJB 3.0) я обычно делаю это следующим образом:
@Stateless(mappedName="FooBean")
public class FooBean implements FooBeanRemote {}
@Remote
public interface FooBeanRemote {}
, затем в коде клиента:
FooBeanRemote foo = (FooBeanRemote) ctx.lookup("FooBean");