Проблемы при загрузке удаленного интерфейса с context.lookup - PullRequest
0 голосов
/ 03 сентября 2011

Раньше я работал с jboss 4.2.3 GA, и там все работало нормально (по крайней мере, вызывая удаленный интерфейс со стороны клиента). Теперь я пытаюсь развернуть это с помощью Jboss 7.0.1 FINAL

У меня есть (на сервере проекта) этот класс:

@Remote(ConfigurationHelperRemote.class)
@Local(ConfigurationHelperLocal.class)
@Stateless
public class ConfigurationHelper implements ConfigurationHelperRemote,  ConfigurationHelperLocal {
   ...
}

а у меня удаленный интерфейс

@Remote
public interface ConfigurationHelperRemote {
  ...
}

Теперь я вызывал удаленный интерфейс со стороны клиента с помощью такого контекста:

configurationHelper = (ConfigurationHelperRemote) ctx.lookup("ear-1.0.0/ConfigurationHelper/remote");

Но это больше не работает. Теперь я получаю это сообщение об ошибке

javax.naming.NameNotFoundException: Name 'ear-1.0.0' not found in context ''

Мой файл ear называется ear-1.0.0.ear , а клиент внутри называется client-1.0.0.war , а сервер называется server- 1.0.0.jar .

Это содержимое файла application.xml внутри файла ear

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
   <display-name>ear</display-name>
     <module>
      <web>
       <web-uri>client-1.0.0.war</web-uri>
       <context-root>/client</context-root>
     </web>
    </module>
   <module>
    <ejb>server-1.0.0.jar</ejb>
   </module>
</application>

Где мне нужно настроить имя контекста? Или что я делаю не так?

Большое спасибо и много поздравлений, Hauke ​​

PS .: Я только что распечатал всю информацию о контексте JNDI, и в базе данных есть только источник данных. Я сделал это:

      public static void showJndiContext( Context ctx, String name, String space )
   {
      if( null == name  ) name  = "";
      if( null == space ) space = "";
      try {
         NamingEnumeration<NameClassPair> en = ctx.list( name );
         while( en != null && en.hasMoreElements() ) {
            String delim = ( name.length() > 0 ) ? "/" : "";
            NameClassPair ncp = en.next();
            System.out.println( space + name + delim + ncp );
            if( space.length() < 40 )
               showJndiContext( ctx, ncp.getName(), "    " + space );
         }
      } catch( javax.naming.NamingException ex ) {

      }
   }

1 Ответ

1 голос
/ 16 сентября 2011

для переносимого синтаксиса JNDI, имя подстановки выглядит следующим образом:

  1. java: global [/ имя приложения] / имя модуля / имя корпоративного бина [/ имя интерфейса]
  2. java: имя модуля / корпоративного компонента / [имя интерфейса]
  3. java: приложение [/ имя модуля] / имя корпоративного компонента [/ имя интерфейса]

подробности см. в http://java.sun.com/javaee/6/docs/tutorial/doc/gipjf.html#girgn

Так что для своего кода попробуйте

configurationHelper = (ConfigurationHelperRemote) ctx.lookup("java:global/ear-1.0.0/server-1.0.0/ConfigurationHelper");

этот формат, который я использовал в своем коде для удаленного компонента ...

...