You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by bu...@apache.org on 2003/08/09 21:41:19 UTC
DO NOT REPLY [Bug 22274] New: -
Bizzare double-execution problem
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22274>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22274
Bizzare double-execution problem
Summary: Bizzare double-execution problem
Product: Struts
Version: 1.1 Final
Platform: PC
OS/Version: Windows NT/2K
Status: NEW
Severity: Normal
Priority: Other
Component: Controller
AssignedTo: struts-dev@jakarta.apache.org
ReportedBy: matthew.sgarlata@verizon.net
I am experiencing a very strange problem where when a user posts data from a
form, a struts action gets executed twice instead of once. I get this problem
with struts 1.1 and from the most recent version of struts from the cvs
repository (I downloaded that this morning). I turned on log4j logging at the
trace level for the org.apache.struts.action package, and it looks like two
threads are being spawned for some reason. I edited the ActionServlet.process
method so that it now looks like the code below (I just added the log.trace
statement).
protected void process(HttpServletRequest request, HttpServletResponse
response)
throws IOException, ServletException {
log.trace("**************************** ActionServlet.process");
ModuleUtils.getInstance().selectModule(request, getServletContext());
getRequestProcessor(getModuleConfig(request)).process(request,
response);
}
Here is the log4j output. It's confusing because every line prints out twice
for some reason (I guess I have log4j installed incorrectly), but if you watch
the threads, the process method is actually being called twice by two different
threads!
DEBUG [Thread-1] (ActionServlet.java:1155) - ****************************
ActionServlet.process
DEBUG [Thread-1] (ActionServlet.java:1155) - ****************************
ActionServlet.process
DEBUG [Thread-1] (RequestProcessor.java:214) - Processing a 'POST' for
path '/saveLinks'
DEBUG [Thread-1] (RequestProcessor.java:214) - Processing a 'POST' for
path '/saveLinks'
DEBUG [Thread-1] (RequestProcessor.java:361) - Storing ActionForm bean
instance in scope 'request' under attribute key 'linkingInfo'
DEBUG [Thread-1] (RequestProcessor.java:361) - Storing ActionForm bean
instance in scope 'request' under attribute key 'linkingInfo'
DEBUG [Thread-1] (RequestProcessor.java:777) - Populating bean properties from
this request
DEBUG [Thread-1] (RequestProcessor.java:777) - Populating bean properties from
this request
DEBUG [Thread-2] (ActionServlet.java:1155) - ****************************
ActionServlet.process
DEBUG [Thread-1] (RequestProcessor.java:906) - Validating input form properties
DEBUG [Thread-1] (RequestProcessor.java:906) - Validating input form properties
DEBUG [Thread-1] (RequestProcessor.java:911) - No errors detected, accepting
input
DEBUG [Thread-1] (RequestProcessor.java:911) - No errors detected, accepting
input
DEBUG [Thread-2] (ActionServlet.java:1155) - ****************************
ActionServlet.process
DEBUG [Thread-2] (RequestProcessor.java:214) - Processing a 'POST' for
path '/saveLinks'
DEBUG [Thread-2] (RequestProcessor.java:214) - Processing a 'POST' for
path '/saveLinks'
DEBUG [Thread-2] (RequestProcessor.java:361) - Storing ActionForm bean
instance in scope 'request' under attribute key 'linkingInfo'
DEBUG [Thread-1] (RequestProcessor.java:294) - Looking for Action instance for
class com.bah.ebspnp.relatedLinks.SaveLinksAction
DEBUG [Thread-1] (RequestProcessor.java:294) - Looking for Action instance for
class com.bah.ebspnp.relatedLinks.SaveLinksAction
DEBUG [Thread-1] (RequestProcessor.java:304) - Returning existing Action
instance
DEBUG [Thread-1] (RequestProcessor.java:304) - Returning existing Action
instance
DEBUG [Thread-2] (RequestProcessor.java:361) - Storing ActionForm bean
instance in scope 'request' under attribute key 'linkingInfo'
DEBUG [Thread-1] (SaveLinksAction.java:43) - Begin SaveLinksAction.execute
DEBUG [Thread-1] (SaveLinksAction.java:43) - Begin SaveLinksAction.execute
DEBUG [Thread-2] (RequestProcessor.java:777) - Populating bean properties from
this request
DEBUG [Thread-2] (RequestProcessor.java:777) - Populating bean properties from
this request
DEBUG [Thread-2] (RequestProcessor.java:906) - Validating input form properties
DEBUG [Thread-2] (RequestProcessor.java:906) - Validating input form properties
DEBUG [Thread-2] (RequestProcessor.java:911) - No errors detected, accepting
input
DEBUG [Thread-2] (RequestProcessor.java:911) - No errors detected, accepting
input
DEBUG [Thread-2] (RequestProcessor.java:294) - Looking for Action instance for
class com.bah.ebspnp.relatedLinks.SaveLinksAction
DEBUG [Thread-2] (RequestProcessor.java:294) - Looking for Action instance for
class com.bah.ebspnp.relatedLinks.SaveLinksAction
DEBUG [Thread-2] (RequestProcessor.java:304) - Returning existing Action
instance
DEBUG [Thread-2] (RequestProcessor.java:304) - Returning existing Action
instance
DEBUG [Thread-2] (SaveLinksAction.java:43) - Begin SaveLinksAction.execute
DEBUG [Thread-2] (SaveLinksAction.java:43) - Begin SaveLinksAction.execute
DEBUG [Thread-1] (SaveLinksAction.java:88) -
insert into bin_bin
(
bin_id_cd1,
bin_id_cd2
)
values
(
16,
355
)
DEBUG [Thread-1] (SaveLinksAction.java:88) -
insert into bin_bin
(
bin_id_cd1,
bin_id_cd2
)
values
(
16,
355
)
DEBUG [Thread-2] (SaveLinksAction.java:88) -
insert into bin_bin
(
bin_id_cd1,
bin_id_cd2
)
values
(
16,
355
)
DEBUG [Thread-2] (SaveLinksAction.java:88) -
insert into bin_bin
(
bin_id_cd1,
bin_id_cd2
)
values
(
16,
355
)
DEBUG [Thread-2] (ExceptionHandler.java:155) - ExceptionHandler caught this
exception:
java.sql.SQLException: ORA-00001: unique constraint (EBSPNP_ADMIN.SYS_C002397)
violated
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery
(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout
(OracleStatement.java:2709)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:854)
at org.apache.commons.dbcp.DelegatingStatement.execute
(DelegatingStatement.java:184)
at com.bah.krm.util.SqlUtils.execute(SqlUtils.java:182)
at com.bah.ebspnp.relatedLinks.SaveLinksAction.execute(SaveLinksAction.java:92)
at org.apache.struts.action.RequestProcessor.processActionPerform
(RequestProcessor.java:448)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:264)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1157)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:256)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnectio
n(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:479)
DEBUG [Thread-2] (ExceptionHandler.java:155) - ExceptionHandler caught this
exception:
java.sql.SQLException: ORA-00001: unique constraint (EBSPNP_ADMIN.SYS_C002397)
violated
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery
(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout
(OracleStatement.java:2709)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:854)
at org.apache.commons.dbcp.DelegatingStatement.execute
(DelegatingStatement.java:184)
at com.bah.krm.util.SqlUtils.execute(SqlUtils.java:182)
at com.bah.ebspnp.relatedLinks.SaveLinksAction.execute(SaveLinksAction.java:92)
at org.apache.struts.action.RequestProcessor.processActionPerform
(RequestProcessor.java:448)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:264)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1157)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java:256)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke
(ErrorReportValve.java:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:174)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNex
t(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnectio
n(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:479)
DEBUG [Thread-2] (RequestProcessor.java:397) - processForwardConfig
(ForwardConfig
[name=null,path=/../common/exception.jsp,redirect=false,contextRelative=false])
DEBUG [Thread-2] (RequestProcessor.java:397) - processForwardConfig
(ForwardConfig
[name=null,path=/../common/exception.jsp,redirect=false,contextRelative=false])
DEBUG [Thread-1] (SaveLinksAction.java:103) - End SaveLinksAction.execute
DEBUG [Thread-1] (SaveLinksAction.java:103) - End SaveLinksAction.execute
DEBUG [Thread-1] (RequestProcessor.java:397) - processForwardConfig
(ForwardConfig[name=null,path=/bin/binInfo.do?
method=view&id=16,redirect=true,contextRelative=true])
DEBUG [Thread-1] (RequestProcessor.java:397) - processForwardConfig
(ForwardConfig[name=null,path=/bin/binInfo.do?
method=view&id=16,redirect=true,contextRelative=true])
ERROR [Thread-2] (exception_0002dbody_jsp.java:97) - java.sql.SQLException: ORA-
00001: unique constraint (EBSPNP_ADMIN.SYS_C002397) violated
The exception is occuring because the SQL statement I am trying to execute gets
executed twice, which is not OK. Since the ActionServlet.process method is
called twice, I am inclined to think there is something wrong with my web
server configuration and that this issue is not a struts problem, but I'm not
sure. Here is my configuration for the ActionServlet in my web.xml file. Am I
doing something wrong?
<servlet>
<servlet-name>ebspnp</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>config/admin</param-name>
<param-value>/WEB-INF/struts-config-admin.xml</param-value>
</init-param>
<init-param>
<param-name>config/adminPicklist</param-name>
<param-value>/WEB-INF/struts-config-adminPicklist.xml</param-value>
</init-param>
<init-param>
<param-name>config/adminDev</param-name>
<param-value>/WEB-INF/struts-config-adminDev.xml</param-value>
</init-param>
<init-param>
<param-name>config/bin</param-name>
<param-value>/WEB-INF/struts-config-bin.xml</param-value>
</init-param>
<init-param>
<param-name>config/bpac</param-name>
<param-value>/WEB-INF/struts-config-bpac.xml</param-value>
</init-param>
<init-param>
<param-name>config/example</param-name>
<param-value>/WEB-INF/struts-config-example.xml</param-value>
</init-param>
<init-param>
<param-name>config/pe</param-name>
<param-value>/WEB-INF/struts-config-pe.xml</param-value>
</init-param>
<init-param>
<param-name>config/relatedLinks</param-name>
<param-value>/WEB-INF/struts-config-relatedLinks.xml</param-value>
</init-param>
<init-param>
<param-name>config/roadmap</param-name>
<param-value>/WEB-INF/struts-config-roadmap.xml</param-value>
</init-param>
<init-param>
<param-name>config/scenario</param-name>
<param-value>/WEB-INF/struts-config-scenario.xml</param-value>
</init-param>
<init-param>
<param-name>config/project</param-name>
<param-value>/WEB-INF/struts-config-project.xml</param-value>
</init-param>
<init-param>
<param-name>host</param-name>
<param-value>localhost</param-value>
</init-param>
<init-param>
<param-name>port</param-name>
<param-value>80</param-value>
</init-param>
</servlet>
---------------------------------------------------------------------
To unsubscribe, e-mail: struts-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-dev-help@jakarta.apache.org