Hi all
I am configuring a
struts enabled web application using ColdFusion MX. Please do not ignore this
thread as it is ColdFusion, because I feel the issue I have is a generic one and could happen in any
J2EE servers. I have already posted this in ColdFusion forum but I feel the issue has got to do with struts. Also please do not suggest alternatives for ColdFusion, because that is the only application server we have and I wanted to use Struts. I followed this article about Struts on ColdFusion (
http://www.macromedia.com/devnet/mx/coldfusion/articles/struts.html).
After following all the configuration steps and I tried
http://localhost:8500/do/welcome, I get "503 null" error. But the CF application server is running fine and it displays other pure ColdFusion pages.
I am new to struts and I feel that there is a problem in loading the ActionServlet. Following the error and configuration information, if you need more information please let me know. I would highly appreciate your help.
These are the error messages I found in the coldfusion log file:
03/06 12:13:48 error Could not pre-load
servlet: action
javax.servlet.UnavailableException
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:399)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
at jrun.servlet.WebApplicationService.loadServlet(WebApplicationService.java:1243)
at jrun.servlet.WebApplicationService.preloadServlets(WebApplicationService.java:790)
at jrun.servlet.WebApplicationService.postStart(WebApplicationService.java:297)
at jrun.ea.EnterpriseApplication.start(EnterpriseApplication.java:203)
at jrun.deployment.DeployerService.initModules(DeployerService.java:710)
at jrun.deployment.DeployerService.createWatchedDeployment(DeployerService.java:242)
at jrun.deployment.DeployerService.deploy(DeployerService.java:430)
at jrun.deployment.DeployerService.handleEvent(DeployerService.java:381)
at jrunx.kernel.JRunServiceDeployer.fireEvent(JRunServiceDeployer.java:710)
at jrunx.kernel.JRunServiceDeployer.deployServices(JRunServiceDeployer.java:111)
at jrunx.kernel.DeploymentService.loadServices(DeploymentService.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1628)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1523)
at jrunx.kernel.JRun.startServer(JRun.java:575)
at jrunx.kernel.JRun.<init>(JRun.java:493)
at jrunx.kernel.JRun$1.run(JRun.java:346)
at java.security.AccessController.doPrivileged(Native Method)
at jrunx.kernel.JRun.start(JRun.java:343)
at jrunx.kernel.JRun.startByNTService(JRun.java:427)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at jrunx.kernel.JRun.invoke(JRun.java:180)
at jrunx.kernel.JRun.main(JRun.java:168)
03/06 12:14:34 error
javax.servlet.UnavailableException
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:399)
at javax.servlet.GenericServlet.init(GenericServlet.java:258)
at jrun.servlet.WebApplicationService.loadServlet(WebApplicationService.java:1243)
at jrun.servlet.JRunRequestDispatcher.init(JRunRequestDispatcher.java:748)
at jrun.servlet.JRunRequestDispatcher.<init>(JRunRequestDispatcher.java:98)
at jrun.servlet.WebApplicationService.getDispatcher(WebApplicationService.java:866)
at jrun.servlet.ServletEngineService$1.fetch(ServletEngineService.java:511)
at jrunx.util.Cache.get(Cache.java:116)
at jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:523)
at jrun.servlet.http.WebService.invokeRunnable(WebService.java:172)
at jrunx.scheduler.ThreadPool$DownstreamMetrics.invokeRunnable(ThreadPool.java:349)
at jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:457)
at jrunx.scheduler.ThreadPool$UpstreamMetrics.invokeRunnable(ThreadPool.java:295)
at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
This is action-mapping excerpt of struts-config.xml:
<action-mappings>
<action path="/loginUser"
type="com.macromedia.article.actions.LoginUserAction"
name="LoginForm">
<forward name="success" path="/cfm/welcome.cfm"/>
<forward name="failure" path="/cfm/login.cfm"/>
</action>
<action path="/logoutUser"
type="com.macromedia.article.actions.LogoutUserAction">
<forward name="success" path="/cfm/login.cfm"/>
</action>
<action path="/welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/cfm/login.cfm"/>
</action-mappings>
Following is the excerpt included in the web.xml file:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>application</param-name>
<param-value>ApplicationResources</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>/do/*</url-pattern>
</servlet-mapping>
<!-- Struts Tag Library Descriptors -->
<taglib>
<taglib-uri>struts-bean</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-html</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-logic</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-logic.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>struts-nested</taglib-uri>
<taglib-location>/WEB-INF/lib/struts-nested.tld</taglib-location>
</taglib>
This is how I have configured and I am using ColdFusion MX 7.
1. Downloaded Struts 1.3.5 and placed all the struts jar files in [CfusionMX/wwwroot]/WEB-INF/lib folder.
2. Downloaded
Tomcat 4.1.34 and placed servlet.jar in [CfusionMX/wwwroot]/WEB-INF/lib folder.
3. Downloaded Xalan-j 2.7.0 and placed xalan.jar in [CfusionMX/wwwroot]/WEB-INF/lib folder.
4. Downloaded Xerces-j 2.9.0 and placed xercesImpl.jar in [CfusionMX/wwwroot]/WEB-INF/lib folder.
5. Placed struts-bean.tld, struts-html.tld, struts-logic.tld, struts-nested.tld in [CfusionMX/wwwroot]/WEB-INF/tlds folder.
6. Enabled session variables using J2EE.
7. Edited web.xml as required.
8. Placed struts-config.xml in [CfusionMX/wwwroot]/WEB-INF folder.
9. Placed *.cfm files in [CfusionMX/wwwroot]/cfm folder.
10. Compiled and jarred the package of all the
java classes and placed the jar file in [CfusionMX/wwwroot]/WEB-INF/lib folder.
11. Placed accounts.dat in [CfusionMX/wwwroot]/WEB-INF/classes folder.
Am I going wrong anywhere? Please help.
Vignesh