2014-01-10 90 views
1

我在运行简单的EJB3 cient访问会话bean时收到javax.naming.NoInitialContextException尝试访问会话bean时出错

下面是我的客户端类:

package com.ibytecode.client; 
import javax.naming.Context; 
import javax.naming.NamingException; 

import com.ibytecode.business.HelloWorld; 
import com.ibytecode.businesslogic.HelloWorldBean; 
import com.ibytecode.clientutility.ClientUtility; 

public class EJBApplicationClient { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     HelloWorld bean = doLookup(); 
     System.out.println(bean.sayHello()); // 4. Call business logic 
    } 

    private static HelloWorld doLookup() { 
     Context context = null; 
     HelloWorld bean = null; 
     try { 
      // 1. Obtaining Context 
      context = ClientUtility.getInitialContext(); 
      // 2. Generate JNDI Lookup name 
      String lookupName = getLookupName(); 
      // 3. Lookup and cast 
      bean = (HelloWorld) context.lookup(lookupName); 

     } catch (NamingException e) { 
      e.printStackTrace(); 
     } 
     return bean; 
    } 

    private static String getLookupName() { 
/* 
The app name is the EAR name of the deployed EJB without .ear suffix. 
Since we haven't deployed the application as a .ear, 
the app name for us will be an empty string 
*/ 
     String appName = ""; 

     /* The module name is the JAR name of the deployed EJB 
     without the .jar suffix. 
     */ 
     String moduleName = "HelloWorldSessionBean"; 

/*AS7 allows each deployment to have an (optional) distinct name. 
This can be an empty string if distinct name is not specified. 
*/ 
     String distinctName = ""; 

     // The EJB bean implementation class name 
     String beanName = HelloWorldBean.class.getSimpleName(); 

     // Fully qualified remote interface name 
     final String interfaceName = HelloWorld.class.getName(); 

     // Create a look up string name 
     String name = "ejb:" + appName + "/" + moduleName + "/" + 
      distinctName + "/" + beanName + "!" + interfaceName; 

     return name; 
    } 

} 

下面是我得到的错误:

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:307) 
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344) 
at javax.naming.InitialContext.lookup(InitialContext.java:411) 
at com.ibytecode.client.EJBApplicationClient.doLookup(EJBApplicationClient.java:28) 
at com.ibytecode.client.EJBApplicationClient.main(EJBApplicationClient.java:15) 
Exception in thread "main" java.lang.NullPointerException 
at com.ibytecode.client.EJBApplicationClient.main(EJBApplicationClient.java:16) 
+0

你是如何开始你的应用程序?你是将它作为独立的Java应用程序还是在应用程序客户端中运行? – marcus

+0

嗨马库斯, 感谢您的时间。我作为一个独立的Java应用程序运行它。 –

+0

你使用什么服务器?显示你的ClientUtility.getInitialContext()。我猜这是需要添加'props.put(Context.URL_PKG_PREFIXES,“org.jboss.ejb.client.naming”);' – Qwertovsky

回答

1
  1. 我提供了下列库的Eclipse的构建路径和问题走了。
  2. 无论出于什么原因将这些jar文件添加到项目中,都会摆脱getlookup errorjavax.naming.NoInitialContextException:需要在环境或系统属性中,或者作为applet参数或应用程序资源文件中指定类名:java。 naming.factory.initial

3 JAR名称位置 JBoss的事务-api_1.1_spec-1.0.0.Final.jar AS7_HOME /模块/的javax /交易/ API /主/

的JBoss的EJB -api_3.1_spec-1.0.1.Final.jar AS7_HOME/modules/javax/ejb/api/main/

jboss-ejb-client-1.0.0.Beta10.jar AS7_HOME/modules/org/jboss/ejb-client/main/

jboss-marshalling-1.3.0.GA.jar AS7_HOME/modules/org/jboss /编组/主/

xnio-API-3.0.0.CR5.jar AS7_HOME /模块/组织/ JBoss的/ xnio /主/

的jboss-远程-3.2.0.CR6.jar AS7_HOME /模块/组织/ JBoss的/ remoting3 /主/

的jboss-测井3.1.0.Beta3.jar AS7_HOME /模块/组织/ JBoss的/记录/主/

xnio-NIO-3.0.0.CR5。罐子AS7_H OME /模块/组织/ JBoss的/ xnio/NIO /主/

的jboss-SASL-1.0.0.Beta9.jar AS7_HOME /模块/组织/ JBoss的/ SASL /主/

JBoss的编组河-1.3.0.GA.jar AS7_HOME/modules/org/jboss/marshalling/river/main/

+0

基于jboss的发布,最终的文件名可以不同,例如在我的情况下使用集成eap,在eclipse中,第一个库的路径是:E:\ vpa \ jboss \ jboss-eap-6.1.0 \ jboss-eap-6.1 \ modules \ system \ layers \ base \ javax \ ejb \ api \主\ jboss的-EJB-api_3.1_spec-1.0.2.Final-的redhat-2.jar – user3191424

相关问题