2014-01-10 4 views
1

Я получаю javax.naming.NoInitialContextException при запуске простого EJB3 cient для доступа к сеансовому компоненту.Ошибка при попытке доступа к сеансовому компоненту

Ниже мой клиент класса:

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

Привет, Marcus, Спасибо за ваше время. Я запускал его как автономное приложение java. –

+0

Какой сервер вы используете? Покажите свой ClientUtility.getInitialContext(). Я предполагаю, что нужно добавить 'props.put (Context.URL_PKG_PREFIXES," org.jboss.ejb.client.naming ");' – Qwertovsky

ответ

1
  1. я поставила следующие библиотеки в путь сборки затмения и проблема ушла ,
  2. По какой-либо причине добавление этих файлов jar в проект избавляется от getlookup errorjavax.naming.NoInitialContextException: необходимо указать имя класса в среде или системном свойстве или в качестве параметра апплета или в файле ресурсов приложения: 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-апи-3.0.0.CR5.jar AS7_HOME/модули/орг/JBoss/xnio/основные/

JBoss-Remoting-3.2.0.CR6.jar AS7_HOME/модули/орг/JBoss/remoting3/основные/

JBoss-каротажа 3.1.0.Beta3.jar AS7_HOME/модули/орг/JBoss/регистрация/Основной/

xnio-NiO-3.0.0.CR5. jar 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

0

Я думаю, вы должны запустить свой код внутри клиента приложения и создать для него начальный контекст. См. Java EE Application client container для более подробной информации.

Смежные вопросы