You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Mansour Al Akeel <ma...@gmail.com> on 2014/11/15 09:09:06 UTC

Starting OpenEJB embedded in another JVM

I am trying to fork a java process, where the subprocess runs openejb.
I am passing the classpath as an argument to the child process:


String classpath = classpathBuilder.toString();
    StringBuilder commandBuilder = new StringBuilder();

    commandBuilder.append(javaBin);

    commandBuilder.append(" -Djdbc.driver='" + driver);
    commandBuilder.append("' -Djdbc.url='" + url);
    commandBuilder.append("' -Djdbc.username='" + username);
    commandBuilder.append("' -Djdbc.password='" + password + "'");

    commandBuilder.append(" -cp '");
    commandBuilder.append(classpath);
    commandBuilder.append("' ");

    commandBuilder.append(" -Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ");
    commandBuilder.append(className);


Process process = Runtime.getRuntime().exec(command);


In the child process I have

    Class cls = Class.forName("org.postgresql.Driver");


    System.setProperty("openejb.classloader.forced-load", "org.postgresql");

properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");

    properties.put("openejb.validation.output.level", "VERBOSE");

    String driver = System.getProperty("jdbc.driver");
    String url = System.getProperty("jdbc.url");
    String username = System.getProperty("jdbc.username");
    String password = System.getProperty("jdbc.password");

    properties.put("jdbc/dataSource", "new://Resource?type=DataSource");
    properties.put("jdbc/dataSource.JdbcDriver", driver);
    properties.put("jdbc/dataSource.JdbcUrl", url);
    properties.put("jdbc/dataSource.UserName", username);
    properties.put("jdbc/dataSource.Password", password);

However, I am getting this error:

INFO - Creating TransactionManager(id=Default Transaction Manager)
INFO - Creating SecurityService(id=Default Security Service)
INFO - Creating Resource(id=jdbc/dataSource)
SEVERE - FATAL ERROR: Unknown error in Assembler.  Please send the
following stack trace and this message to users@openejb.apache.org :
 org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
resolve class 'org.postgresql.Driver'
        at org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:43)
        at org.apache.xbean.propertyeditor.AbstractConverter.toObject(AbstractConverter.java:86)
        at org.apache.xbean.propertyeditor.PropertyEditors.getValue(PropertyEditors.java:284)
        at org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:172)
        at org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(ObjectRecipe.java:592)
        at org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
        at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
        at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
        at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:49)
        at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2120)
        at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:490)
        at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:409)
        at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:148)
        at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:65)
        at org.apache.openejb.OpenEJB.init(OpenEJB.java:296)
        at org.apache.openejb.OpenEJB.init(OpenEJB.java:276)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36)
        at org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:96)
        at org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:60)
        at org.apache.openejb.core.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:44)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)


I am sure the jdbc driver is in the classpath because I can load it
successfully.

Any idea ??

Thank you.

Re: Starting OpenEJB embedded in another JVM

Posted by Mansour Al Akeel <ma...@gmail.com>.
Thank you Andy and Romain. I did was passing the argument in quote,
and this is what caused the issue.


On Sat, Nov 15, 2014 at 11:21 PM, Andy Gumbrecht
<ag...@tomitribe.com> wrote:
> Try using a ProcessBuilder.
>
> Andy.
>
> http://www.tomitribe.com - @AndyGeeDe - On a mobile device, and I have fat
> fingers. Sorry for typos.
> On 15 Nov 2014 09:10, "Mansour Al Akeel" <ma...@gmail.com> wrote:
>
>> I am trying to fork a java process, where the subprocess runs openejb.
>> I am passing the classpath as an argument to the child process:
>>
>>
>> String classpath = classpathBuilder.toString();
>>     StringBuilder commandBuilder = new StringBuilder();
>>
>>     commandBuilder.append(javaBin);
>>
>>     commandBuilder.append(" -Djdbc.driver='" + driver);
>>     commandBuilder.append("' -Djdbc.url='" + url);
>>     commandBuilder.append("' -Djdbc.username='" + username);
>>     commandBuilder.append("' -Djdbc.password='" + password + "'");
>>
>>     commandBuilder.append(" -cp '");
>>     commandBuilder.append(classpath);
>>     commandBuilder.append("' ");
>>
>>     commandBuilder.append(" -Xdebug
>> -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ");
>>     commandBuilder.append(className);
>>
>>
>> Process process = Runtime.getRuntime().exec(command);
>>
>>
>> In the child process I have
>>
>>     Class cls = Class.forName("org.postgresql.Driver");
>>
>>
>>     System.setProperty("openejb.classloader.forced-load",
>> "org.postgresql");
>>
>> properties.put(Context.INITIAL_CONTEXT_FACTORY,
>> "org.apache.openejb.client.LocalInitialContextFactory");
>>
>>     properties.put("openejb.validation.output.level", "VERBOSE");
>>
>>     String driver = System.getProperty("jdbc.driver");
>>     String url = System.getProperty("jdbc.url");
>>     String username = System.getProperty("jdbc.username");
>>     String password = System.getProperty("jdbc.password");
>>
>>     properties.put("jdbc/dataSource", "new://Resource?type=DataSource");
>>     properties.put("jdbc/dataSource.JdbcDriver", driver);
>>     properties.put("jdbc/dataSource.JdbcUrl", url);
>>     properties.put("jdbc/dataSource.UserName", username);
>>     properties.put("jdbc/dataSource.Password", password);
>>
>> However, I am getting this error:
>>
>> INFO - Creating TransactionManager(id=Default Transaction Manager)
>> INFO - Creating SecurityService(id=Default Security Service)
>> INFO - Creating Resource(id=jdbc/dataSource)
>> SEVERE - FATAL ERROR: Unknown error in Assembler.  Please send the
>> following stack trace and this message to users@openejb.apache.org :
>>  org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
>> resolve class 'org.postgresql.Driver'
>>         at
>> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:43)
>>         at
>> org.apache.xbean.propertyeditor.AbstractConverter.toObject(AbstractConverter.java:86)
>>         at
>> org.apache.xbean.propertyeditor.PropertyEditors.getValue(PropertyEditors.java:284)
>>         at
>> org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:172)
>>         at
>> org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(ObjectRecipe.java:592)
>>         at
>> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
>>         at
>> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
>>         at
>> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
>>         at
>> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:49)
>>         at
>> org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2120)
>>         at
>> org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:490)
>>         at
>> org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:409)
>>         at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:148)
>>         at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:65)
>>         at org.apache.openejb.OpenEJB.init(OpenEJB.java:296)
>>         at org.apache.openejb.OpenEJB.init(OpenEJB.java:276)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>         at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>         at java.lang.reflect.Method.invoke(Method.java:601)
>>         at
>> org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36)
>>         at
>> org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:96)
>>         at
>> org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:60)
>>         at
>> org.apache.openejb.core.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:44)
>>         at
>> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
>>         at
>> javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
>>
>>
>> I am sure the jdbc driver is in the classpath because I can load it
>> successfully.
>>
>> Any idea ??
>>
>> Thank you.
>>

Re: Starting OpenEJB embedded in another JVM

Posted by Andy Gumbrecht <ag...@tomitribe.com>.
Try using a ProcessBuilder.

Andy.

http://www.tomitribe.com - @AndyGeeDe - On a mobile device, and I have fat
fingers. Sorry for typos.
On 15 Nov 2014 09:10, "Mansour Al Akeel" <ma...@gmail.com> wrote:

> I am trying to fork a java process, where the subprocess runs openejb.
> I am passing the classpath as an argument to the child process:
>
>
> String classpath = classpathBuilder.toString();
>     StringBuilder commandBuilder = new StringBuilder();
>
>     commandBuilder.append(javaBin);
>
>     commandBuilder.append(" -Djdbc.driver='" + driver);
>     commandBuilder.append("' -Djdbc.url='" + url);
>     commandBuilder.append("' -Djdbc.username='" + username);
>     commandBuilder.append("' -Djdbc.password='" + password + "'");
>
>     commandBuilder.append(" -cp '");
>     commandBuilder.append(classpath);
>     commandBuilder.append("' ");
>
>     commandBuilder.append(" -Xdebug
> -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ");
>     commandBuilder.append(className);
>
>
> Process process = Runtime.getRuntime().exec(command);
>
>
> In the child process I have
>
>     Class cls = Class.forName("org.postgresql.Driver");
>
>
>     System.setProperty("openejb.classloader.forced-load",
> "org.postgresql");
>
> properties.put(Context.INITIAL_CONTEXT_FACTORY,
> "org.apache.openejb.client.LocalInitialContextFactory");
>
>     properties.put("openejb.validation.output.level", "VERBOSE");
>
>     String driver = System.getProperty("jdbc.driver");
>     String url = System.getProperty("jdbc.url");
>     String username = System.getProperty("jdbc.username");
>     String password = System.getProperty("jdbc.password");
>
>     properties.put("jdbc/dataSource", "new://Resource?type=DataSource");
>     properties.put("jdbc/dataSource.JdbcDriver", driver);
>     properties.put("jdbc/dataSource.JdbcUrl", url);
>     properties.put("jdbc/dataSource.UserName", username);
>     properties.put("jdbc/dataSource.Password", password);
>
> However, I am getting this error:
>
> INFO - Creating TransactionManager(id=Default Transaction Manager)
> INFO - Creating SecurityService(id=Default Security Service)
> INFO - Creating Resource(id=jdbc/dataSource)
> SEVERE - FATAL ERROR: Unknown error in Assembler.  Please send the
> following stack trace and this message to users@openejb.apache.org :
>  org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
> resolve class 'org.postgresql.Driver'
>         at
> org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:43)
>         at
> org.apache.xbean.propertyeditor.AbstractConverter.toObject(AbstractConverter.java:86)
>         at
> org.apache.xbean.propertyeditor.PropertyEditors.getValue(PropertyEditors.java:284)
>         at
> org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:172)
>         at
> org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(ObjectRecipe.java:592)
>         at
> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
>         at
> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
>         at
> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
>         at
> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:49)
>         at
> org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2120)
>         at
> org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:490)
>         at
> org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:409)
>         at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:148)
>         at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:65)
>         at org.apache.openejb.OpenEJB.init(OpenEJB.java:296)
>         at org.apache.openejb.OpenEJB.init(OpenEJB.java:276)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:601)
>         at
> org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36)
>         at
> org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:96)
>         at
> org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:60)
>         at
> org.apache.openejb.core.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:44)
>         at
> javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
>         at
> javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
>
>
> I am sure the jdbc driver is in the classpath because I can load it
> successfully.
>
> Any idea ??
>
> Thank you.
>

Re: Starting OpenEJB embedded in another JVM

Posted by Romain Manni-Bucau <rm...@tomitribe.com>.
Hi

maybe try -Dopenejb.resources.use-container-loader=false.

If it doesn't work your classpath if surely wrong
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau



2014-11-15 9:09 GMT+01:00 Mansour Al Akeel <ma...@gmail.com>:
> I am trying to fork a java process, where the subprocess runs openejb.
> I am passing the classpath as an argument to the child process:
>
>
> String classpath = classpathBuilder.toString();
>     StringBuilder commandBuilder = new StringBuilder();
>
>     commandBuilder.append(javaBin);
>
>     commandBuilder.append(" -Djdbc.driver='" + driver);
>     commandBuilder.append("' -Djdbc.url='" + url);
>     commandBuilder.append("' -Djdbc.username='" + username);
>     commandBuilder.append("' -Djdbc.password='" + password + "'");
>
>     commandBuilder.append(" -cp '");
>     commandBuilder.append(classpath);
>     commandBuilder.append("' ");
>
>     commandBuilder.append(" -Xdebug
> -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ");
>     commandBuilder.append(className);
>
>
> Process process = Runtime.getRuntime().exec(command);
>
>
> In the child process I have
>
>     Class cls = Class.forName("org.postgresql.Driver");
>
>
>     System.setProperty("openejb.classloader.forced-load", "org.postgresql");
>
> properties.put(Context.INITIAL_CONTEXT_FACTORY,
> "org.apache.openejb.client.LocalInitialContextFactory");
>
>     properties.put("openejb.validation.output.level", "VERBOSE");
>
>     String driver = System.getProperty("jdbc.driver");
>     String url = System.getProperty("jdbc.url");
>     String username = System.getProperty("jdbc.username");
>     String password = System.getProperty("jdbc.password");
>
>     properties.put("jdbc/dataSource", "new://Resource?type=DataSource");
>     properties.put("jdbc/dataSource.JdbcDriver", driver);
>     properties.put("jdbc/dataSource.JdbcUrl", url);
>     properties.put("jdbc/dataSource.UserName", username);
>     properties.put("jdbc/dataSource.Password", password);
>
> However, I am getting this error:
>
> INFO - Creating TransactionManager(id=Default Transaction Manager)
> INFO - Creating SecurityService(id=Default Security Service)
> INFO - Creating Resource(id=jdbc/dataSource)
> SEVERE - FATAL ERROR: Unknown error in Assembler.  Please send the
> following stack trace and this message to users@openejb.apache.org :
>  org.apache.xbean.propertyeditor.PropertyEditorException: Unable to
> resolve class 'org.postgresql.Driver'
>         at org.apache.xbean.propertyeditor.ClassEditor.toObjectImpl(ClassEditor.java:43)
>         at org.apache.xbean.propertyeditor.AbstractConverter.toObject(AbstractConverter.java:86)
>         at org.apache.xbean.propertyeditor.PropertyEditors.getValue(PropertyEditors.java:284)
>         at org.apache.xbean.recipe.RecipeHelper.convert(RecipeHelper.java:172)
>         at org.apache.xbean.recipe.ObjectRecipe.extractConstructorArgs(ObjectRecipe.java:592)
>         at org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:275)
>         at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
>         at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
>         at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:49)
>         at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2120)
>         at org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:490)
>         at org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:409)
>         at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:148)
>         at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:65)
>         at org.apache.openejb.OpenEJB.init(OpenEJB.java:296)
>         at org.apache.openejb.OpenEJB.init(OpenEJB.java:276)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:601)
>         at org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36)
>         at org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:96)
>         at org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:60)
>         at org.apache.openejb.core.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:44)
>         at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
>         at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
>
>
> I am sure the jdbc driver is in the classpath because I can load it
> successfully.
>
> Any idea ??
>
> Thank you.