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 [email protected] :
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.