2016-09-30 4 views
2

Я создал простое Enterprise Application в Netbeans, которое работает как ожидается в Netbeans. Клиент Enterprise Application содержит следующий код:Невозможно создать экземпляр класса: com.sun.enterprise.naming.SerialInitContextFactory

package clienttest2; 

import java.util.Properties; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import test.TestEJBRemote; 

/** 
* 
* @author 
*/ 
public class Main { 
private TestEJBRemote testejb; 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) throws NamingException { 
     Properties props = new Properties(); 
     props = new Properties(); 
     props.setProperty("java.naming.factory.initial", 
      "com.sun.enterprise.naming.SerialInitContextFactory"); 
     props.setProperty("java.naming.factory.url.pkgs", 
      "com.sun.enterprise.naming"); 
     props.setProperty("java.naming.factory.state", 
      "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 
     props.setProperty("org.omg.CORBA.ORBInitialHost", "computer"); 
     props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 
     InitialContext ctx = new InitialContext(props); 
     TestEJBRemote t = (TestEJBRemote) ctx.lookup("java:global/EJBTest/EJBTest-ejb/TestEJB"); 
     System.out.println(t.getName("Ian")); 

     //Context ctx = null; 
     //ctx=new InitialContext(); 
     //TestEJBRemote t = (TestEJBRemote) ctx.lookup("java:global/EJBTest/EJBTest-ejb/TestEJB"); 
     //System.out.println(t.getName("Ian")); 
    } 

} 

Я попробовал следующее:

java -jar ClientTest.jar 

ошибка, я получаю это: Не удается создать экземпляр класса: com.sun.enterprise.naming.SerialInitContextFactory

У меня есть несколько вопросов:

У меня есть JRE 1.8, установленный на моем ПК. Означает ли это, что я могу запускать все типы приложений Java, т.е. Java EE и Java SE?

+0

команда appclient от glassfish может разрешить эти зависимости для вас. – Thufir

ответ

0

Проще говоря: ваш код содержит довольно список имен классов, которые будут загружены с использованием отражения. Сюрприз: все из них должны быть в вашем пути к классу.

Скорее всего, в вашей настройке проекта Netbeans перечислены все необходимые JAR (возможно, поскольку они принадлежат к набору JAR, поставляемых с вашей установкой Java).

Но когда вы вызываете java в командной строке, вы более или менее начинаете с classpath, который содержит только «ядро» java JAR.

Другими словами: вы должны определить те JAR, которые содержат классы ваших кодовых списков; и тогда вы должны предоставить их в своей «настройке пути класса» при вызове java в командной строке.

+0

Имеет ли JRE все необходимое для запуска приложений Java SE и Java EE? Благодарю. +1 для ссылки на classpath. – w0051977

0

Может быть дубликатом How to setup JNDI for Glassfish 3.1.2 for a stand-alone client?

Мы можем предположить, что Glassfish и NetBean разделяют некоторые библиотеки для Java EE.

В любом случае вы можете использовать http://jarscan.com, чтобы отсканировать свой каталог netbean, чтобы найти банку, которая содержит необходимый вам класс. И добавьте его в вашу java-командную строку.