【发布时间】:2015-02-25 04:58:48
【问题描述】:
我有一个简单的问题,我有一个在 Glassfish 4 中运行的无状态 EJB bean。我有一个客户端,我想查找这个 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 {
...
然后我运行 Glassfish 服务器中的 jndi 名称:
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.
【问题讨论】:
-
您是否尝试过上面输出中的
calc#eak.Calculator? -
如果您使用 GlassFish 应用程序客户端容器,并将您的客户端应用程序打包在您的 .ear 中作为 <java>模块,您的整个代码示例可以简化为一行:
@EJB Calculator calculator; -
你是打包成.ear还是.war?
标签: java jakarta-ee glassfish ejb jndi