2014-12-28 2 views
4

У меня есть простая проблема: у меня есть фасоль без статусов EJB, работающая в Glassfish 4. У меня есть клиент, и я хочу найти этот ejb, и я просто не могу сделать правильное имя. Как я должен правильно их называть?Как я могу назвать EJB правильно?

У меня только javax.naming.NamingException, но я понятия не имею, как это сделать правильно. Я следую за соглашением java:global/[ear-name]/[jar-name]/[ejb-name]![fully-qualified-interface-name].

Вот клиент:

... 
public class Main { 

    public static void main(String[] args) { 
     Calculator calculator; 
     Context ctx = null; 

     try { 
      Properties environment = new Properties(); 
      environment.setProperty("org.omg.CORBA.ORBInitialHost", "127.0.0.1"); 
      environment.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 

      // Find the EJB with a JNDI lookup 
      ctx = new InitialContext(environment); 
      calculator = (Calculator)ctx.lookup(
       "java:global/calculator-application/calculator-ejb/calcBean!eak.Calculator" 
      ); 
     } catch(NamingException ex) { 
      ex.printStackTrace(); 
      return; 
     }   
     ... 
    } 
} 

Вот аннотаций моего EJB компонента:

@Stateless(name="calcBean", mappedName="calc") 
@Remote(Calculator.class) 
public class CalculatorBean implements Calculator { 
... 

И я бегу, что JNDI имена в моем Glassfish сервере:

C:\javaee\glassfish4\glassfish\bin>asadmin.bat list-jndi-entries 
UserTransaction: com.sun.enterprise.transaction.startup.TransactionLifecycleServ 
ice$2 
ejb: com.sun.enterprise.naming.impl.TransientContext 
java:global: com.sun.enterprise.naming.impl.TransientContext 
calc__3_x_Internal_RemoteBusinessHome__: javax.naming.Reference 
calc: javax.naming.Reference 
jdbc: com.sun.enterprise.naming.impl.TransientContext 
concurrent: com.sun.enterprise.naming.impl.TransientContext 
com.sun.enterprise.container.common.spi.util.InjectionManager: com.sun.enterpris 
e.container.common.impl.util.InjectionManagerImpl 
jms: com.sun.enterprise.naming.impl.TransientContext 
calc#eak.Calculator: javax.naming.Reference 
Command list-jndi-entries executed successfully. 
+0

Вы пробовали 'известково # eak.Calculator' из вашей продукции выше? – geert3

+0

Если вы используете контейнер клиента приложения GlassFish и упакуете свое клиентское приложение в ваш .ear как модуль <java>, весь ваш пример кода можно уменьшить до одной строки: '@EJB Calculator Calculator;' – VGR

+0

вы упаковываете .ear или in .war? – zbig

ответ

2

Конфигурация You'r выглядит верной для меня. Я протестировал ваш пример, и он работал нормально. Убедитесь, что gf-client.jar от glassfish4/glassfish/lib находится в вашем пути к классу. Также убедитесь, что имена приложений, модулей и бобов указаны на панели Glassfish. В моем случае строка поиска JNDI java:global/ear-1.0-SNAPSHOT/my-ejb-jar-1.0-SNAPSHOT/calcBean!Echo работала отлично.

enter image description here

Смежные вопросы