You might want to take a look at how Apache jsvc sets up the jvm:
http://commons.apache.org/daemon/jsvc.html

That might give you some clues.

Allen Reese
Core Platforms
Yahoo!, Inc.
 

> -----Original Message-----
> From: sdenning [mailto:sdenn...@rocketmail.com]
> Sent: Friday, August 05, 2011 7:24 AM
> To: users@activemq.apache.org
> Subject: ActiveMQ JNI problem - simple config problem or compatibility issue?
> 
> Are there any inherent compatibility issues with ActiveMQ and JNI?  Maybe
> I've got a simple configuration issue.  I don't see any clean examples that
> use ActiveMQ and JNI.  This code worked for another jms provider.
> 
> Platform: Windows XP
> C++ Compiler: Visual Studio 6.0
> Java version: java 1.6
> Activemq version: 5.4.2
> 
> Application: C++ application that uses JNI to create JVM to access ActiveMQ
> topics.
> The POJO app works fine with same java code that accesses Activemq that is
> also
> running on this machine, but when loaded in via JNI I get:
> 
> javax.naming.NoInitialContextException: Cannot instantiate class:
> org.apache.activemq.jndi.ActiveMQInitialContextFactory [Root exception is
> java.lang.ClassNotFoundException:
> org/apache/activemq/jndi/ActiveMQInitialContextFactory]
> 
> when javax.naming.InitialContext(props) is called with (IP changed to
> protect the innocent):
> java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
> java.naming.provider.url=tcp://555.555.555.555:61616
> java.naming.security.principal=defaultUser
> java.naming.security.credentials=defaultPassword
> 
> I've run with -verbose:class and verified the classpath is correct by
> forcing an instanciation of ActiveMQInitialContextFactory and see:
> [Loaded org.apache.activemq.jndi.ActiveMQInitialContextFactory from
> file:/C.../activemq-all-5.4.2.jar]
> 
> Here's the basic JNI code:
>     classPath = "-Djava.class.path=" + classPath;
>     dsoPath = "-Djava.library.path=" + dsoPath;
> 
>     std::cout << "Path2: "<< (char*)classPath.c_str() << std::endl;
>     JavaVMOption options[3];
>     options[0].optionString = (char*)classPath.c_str();
>     options[1].optionString = (char*)dsoPath.c_str();
>     options[2].optionString = "-verbose:class"; //class|gc|jni
> 
>     mJvmArgs.version = JNI_VERSION_1_6;
>     // Tried using 1_4, but it produced same exception
>     //mJvmArgs.version = JNI_VERSION_1_4;
>     mJvmArgs.options = options;
>     mJvmArgs.nOptions = 3;
>     mJvmArgs.ignoreUnrecognized = JNI_FALSE;
> 
>     if (JNI_CreateJavaVM(&gJvm, (void**)&mJvmEnv, &mJvmArgs) < 0)
> 
> The class loading is suspicious for InitialContext.  With the POJO the class
> loading looks like:
> [Loaded com.sun.naming.internal.ResourceManager from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12 from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$2 from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$6 from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$5 from rt.jar]
> [Loaded javax.naming.NamingEnumeration from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$InputStreamEnumeration from
> rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$InputStreamEnumeration$1
> from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$4 from rt.jar]
> [Loaded javax.naming.spi.NamingManager from rt.jar]
> [Loaded javax.naming.spi.InitialContextFactory from rt.jar]
> [Loaded org.apache.activemq.jndi.ActiveMQInitialContextFactory from
> file:activemq-all-5.4.2.jar
> 
> But the class loading in the c++ app that uses JNI to create a JVM:
> [Loaded javax.naming.InitialContext from rt.jar]
> [Loaded com.sun.naming.internal.ResourceManager from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12 from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$2 from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$6 from rt.jar]
> [Loaded com.sun.naming.internal.VersionHelper12$5 from rt.jar]
> >>[Loaded sun.misc.URLClassPath$2 from rt.jar]
> >>[Loaded java.lang.ClassLoader$2 from rt.jar]
> >>[Loaded sun.misc.URLClassPath$1 from rt.jar]
> >>[Loaded java.net.URLClassLoader$3 from rt.jar]
> >>[Loaded sun.misc.CompoundEnumeration from rt.jar]
> >>[Loaded javax.naming.NamingEnumeration from rt.jar]
> >>[Loaded com.sun.naming.internal.VersionHelper12$InputStreamEnumeration
> from rt.jar]
> >>[Loaded com.sun.naming.internal.VersionHelper12$InputStreamEnumeration$1
> from rt.jar]
> >>[Loaded java.net.URLClassLoader$3$1 from rt.jar]
> >>[Loaded com.sun.naming.internal.VersionHelper12$4 from rt.jar]
> >>[Loaded javax.naming.spi.NamingManager from rt.jar]
> >>[Loaded javax.naming.NoInitialContextException from rt.jar]
> 
> Note, I've also put the jndi.properties into the jar that I'm loading that
> has the properties for finding the activeMQ server.  Any ideas are greatly
> appreciated.
> Thanks!
> 
> --
> View this message in context: 
> http://activemq.2283324.n4.nabble.com/ActiveMQ-JNI-problem-simple-
> config-problem-or-compatibility-issue-tp3721325p3721325.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to