【问题标题】:Java JNDI with EJB configuration带有 EJB 配置的 Java JNDI
【发布时间】:2016-03-29 14:39:34
【问题描述】:

我的 JNDI 配置端 EJB 3.1 和 Oracle 12.1 DB 存在问题。 我的代码:

    private static NewSessionBeanRemote lookupRemoteSessionBean() throws NamingException {

    final Hashtable jndiProperties = new Hashtable();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");

    final Context context = new InitialContext(jndiProperties);
    final String appName = "";
    final String moduleName = "EjbComponent";
    final String distinctName = "";
    final String beanName = NewSessionBean.class.getSimpleName();
    final String viewClassName = NewSessionBeanRemote.class.getName();
    System.out.println("ejb:" + appName + "" + moduleName + "" + distinctName + "/" + beanName + "!" + viewClassName);
    return (NewSessionBeanRemote) context.lookup("ejb:" + appName + "" + moduleName + "" + distinctName + "/" + beanName + "!" + viewClassName);
}

当我尝试查找 jndi 时出错:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at com.studio.java.client.EjbTester.lookupRemoteSessionBean(EjbTester.java:73)
at com.studio.java.client.EjbTester.invokeStatelessBean(EjbTester.java:51)
at com.studio.java.client.EjbTester.main(EjbTester.java:41)

【问题讨论】:

标签: java jakarta-ee ejb jndi ejb-3.1


【解决方案1】:

除了您的Context.URL_PKG_PREFIXES,您还需要设置以下属性:

jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");

另外,如果你有任何类型的认证,你必须通过Context.SECURITY_PRINCIPALContext.SECURITY_CREDENTIALS进行设置:

jndiProperties.put(Context.SECURITY_PRINCIPAL, "username");
jndiProperties.put(Context.SECURITY_CREDENTIALS, "password");

【讨论】:

  • 非常感谢 aribeiro!现在我将收到:EJBCLIENT000025:没有 EJB 接收器可用于处理调用上下文 org.jboss.ejb.client.EJBClientInvocationContext@396a51ab 的 [appName:, moduleName:EjbComponent, distinctName:] 组合
  • @reve,您还缺少此属性:jndiProperties.put("jboss.naming.client.ejb.context", true);。更多信息可以在here找到。
猜你喜欢
  • 1970-01-01
  • 2017-08-04
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多