java - 我应该如何命名 EJB 才能正确查找它?

标签 java jakarta-ee glassfish ejb jndi

我有一个简单的问题,我有一个在 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.

最佳答案

你的配置对我来说是有效的。我测试了你的例子,它工作得很好。请确保 glassfish4/glassfish/lib 中的 gf-client.jar 在您的类路径中。还请确认您的应用程序、模块和 bean 名称与您在 Glassfish 控制台中看到的一样。在我的例子中,JNDI 查找字符串 java:global/ear-1.0-SNAPSHOT/my-ejb-jar-1.0-SNAPSHOT/calcBean!Echo 工作得很好。

enter image description here

关于java - 我应该如何命名 EJB 才能正确查找它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681553/

相关文章:

java - 有没有办法在java中创建用户定义类类型的数组?

java - 在 JAVAEE Glassfish 中启用 FormDataMultiPart 或 @FormDataParam

java - Kafka 错误连接到节点 ubuntukafka :9092 (id: 0 rack: null) (org. apache.kafka.clients.NetworkClient) java.net.UnknownHostException:

java - 检查 Java 中的 Alfresco 端点 URL 是否可用

java - 您可以使用 Java 和 REST Web 服务进行异步通信吗?

java - 泛型和限定符

jakarta-ee - NetBeans IDE在“清理和构建”或外部更改时发出异常的编译器错误。IDE不再意识到JPA生成的静态元模型

jsp - JSP EL、JSF EL 和 Unified EL 之间的区别

jsf - 为什么我在 Tomcat 上运行时在我的 jsf 页面中看到 #{UserBean.userName} 但它在 Glassfish 上运行良好

java - Glassfish 上的 Hibernate 不是实体异常