Ошибка клиента EJB
Я создал EJB 2. Я развернул его в JBoss-IDE 1.6, а затем создал тест JUnit для доступа к нему. вот код, который я использовал для клиента:
public class DossierBeanTest extends TestCase {
protected DossierHome dossierHome;
protected Dossier dossier;
public DossierBeanTest(String argo){
super(arg0);
}
protected void setUp() throws Exception {
super.setUp();
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
env.put(Context.PROVIDER_URL,"jnp://localhost:1199");
Context context=new InitialContext(env);
Object finderRef=context.lookup(dossierHome.JNDI_NAME);
dossierHome=(DossierHome)PortableRemoteObject.narrow(finderRef,DossierHome.class);
dossier=dossierHome.create();
}
public void testGetString() throws RemoteException {
assertEquals("Test",dossier.getTest());
}
но проблема в том, что этот клиент завершается с ошибкой:
javax.naming.CommunicationException: Could not obtain connection to any of these
urls: localhost:1199 and discovery failed with error :
javax.naming.CommunicationException: Receive timed out [Root Exception is
java.net.SocketTimeoutException: Receive timed out][Root exception is
javax.naming.CommunicationException: Failed to connect to server localhost:1199
....
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1416)
....
4 ответа
Как уже отмечалось, сервер имен JBoss по умолчанию прослушивает порт 1099. Если вы не изменили это значение в conf/jboss-service.xml
(наименование услуги jboss:service=Naming
), вы должны написать:
env.put(Context.PROVIDER_URL,"jnp://localhost:1099);
При этом я обычно предпочитаю указывать настройки среды JNDI в jndi.properties
файл (который вы положили на путь к классу). В вашем случае со следующим содержанием:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099
И используйте пустой конструктор параметров InitiatContext()
:
Context context = new InitialContext();
Это делает код переносимым (возможно, это не проблема в контексте тестирования, но я предпочитаю не жестко программировать такие вещи).
Для Glass Fish см. Ссылку на удар. http://allinoneissues.blogspot.jp/2012/05/orgjnpinterfacesnamingcontext-failed-to.html
Порт по умолчанию 1099, вы меняли его? если нет, попробуйте переключить порт с 1199.
Также, если вы работаете в Linux, вы можете попробовать 127.0.0.1 вместо localhost.
Я предполагаю, что вы используете неправильный номер порта. Вы можете проверить это сначала, посмотрев на вывод команды netstat -a
, Если ни один процесс не прослушивает порт 1199, вы должны проверить конфигурацию JBoss.