无法实例化InitialContext [英] Cannot Instantiate InitialContext

查看:161
本文介绍了无法实例化InitialContext的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个充当Glassfish V3 JMS队列独立客户端的类。这个类在我的本地主机上工作正常,即glassfish服务器和独立客户端都在我的本地PC上。



现在我需要在Linux机器上安装此客户端。 Glassfish V3已经在这台Linux机器上运行。我已经从glassfish安装目录添加了 appserv-rt.jar ,并将其添加到standlaone客户端的目录中并设置类路径。但我不断收到此错误:

pre $ javax.naming.NoInitialContextException:无法实例化类:com.sun.enterprise.naming.SerialInitContextFactory [根异常是java.lang.ClassNotFoundException:com.sun.enterprise.naming.SerialInitContextFactory] ​​
在javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
在javax.naming。 InitialContext.getDefaultInitCtx(InitialContext.java:288)$ javax.naming.InitialContext.init中的
(InitialContext.java:223)$ javax.naming.InitialContext中的$ b $。< init>(InitialContext.java:197 )
at com.cisco.zbl.controller.ZblBulkUploadThread.run(ZblBulkUploadThread.java:55)$ b $ at java.lang.Thread.run(Thread.java:662)
引起: java.lang.ClassNotFoundException:com.sun.enterprise.naming.SerialInitContextFactory $ b $ java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native M ethod)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)$ b $在java.lang.ClassLoader.loadClass(ClassLoader.java:248)$ b $在java.lang.Class.forName0(本地方法)
在java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
at javax.naming.spi.NamingManager .getInitialContext(NamingManager.java:654)
... 5 more

这是我的Java代码:

  public class ZblBulkUploadThread实现Runnable,MessageListener {

private static final类别log = Category .getInstance(ZblBulkUploadThread.class);


私人队列队列;

public void run()
{
try
{
ZblConfig zblConfig = new ZblConfig();


InitialContext jndiContext = null;

MessageConsumer messageConsumer = null;

属性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);

jndiContext = new InitialContext(props);

log.debug(zblConfig.getProperty(JMSConnectionFactoryName));

//System.setProperty(\"java.naming.factory.initial\",\"com.sun.jndi.ldap.LdapCtxFactory);

ConnectionFactory connectionFactory =(ConnectionFactory)jndiContext.lookup(zblConfig.getProperty(JMSConnectionFactoryName));


连接连接= connectionFactory.createConnection();


会话会话= connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

queue =(队列)jndiContext.lookup(zblConfig.getProperty(JMSQueueName));

messageConsumer = session.createConsumer(queue);

connection.start();

while(true)
{

Message message = messageConsumer.receive();


ObjectMessage om =((ObjectMessage)message);
尝试
{

RedirectFile文件=(RedirectFile)om.getObject();

log.debug(filePath+ file.getFilePath());
log.debug(userName+ file.getUserName());
log.debug(mode is+ file.getMode());

processMessage(file,zblConfig);

$ b catch(Exception ex)
{
log.error(ERROR+ ex.getMessage());
ex.printStackTrace();




$ b catch(Exception ex)
{

ex.printStackTrace() ;
log.error(Error+ ex.getMessage());




$ b $ p
$ b

错误出现在这行: jndiContext = new InitialContext(props);



如果我使用<$ c的no-arg构造函数, $ c $> InitialContext



这是我调用这个Java程序(Standlaone客户端)的unix shell脚本:

  APP_HOME = / local / scripts / apps / bulkUpload; 

CLASSPATH =。:$ APP_HOME / lib / gf-client.jar:$ APP_HOME / lib / zbl.jar:$ APP_HOME / lib / log4j- 1.2.4.jar:$ APP_HOME / lib / javaee.jar:$ APP_HOME / lib目录/ POI-3.8-beta5-20111217.jar:$ APP_HOME / lib目录/ POI-例子-3.8-beta5-20111217:$ APP_HOME / lib目录/ POI-excelant-3.8-beta5-20111217:$ APP_HOME / lib目录/ POI-OOXML-3.8-beta5-20111217:$ APP_HOME / lib目录/ POI-OOXML-架构 - 3.8 beta5-20111217:$ APP_HOME / lib目录/ POI暂存器-3.8-beta5-20111217:$ APP_HOME / lib目录/appserv-rt.jar:


echoCLASSPATH = $ CLASSPATH;

导出APP_HOME;
导出CLASSPATH;

cd $ APP_HOME;

#javac -d。 ZblBulkUploadThread.java

java -cp $ CLASSPATH -Dzbl.properties = zbl-stage.properties -Djava.naming.factory.initial = com.sun.enterprise.naming.SerialInitContextFactory com.cisco.zbl。控制器.ZblBulkUploadThread

请帮助我 - 我一直在这个问题上停留很长时间。

解决方案

执行其中java 命令并查看jdk是否正确拾取。我怀疑linux是否正在挑选gc4j



更新:



更改此行
CLASSPATH =。:$ APP_HOME / lib / gf-client.jar:$ APP_HOME / lib / zbl.jar:$ APP_HOME / lib / log4j- 1.2.4.jar:$ APP_HOME / lib / javaee.jar:$ APP_HOME /lib/poi-3.8-beta5-20111217.jar:$APP_HOME/lib/poi-examples-3.8-beta5-20111217:$APP_HOME/lib/poi-excelant-3.8-beta5-20111217:$APP_HOME/lib/poi- OOXML-3.8-beta5-20111217:$ APP_HOME / lib目录/ POI-OOXML-架构 - 3.8 beta5-20111217:$ APP_HOME / lib目录/ POI暂存器-3.8-beta5-20111217:$ APP_HOME / lib中/的appserv-rt.jar中的: to

  CLASSPATH =。:$ APP_HOME / lib / gf-client.jar:$ APP_HOME /lib/zbl.jar:$APP_HOME/lib/log4j- 1.2.4.jar:$ APP_HOME / lib / javaee.jar:$ APP_HOME / lib / poi-3.8-beta5-20111217.jar:$ APP_HOME / lib / poi -examples-3.8-beta5-20111217:$ APP_HOME / lib目录/ POI-excelant-3.8-beta5-20111217:$ APP_HOME / lib目录/ POI-OOXML-3.8-beta5-20111217:$ APP_HOME / lib目录/ POI-OOXML-schemas- 3.8 beta5-20111217:$ APP_HOME / lib目录/ POI暂存器-3.8-beta5-20111217:$ APP_HOME / lib中/的appserv-rt.jar中的


I have a class that acts as standalone client for Glassfish V3 JMS queue. This class works fine from my localhost, i.e. both glassfish server and the standalone client are on my local PC.

Now I need to install this client on a Linux machine. Glassfish V3 is already running on this Linux machine. I have added appserv-rt.jar from the glassfish installation directory and added it in the directory of standlaone client and set the classpath. But I keep getting this error:

javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
        at javax.naming.InitialContext.init(InitialContext.java:223)
        at javax.naming.InitialContext.<init>(InitialContext.java:197)
        at com.cisco.zbl.controller.ZblBulkUploadThread.run(ZblBulkUploadThread.java:55)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
        ... 5 more

Here is my Java code:

  public class ZblBulkUploadThread implements Runnable,MessageListener{

    private static final Category log = Category.getInstance(ZblBulkUploadThread.class) ;


            private Queue queue;

    public void run()
    {
            try
            {
                    ZblConfig zblConfig = new ZblConfig() ;


                    InitialContext jndiContext = null;

                    MessageConsumer messageConsumer=null;

                    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");

                    jndiContext = new InitialContext(props);

                    log.debug(zblConfig.getProperty("JMSConnectionFactoryName")) ;

                    //System.setProperty("java.naming.factory.initial","com.sun.jndi.ldap.LdapCtxFactory");

                    ConnectionFactory connectionFactory = (ConnectionFactory)jndiContext.lookup(zblConfig.getProperty("JMSConnectionFactoryName"));


                    Connection connection = connectionFactory.createConnection();


                    Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

                    queue = (Queue)jndiContext.lookup(zblConfig.getProperty("JMSQueueName")) ;

                    messageConsumer = session.createConsumer(queue);

                    connection.start();

                    while(true)
                    {

                            Message message = messageConsumer.receive() ;


                            ObjectMessage om = ((ObjectMessage)message) ;
                            try
                            {

                                    RedirectFile file = (RedirectFile)om.getObject() ;

                                    log.debug("filePath "+file.getFilePath()) ;
                                    log.debug(" userName "+file.getUserName()) ;
                                    log.debug(" mode is "+file.getMode()) ;

                                    processMessage(file,zblConfig) ;

                            }
                            catch(Exception ex)
                            {
                                    log.error("ERROR "+ex.getMessage()) ;
                                    ex.printStackTrace() ;
                            }
                    }


            }
            catch(Exception ex)
            {

                    ex.printStackTrace() ;
                    log.error("Error "+ex.getMessage()) ;
            }
    }

The error comes at this line: jndiContext = new InitialContext(props);

It does not make any difference if I use the no-arg constructor of InitialContext.

Here is my unix shell script that invokes this java program (Standlaone client):

  APP_HOME=/local/scripts/apps/bulkUpload;

CLASSPATH=.:$APP_HOME/lib/gf-client.jar:$APP_HOME/lib/zbl.jar:$APP_HOME/lib/log4j-   1.2.4.jar:$APP_HOME/lib/javaee.jar:$APP_HOME/lib/poi-3.8-beta5-20111217.jar:$APP_HOME/lib/poi-examples-3.8-beta5-20111217:$APP_HOME/lib/poi-excelant-3.8-beta5-20111217:$APP_HOME/lib/poi-ooxml-3.8-beta5-20111217:$APP_HOME/lib/poi-ooxml-schemas-3.8-beta5-20111217:$APP_HOME/lib/poi-scratchpad-3.8-beta5-20111217:$APP_HOME/lib/appserv-rt.jar:


 echo "CLASSPATH=$CLASSPATH";

 export APP_HOME;
 export CLASSPATH;

 cd $APP_HOME;

 #javac -d . ZblBulkUploadThread.java

 java -cp $CLASSPATH -Dzbl.properties=zbl-stage.properties    -Djava.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory com.cisco.zbl.controller.ZblBulkUploadThread

Please help me - I have been stuck on this problem for a long time.

解决方案

do a which java command and see if jdk is being picked up correctly. I doubt that linux is picking gc4j

update:

change this line CLASSPATH=.:$APP_HOME/lib/gf-client.jar:$APP_HOME/lib/zbl.jar:$APP_HOME/lib/log4j- 1.2.4.jar:$APP_HOME/lib/javaee.jar:$APP_HOME/lib/poi-3.8-beta5-20111217.jar:$APP_HOME/lib/poi-examples-3.8-beta5-20111217:$APP_HOME/lib/poi-excelant-3.8-beta5-20111217:$APP_HOME/lib/poi-ooxml-3.8-beta5-20111217:$APP_HOME/lib/poi-ooxml-schemas-3.8-beta5-20111217:$APP_HOME/lib/poi-scratchpad-3.8-beta5-20111217:$APP_HOME/lib/appserv-rt.jar: to

CLASSPATH=.:$APP_HOME/lib/gf-client.jar:$APP_HOME/lib/zbl.jar:$APP_HOME/lib/log4j-   1.2.4.jar:$APP_HOME/lib/javaee.jar:$APP_HOME/lib/poi-3.8-beta5-20111217.jar:$APP_HOME/lib/poi-examples-3.8-beta5-20111217:$APP_HOME/lib/poi-excelant-3.8-beta5-20111217:$APP_HOME/lib/poi-ooxml-3.8-beta5-20111217:$APP_HOME/lib/poi-ooxml-schemas-3.8-beta5-20111217:$APP_HOME/lib/poi-scratchpad-3.8-beta5-20111217:$APP_HOME/lib/appserv-rt.jar

这篇关于无法实例化InitialContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆