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: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to