Hello,
I'm using tomcat4/milestone 4 (Struts nightly build from 06-Dec)
the exception I'm getting:
A Servlet Exception Has Occurred
Exception Report:
javax.servlet.ServletException: Servlet.service() for servlet default threw
exception
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
java:537)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher
.java:292)
at
org.apache.struts.action.ActionServlet.processValidate(ActionServlet.java:17
69)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1321)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:447)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
java:517)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher
.java:292)
at
org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.ja
va:1468)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1334)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:447)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:180)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:255)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:165)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:1876)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161
)
at
org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:343)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:159)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:
785)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:902)
at java.lang.Thread.run(Thread.java:484)
Root Cause:
java.lang.NullPointerException
at
org.apache.catalina.resources.FileResources.setResource(FileResources.java:5
86)
at
org.apache.catalina.servlets.DefaultServlet.doPut(DefaultServlet.java:401)
at
org.apache.catalina.servlets.DefaultServlet.doPost(DefaultServlet.java:365)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
java:517)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher
.java:292)
at
org.apache.struts.action.ActionServlet.processValidate(ActionServlet.java:17
69)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1321)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:447)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.
java:517)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher
.java:292)
at
org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.ja
va:1468)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1334)
at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:447)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh
ain.java:180)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja
va:255)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja
va:165)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:1876)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161
)
at
org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:343)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java
:159)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
at
org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:
785)
at
org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:902)
at java.lang.Thread.run(Thread.java:484)
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-----
As for the synchronization problem :
// current code from the ActionServlet
protected Action processActionCreate(ActionMapping mapping,
HttpServletRequest request) {
// Acquire the Action instance we will be using
String actionClass = mapping.getType();
Action actionInstance = (Action) actions.get(actionClass);
if (actionInstance == null) {
(<---******)
try {
Class clazz = Class.forName(actionClass);
actionInstance = (Action) clazz.newInstance();
actionInstance.setServlet(this);
actions.put(actionClass, actionInstance);
(<---******)
What if (let's say) thread1 is in the try-block, but has not yet completed
the try-block;
and an other thread tries to access the same action and also passes the
if-statement, since thread1 has not
yet set the new "actionInstance" in the hashtable.
This would lead of having (for a specific time intervall and under specific
circumstances) multiple Instances
of an (specific :) Action.
fm