Adding to ColdFusion Classpath for Particular Instance in Multi-Server Adobe Coldfusion 9

心不动则不痛 提交于 2019-12-01 05:51:59

问题


Adobe ColdFusion 9 Multi-Server doesn't have the "JVM and Java Settings" page in the CF Admin, so to add something to the CF classpath, for a given instance, that instance must be started with an alternate jvm.config.

I don't have a problem with starting with an alternate jvm.config. I do, however, have a problem knowing precisely how to edit that file in the proper way.

My stock jvm.config looks like this (ignore line breaks--they are not in the actual file):

java.args=-server -Xmx512m -Dcoldfusion.sessioncookie.httponly=true -Dsun.io.useCanonCaches=false -XX:MaxPermSize=192m -XX:+UseParallelGC -Xbatch -Djava.awt.headless=true
-Dcoldfusion.rootDir={application.home}/
-Djava.security.policy={application.home}/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/coldfusion.policy
-Djava.security.auth.policy={application.home}/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/neo_jaas.policy

One of my more successful* attempts at adding a folder of classes to the classpath looks like this. (Here are just a couple.)

java.args=-server -Xmx512m -Dcoldfusion.sessioncookie.httponly=true -Dsun.io.useCanonCaches=false -XX:MaxPermSize=192m -XX:+UseParallelGC -Xbatch -Djava.awt.headless=true
-Dcoldfusion.rootDir={application.home}/
-Djava.security.policy={application.home}/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/coldfusion.policy
-Djava.security.auth.policy={application.home}/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/cfusion/lib/neo_jaas.policy
-Dcoldfusion.classPath={application.home}/servers/hud/cfusion.ear/cfusion.war/WEB-INF/cfusion/lib,/var/www/apps/onecpd/GeoServices_sandbox

*I say "one of my more successful attempts" because the instance does start, and those classes are on the CF classpath [I can instantiate them with createObject()], but the instance start is not clean--there are many Flex-related errors:

jamie@icf109118-ubuntu:/opt/jrun4/servers/hud/cfusion.ear/cfusion.war/WEB-INF/cfusion/lib$ sudo /opt/jrun4/bin/jrun -config /opt/jrun4/bin/jvm_onecpd.config start onecpd
Starting Macromedia JRun 4.0 (Build 108858), onecpd server
03/19 11:37:34 info JRun Naming Service listening on *:2911
03/19 11:37:35 info No JDBC data sources have been configured for this server (see jrun-resources.xml)
03/19 11:37:35 info JRun Web Server listening on *:8303
03/19 11:37:35 info JRun Proxy Server listening on *:51003
03/19 11:37:35 info Deploying enterprise application "JRun 4.0 Internal J2EE Components" from: file:/opt/jrun4/lib/jrun-comp.ear
03/19 11:37:35 info Deploying EJB "JRunSQLInvoker" from: file:/opt/jrun4/lib/jrun-comp.ear
Server onecpd ready (startup time: 2 seconds)
03/19 11:37:35 info Deploying enterprise application "cfusion" from: file:/opt/jrun4/servers/onecpd/cfusion.ear/
03/19 11:37:36 info Deploying web application "cfusion" from: file:/opt/jrun4/servers/onecpd/cfusion.ear/
java.lang.ClassNotFoundException: flex.server.j2ee.cache.CacheFilter
    at coldfusion.bootstrap.BootstrapClassLoader.loadClass(BootstrapClassLoader.java:235)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at coldfusion.bootstrap.ClassloaderHelper.initFilterClass(ClassloaderHelper.java:123)
    at coldfusion.bootstrap.BootstrapFilter.init(BootstrapFilter.java:34)
    at jrun.servlet.FilterObject.init(FilterObject.java:63)
    at jrun.servlet.FilterManager.loadFilter(FilterManager.java:220)
    at jrun.servlet.FilterManager.init(FilterManager.java:158)
    at jrun.servlet.FilterManager.create(FilterManager.java:75)
    at jrun.servlet.WebApplicationService.start(WebApplicationService.java:230)
    at jrun.ea.EnterpriseApplication.start(EnterpriseApplication.java:194)
    at jrun.deployment.DeployerService.initModules(DeployerService.java:708)
    at jrun.deployment.DeployerService.createWatchedDeployment(DeployerService.java:243)
    at jrun.deployment.DeployerService.deploy(DeployerService.java:428)
    at jrun.deployment.DeployerService.checkWatchedDirectories(DeployerService.java:179)
    at jrun.deployment.DeployerService.run(DeployerService.java:889)
    at jrunx.scheduler.SchedulerService.invokeRunnable(SchedulerService.java:230)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
03/19 11:37:36 user failed to load: flex.server.j2ee.cache.CacheFilter
03/19 11:37:36 error Error loading class for Filter CFCacheFilter: Filter is disabled.
[1]java.lang.ClassNotFoundException: flex.server.j2ee.cache.CacheFilter
    at coldfusion.bootstrap.BootstrapClassLoader.loadClass(BootstrapClassLoader.java:235)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at coldfusion.bootstrap.ClassloaderHelper.initFilterClass(ClassloaderHelper.java:123)
    at coldfusion.bootstrap.BootstrapFilter.init(BootstrapFilter.java:34)
    at jrun.servlet.FilterObject.init(FilterObject.java:63)
    at jrun.servlet.FilterManager.loadFilter(FilterManager.java:220)
    at jrun.servlet.FilterManager.init(FilterManager.java:158)
    at jrun.servlet.FilterManager.create(FilterManager.java:75)
    at jrun.servlet.WebApplicationService.start(WebApplicationService.java:230)
    at jrun.ea.EnterpriseApplication.start(EnterpriseApplication.java:194)
    at jrun.deployment.DeployerService.initModules(DeployerService.java:708)
    at jrun.deployment.DeployerService.createWatchedDeployment(DeployerService.java:243)
    at jrun.deployment.DeployerService.deploy(DeployerService.java:428)
    at jrun.deployment.DeployerService.checkWatchedDirectories(DeployerService.java:179)
    at jrun.deployment.DeployerService.run(DeployerService.java:889)
    at jrunx.scheduler.SchedulerService.invokeRunnable(SchedulerService.java:230)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
[0]javax.servlet.ServletException: flex.server.j2ee.cache.CacheFilter
    at coldfusion.bootstrap.ClassloaderHelper.initFilterClass(ClassloaderHelper.java:132)
    at coldfusion.bootstrap.BootstrapFilter.init(BootstrapFilter.java:34)
    at jrun.servlet.FilterObject.init(FilterObject.java:63)
    at jrun.servlet.FilterManager.loadFilter(FilterManager.java:220)
    at jrun.servlet.FilterManager.init(FilterManager.java:158)
    at jrun.servlet.FilterManager.create(FilterManager.java:75)
    at jrun.servlet.WebApplicationService.start(WebApplicationService.java:230)
    at jrun.ea.EnterpriseApplication.start(EnterpriseApplication.java:194)
    at jrun.deployment.DeployerService.initModules(DeployerService.java:708)
    at jrun.deployment.DeployerService.createWatchedDeployment(DeployerService.java:243)
    at jrun.deployment.DeployerService.deploy(DeployerService.java:428)
    at jrun.deployment.DeployerService.checkWatchedDirectories(DeployerService.java:179)
    at jrun.deployment.DeployerService.run(DeployerService.java:889)
    at jrunx.scheduler.SchedulerService.invokeRunnable(SchedulerService.java:230)
    at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:428)
    at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)

Note that without adding {application.home}/servers/hud/cfusion.ear/cfusion.war/WEB-INF/cfusion/lib to Dcoldfusion.classPath, as well, the server wouldn't really start at all.

So, what is the magic formula for cleanly adding something to the ColdFusion classpath in jvm.config?


回答1:


From Christian Cantrell - Engineering Manager and Evangelist, I give you The Definitive Guide to the ColdFusion Classpath (although it is a bit dated)

Here is an excerpt of the portion that I think relates to your setup:

J2EE Deployment

  1. The easiest way to add class or jar files to your class path is to simply drop them in the lib directory where they are automatically picked up. The directory is located at {cf_installation}/servers/lib. These class files will be available to all servers.

  2. You can also make your class files available only to the ColdFusion server by dropping them in “{cf_installation}/servers/default/cfmx/WEB-INF/lib”. (Note that putting them in {cf_installation}/servers/default/cfmx/WEB-INF/cfusion/lib will NOT work.)

  3. You can drop them in any of the Java extension directories. To find a list of the Java extension directories, open the ColdFusion administrator and click on “System Information”. Toward the bottom, you will see a system property called “Java Ext Dirs”. You can put jar and class files in any of those directories to have them picked up by the ColdFusion server.

  4. Another way to do it is to add classes through the JRun Management Console. Open up the console, and under the default server, click on settings, then add your classes to the class path list. (Note you can also click on “ColdFusion MX application” under the default server, then click on settings to make the same changes.)

  5. And finally, once again, you can edit the jvm.config file yourself, however again, I recommend you stick to using one of the methods above.

UPDATE from the comments below

When editing the jvm.config file (option 5), try adding the directory path to the java.class.path= line in the jvm.config file (at the bottom). Not in the java.args= as you have done in the posted example.



来源:https://stackoverflow.com/questions/15505738/adding-to-coldfusion-classpath-for-particular-instance-in-multi-server-adobe-col

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!