struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steven Yang <kenshin...@gmail.com>
Subject Re: interceptor init twice
Date Thu, 25 Apr 2013 01:13:24 GMT
@Maurizio I am indeed using Spring, I will try without Spring.
@Dave what i mean by "include" is that I use the <include file=""/> tag

I do understand that Interceptor is singleton-ish. And I do understand if I
defined the same interceptor in two different stacks there should be two
different instances.
However the case is that I only have one interceptor stack and two packages
that shares the same stack but the init() is still being called twice. Also
I have not declared any other "default" package anywhere in any xml, you
are seeing all the packages that I have declared which are "default" and
"example" and yet struts complains that I have declared "default" twice.
If I have two different packages the interceptor should be instantiated two
times then if I add another package the interceptor should be instantiated
three times right? but it only gets instantiated two times max.

The clarify the sample I created is a very simple app created from the
blank war, I only added the bare minimum to reproduce the problem, to be
exact init() wasn't called twice when I was using 2.1.8, if I recall
correctly this behavior started on 2.3.8.
So I want to confirm that this behavior is expected.

Thanks


On Wed, Apr 24, 2013 at 9:46 PM, Maurizio Cucchiara
<mcucchiara@apache.org>wrote:

> Yep, it makes sense definitely, otherwise there would not be way to share a
> single instance with different params.
> Il giorno 24/apr/2013 15:31, "Dave Newton" <davelnewton@gmail.com> ha
> scritto:
>
> > Definitely singleton-ish, although i thought there was an
> > instance-per-package--I thought I had packages with the same interceptor
> > configured in different ways, but I can't check at the moment.
> >
> > Dave
> >
> >
> >
> > On Wed, Apr 24, 2013 at 9:28 AM, Maurizio Cucchiara
> > <mcucchiara@apache.org>wrote:
> >
> > > @Dave, I also could be wrong, but I remember that interceptors are
> > > singletone (maybe there is a single instance per package).
> > > @Steven looks like you're using Spring, if yes, could you check if you
> > > experience the same behavior w/o it?
> > > Il giorno 24/apr/2013 14:04, "Dave Newton" <davelnewton@gmail.com> ha
> > > scritto:
> > >
> > > > I'm not sure I understand what you mean regarding using the "include"
> > > > element (i.e., precisely what you're doing) but I thought that each
> > > package
> > > > would have its own set of interceptors, meaning there would be two
> > > > instances, hence init would be called twice.
> > > >
> > > > This would be trivial to determine by checking to see if it's the
> same
> > > > instance.
> > > >
> > > > I could be misremembering.
> > > >
> > > > Dave
> > > >
> > > >
> > > >
> > > > On Wed, Apr 24, 2013 at 7:52 AM, Steven Yang <kenshin520@gmail.com>
> > > wrote:
> > > >
> > > > > I was using 2.1.8 and recently upgraded to 2.3.14.
> > > > > And I realized that my interceptor got initialized twice and it
> didnt
> > > > > happen before.
> > > > >
> > > > > This happens when I declare a default package in struts.xml and
> > include
> > > > > other xml which have packages that extends my default package. But
> > the
> > > > > thing is no matter how many more xml I include the interceptor will
> > > only
> > > > be
> > > > > initialize one extra time.
> > > > >
> > > > > the following is my sample struts.xml
> > > > >
> > > > >  <package name="default" namespace="/" extends="struts-default">
> > > > >
> > > > > <interceptors>
> > > > > <interceptor name="baseGeneral"
> > > class="GeneralInterceptor"></interceptor>
> > > > > <interceptor-stack name="biStack">
> > > > > <interceptor-ref name="baseGeneral"/>
> > > > > </interceptor-stack>
> > > > > </interceptors>
> > > > >         <default-action-ref name="index" />
> > > > >
> > > > >         <global-results>
> > > > >             <result name="error">/error.jsp</result>
> > > > >         </global-results>
> > > > >
> > > > >         <global-exception-mappings>
> > > > >             <exception-mapping exception="java.lang.Exception"
> > > > > result="error"/>
> > > > >         </global-exception-mappings>
> > > > >
> > > > >         <action name="index">
> > > > >             <result type="redirectAction">
> > > > >                 <param name="actionName">HelloWorld</param>
> > > > >                 <param name="namespace">/example</param>
> > > > >             </result>
> > > > >         </action>
> > > > >     </package>
> > > > >
> > > > >     <include file="example.xml"/>
> > > > >
> > > > > my example.xml
> > > > >
> > > > >   <package name="example" namespace="/example" extends="default">
> > > > >
> > > > >         <action name="HelloWorld" class="example.HelloWorld">
> > > > >             <result>/example/HelloWorld.jsp</result>
> > > > >         </action>
> > > > > </package>
> > > > >
> > > > > I traced the log and see the that my default package is been
> > > initialized
> > > > > twice and it seems that struts knows about it but it still called
> > > init()
> > > > on
> > > > > my interceptor.
> > > > > partial log:
> > > > >
> > > > > 2013-04-24 11:57:58,504 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Using default implementation of FileManager
> > > > > provided under name [system]: DefaultFileManager
> > > > > 2013-04-24 11:57:58,505 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded [BUILDER] {PackageConfig
> Name:default
> > > > > namespace:/ parents:[{PackageConfig Name:struts-default namespace:
> > > > > parents:[]}]}
> > > > > GeneralInterceptor.init()
> > > > > 2013-04-24 11:57:58,509 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded //index in 'default'
> > > package:{ActionConfig
> > > > > index () - action -
> > > > >
> file:/D:/workspace_tsb/struts2-blank/build/classes/struts.xml:30:30}
> > > > > 2013-04-24 11:57:58,510 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded [BUILDER] {PackageConfig
> Name:example
> > > > > namespace:/example parents:[{PackageConfig Name:default namespace:/
> > > > > parents:[{PackageConfig Name:struts-default namespace:
> > parents:[]}]}]}
> > > > > 2013-04-24 11:57:58,513 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded /example/HelloWorld in 'example'
> > > > > package:{ActionConfig HelloWorld (example.HelloWorld) - action -
> > > > >
> file:/D:/workspace_tsb/struts2-blank/build/classes/example.xml:10:62}
> > > > > 2013-04-24 11:57:58,514 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded /example/Login_* in 'example'
> > > > > package:{ActionConfig Login_* (example.Login.{1}()) - action -
> > > > >
> file:/D:/workspace_tsb/struts2-blank/build/classes/example.xml:14:67}
> > > > > 2013-04-24 11:57:58,514 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded /example/* in 'example'
> > > > > package:{ActionConfig * (example.ExampleSupport) - action -
> > > > >
> file:/D:/workspace_tsb/struts2-blank/build/classes/example.xml:19:57}
> > > > > 2013-04-24 11:57:58,515 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded [BUILDER] {PackageConfig
> Name:default
> > > > > namespace:/ parents:[{PackageConfig Name:struts-default namespace:
> > > > > parents:[]}]}
> > > > > GeneralInterceptor.init()
> > > > > 2013-04-24 11:57:58,516 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - Loaded //index in 'default'
> > > package:{ActionConfig
> > > > > index () - action -
> > > > >
> file:/D:/workspace_tsb/struts2-blank/build/classes/struts.xml:30:30}
> > > > > 2013-04-24 11:57:58,516 DEBUG
> > > > > com.opensymphony.xwork2.util.logging.slf4j.Slf4jLogger
> > > > > (Slf4jLogger.java:69) - The package name 'default' is already been
> > > loaded
> > > > > by the same location and could be removed: package -
> > > > > file:/D:/workspace_tsb/struts2-blank/build/classes/struts.xml:11:68
> > > > >
> > > > >
> > > > > as you can see struts knows that "default" has been loaded before
> > > however
> > > > > my interceptor still prints out init message.
> > > > >
> > > > > If I remove the include or move the "default" package declaration
> out
> > > to
> > > > > another file and use include to include it in struts.xml the
> problem
> > > goes
> > > > > away.
> > > > >
> > > > > Is this behavior correct? or I am using something in the wrong way?
> > > > >
> > > > > Thanks
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > e: davelnewton@gmail.com
> > > > m: 908-380-8699
> > > > s: davelnewton_skype
> > > > t: @dave_newton <https://twitter.com/dave_newton>
> > > > b: Bucky Bits <http://buckybits.blogspot.com/>
> > > > g: davelnewton <https://github.com/davelnewton>
> > > > so: Dave Newton <http://stackoverflow.com/users/438992/dave-newton>
> > > >
> > >
> >
> >
> >
> > --
> > e: davelnewton@gmail.com
> > m: 908-380-8699
> > s: davelnewton_skype
> > t: @dave_newton <https://twitter.com/dave_newton>
> > b: Bucky Bits <http://buckybits.blogspot.com/>
> > g: davelnewton <https://github.com/davelnewton>
> > so: Dave Newton <http://stackoverflow.com/users/438992/dave-newton>
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message