У меня есть простая проблема: у меня есть фасоль без статусов 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.
Вы пробовали 'известково # eak.Calculator' из вашей продукции выше? – geert3
Если вы используете контейнер клиента приложения GlassFish и упакуете свое клиентское приложение в ваш .ear как модуль <java>, весь ваш пример кода можно уменьшить до одной строки: '@EJB Calculator Calculator;' – VGR
вы упаковываете .ear или in .war? – zbig