Hi,
I am trying to load a class with a variable name (string) from an EJB (in JBoss). In a stand-alone application the usual way of doing that is to write a custom classloader and constructing the class from a file through a bytestream if it isn't loaded. I tried to do the same thing from an EJB but that fails.
If I try to instantiate the class like this:
ReplyClass = (Thread.currentThread().getContextClassLoader()).loadClass(replyClassName);
reply=(AAAReply) ReplyClass.newInstance();
reply.generateReply();
I get (for obvious reasons) this:
16:01:17,463 INFO [STDOUT] java.lang.ClassNotFoundException: No ClassLoaders found for: AAAReplyPBAC
If I call the classloader from the EJB like this:
ReplyClass = ccl.loadClass(replyClassName);
reply= (AAAReply) ReplyClass.newInstance();
reply.generateReply();
And in the classloader the class file is looked up (this is a modified version of the CompilingClassLoader from the IBM developerworks classloader tutorial)
File classFile = new File(classFilename);
System.out.println("classFile exists? " + classFile.exists());
System.out.println("Path: " + classFile.getAbsolutePath());
I get this:
16:04:20,479 INFO [STDOUT] classFile exists? false
16:04:20,479 INFO [STDOUT] Path: C:\jboss-4.0.3SP1\bin\AAAReplyPBAC.class
16:04:21,682 INFO [STDOUT] general error : AAAReplyPBAC
16:04:21,682 INFO [STDOUT] java.lang.ClassNotFoundException: AAAReplyPBAC
16:04:21,682 INFO [STDOUT] at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
It seems that the classloader isn't looking in the right place; it should be looking in the EJB/EAR jar in the deployment directory of the application server (JBoss). Is that the case, and how can I get the classloader to look there? Or is something else wrong?
Thanks,
Fred.
Moved to ejb user forum since this has nothing to do with the design of aop.
Start here:
http://wiki.jboss.org/wiki/Wiki.jsp?page=ClassLoadingOverview