Interesting questions, Mike. While I don't for now know the answer to your
question about the new dyamic loader feature, I will offer a couple of
thoughts with respect to your problem trying to get javaloader working, and
it's possible that what I share may even help you with getting your other
intended class to load using the CF feature.

First, beyond Doug's helpful comment about classpath search order, there's
still another factor that could influence things, especially in that you are
trying to override a class loaded by CF. There's actually more to class
loading in app servers like JRun (CF9 and before) and Tomcat (CF10). There
are in fact several places where classes or Jars can be placed to different
effect. For more on how things are likely working in CF10, being based on
Tomcat, see the Tomcat 7 docs for more:
http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

 

As that indicates, there is also a difference about what you are
specifically trying to override. Some things can't be at all, while others
can only be depending on where you place the classes/jars to do the
override. Note in particular, "There are exceptions. Classes which are part
of the JRE base classes cannot be overridden. For some classes (such as the
XML parser components in J2SE 1.4+), the J2SE 1.4 endorsed feature can be
used. Last, any JAR file that contains Servlet API classes will be
explicitly ignored by the classloader."

 

There's also useful info here: http://www.mulesoft.com/tomcat-classpath.

One last thing: you mention dropping the javaloader into cfusion/lib, and
that may have "worked", but as you note you got an error. Typically, though,
the place to put jars for CF (whether on jrun or tomcat or something else)
is to put it in the [cf]\wwwroot\WEB-INF\lib (or classes, if it's just a
class file). I wonder if you may see a difference doing it there instead. 

Of course, in CF10, that wwwroot is in [cf10]\cfusion\wwwroot for the
default instance, and would be [cf10]\[instancename]\wwwroot if you add
instances with the Instance Manager (available in Enterprise, Trial, or
Developer editions). Just being clear because if you put it in the wrong
place for the instance you're using, that would certainly cause other
problems! :-)

Let us know if this helps, and for sure, if you find out more about the new
dynamic loader and how it may help you with your first challenge, please do
report back here.

/charlie



From: [email protected] [mailto:[email protected]] On Behalf Of Mike Staver
Sent: Friday, September 21, 2012 2:51 AM
To: [email protected]
Subject: Re: [ACFUG Discuss] CF 10 Dynamic Java Loading

 

Thanks for the info. The idea I'm starting to get here is that there really
isn't a built in method like JavaLoader in CF 10. With JavaLoader, I can be
very specific - load up a jar into the server scope and access it whenever I
choose. If I understand this correctly, CF 10 gives us the ability to load
jar files - but in doing so, they can override the built in ones, which
would in fact surely break a tag or two in the case of POI. I think that
leaves me back to using JavaLoader, which I'm OK with. The only problem I
have is I can't figure out how to make it work in CF 10. I have taken the
classloader jar file and put in cfusion/lib and bounced CF. It shows up as a
valid class, and I can create objects with it like so:

<cfobject type="java"
class="com.compoundtheory.classloader.NetworkClassLoader" name="test"> 

However, when I run my usual JavaLoader code, it bombs. The code is:

<cfif NOT structKeyExists(server, var.JLKey)>
    <cfset server[var.JLKey] = createObject("component",
"component.JavaLoader").init(loadPaths=var.paths,
loadColdFusionClassPath=true) />
</cfif>

When running this code, specifically line 211 of JavaLoader.cfc throws this
exception:

java.lang.ClassNotFoundException:
com.compoundtheory.classloader.NetworkClassLoader at
java.net.URLClassLoader$1.run(URLClassLoader.java:202) at
java.security.AccessController.doPrivileged(Native Method) at 

Has anyone seen this with CF 10 and been able to work around it?




-------------------------------------------------------------
To unsubscribe from this list, manage your profile @ 
http://www.acfug.org?fa=login.edituserform

For more info, see http://www.acfug.org/mailinglists
Archive @ http://www.mail-archive.com/discussion%40acfug.org/
List hosted by http://www.fusionlink.com
-------------------------------------------------------------

Reply via email to