You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Hugo de Paix de Coeur <hu...@kabhal.org> on 2008/06/11 14:26:03 UTC
Multiple Struts2 WAR in a single EAR
Hello,
I'm currently trying to deploy two Struts2 enabled .war in a single
.ear on Glassfish.
My problem is : I've no isolation between the 2 projects at the action
dispatcher level.
----------------------------
Project A WAR struts.xml :
<struts>
<package name="projectA-support" namespace="/" extends="struts2-default">
<action name="Index" class="com.web.projectA.Index">
<result>/jsp/index.jsp</result>
</action>
</package>
Project B WAR struts.xml :
<struts>
<package name="projectB-support" namespace="/" extends="struts2-default">
<action name="Index" class="com.web.projectB.Index">
<result>/jsp/index.jsp</result>
</action>
<action name="Login" class="com.web.projectB.Login">
<result>/jsp/login.jsp</result>
</action>
</package>
----------------------------
1- I can call 'http://localhost:8080/ProjectA/Login.action' and this is the 'com.web.projectB.Login' class that is executed (even if no Login action is specified in Project A) because they share the namespace '/'.
2- If I call 'http://localhost:8080/ProjectA/Index.action', this is the 'com.web.projectB.Index' class that is executed (last struts.xml to be parsed ?)
I've no clues to resolve this problem (the use of different namespaces doesn't resolve the problem either)
Any idea ?
--
Kab
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: Multiple Struts2 WAR in a single EAR
Posted by Hugo de Paix de Coeur <hu...@kabhal.org>.
Thanks for your advices...
Sure, the first configuration I tried was to put struts jars in each
.war/WEB-INF/lib.
For those interested, a good link on classloaders : https://glassfish.dev.java.net/nonav/javaee5/docs/DG/beade.html
But it doesn't work with Glassfish in this configuration because of xwork as I've already
pointed out :
--------------------------------------------------------------
[#|2008-06-12T11:22:06.192+0200|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=20;_ThreadName=httpWorkerThread-4848-0;_RequestID=48141413-1d12-4d21-918f-3950921f55ab;|WebModule[/ProjectB]PWC1270:
Exception starting filter Struts2
Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar:file:/Users/hugo/local/glassfish/domains/dev/applications/j2ee-apps/AgaVision/ProjectB_war/WEB-INF/lib/struts2-core-2.0.11.1.jar!/struts-default.xml:30:72
.... skipped stackTrace ....
Caused by: Bean type class com.opensymphony.xwork2.ObjectFactory with the name xwork has already been loaded by bean -
jar:file:/Users/hugo/local/glassfish/domains/dev/applications/j2ee-apps/AgaVision/ProjectA_war/WEB-INF/lib/struts2-core-2.0.11.1.jar!/struts-default.xml:30:72
- bean -
jar:file:/Users/hugo/local/glassfish/domains/dev/applications/j2ee-apps/AgaVision/ProjectB_war/WEB-INF/lib/struts2-core-2.0.11.1.jar!/struts-default.xml:30:72
--------------------------------------------------------------
It seems there are problems like this as stated in this interesting
forum entry : http://forums.java.net/jive/thread.jspa?messageID=260375
But I tried both class loader configuration in sun-web.xml descriptors with the same result (see
stacktrace above).
-------------------------------------------
Default sun-web.xml :
<class-loader delegate="true"/>
Modified sun-web.xml :
<class-loader delegate="false"/>
This configuration use firstly the childs classloaders before to
delegate.
-------------------------------------------
Tips :
- I've searched for other remaining struts jars but have not found any.
- I deploy directly from Eclipse, or export the ear from Eclipse and
deploy it manually (Only 2 xwork references in the ear : 1 in each
.war/WEB-INF/lib)
I'm stuck with only one struts project by application for now...
On Wed, Jun 11, 2008 at 03:12:07PM +0200, Marc Ende wrote:
> In general it isn't a good idea to put those custom libs (like
> struts.jar, spring.jar) etc. in classloaders of the main
> appserver. They should be in the applications-classloader so you can
> avoid classloader-issues like leaks.
>
> If you've got the first error it sounds to me that you've got the xwork
> libs on ear level. If it's in web-inf/lib it shouldn't "see"
> each other. The classloaders _should_ be seperated. I'm not sure if
> glassfish handles it correctly but I would think so.
> May be you've got another xwork.jar somewhere else, which is loaded at
> first (such thing can happen if you build using maven and forgets to run
> a clean before final build.)
>
> If you've got two identically xwork.jars (or struts.jars) in the
> classpath or in parent classpaths they will be considered as two
> different types/versions. So I would think that you'll have a xwork.jar
> somewhere in your parent classpath.
>
> The second error occures if the loaded classes from lib/ext didn't find
> the dependent classes within the current and in one of the parent
> classloaders (up to the bootclassloader). If the javax.servlet.Filter is
> loaded by a seperate classloader (which might be a child of the
> classloader (which loads the classes from lib/ext) it wouldn't be found
> by the lib/ext classes.
>
>
> Hugo de Paix de Coeur schrieb:
> >In fact, this was my second question, so I ask it now :)
> >
> >I have had problems with deploying *struts*.jar in this special
> >configuration (2 war in an ear).
> >- I tries to put them in each .war WEB-INF/lib
> > => "Error : xwork...ObjectFactory already loaded in bean projectA" at
> > projectB deployment.
> >- I tries to put them in glassfish domain lib/ext
> > => "Error : ClassLoader : Can't find javax.servlet.Filter"
> >
> >So, they are for now in the glassfish "main" lib.. but there are
> >problems too .. at runtime.
> >
> >What is the correct installation scheme for struts.jar with this
> >configuration ?
> >
> >Thx...
> >
> >On Wed, Jun 11, 2008 at 02:31:13PM +0200, Marc Ende wrote:
> >
> >>Hello,
> >>
> >>do you deploy the struts.jar in the ear or in the WEB-INF/lib folders of
> >>the war-files?
> >>if they're in the WEB-INF/lib folders they should be seperate.
> >>
> >>Marc
> >>
> >>
> >>Hugo de Paix de Coeur schrieb:
> >>
> >>>Hello,
> >>>
> >>>I'm currently trying to deploy two Struts2 enabled .war in a single
> >>>.ear on Glassfish.
> >>>
> >>>My problem is : I've no isolation between the 2 projects at the action
> >>>dispatcher level.
> >>>
> >>>----------------------------
> >>>Project A WAR struts.xml :
> >>>
> >>><struts>
> >>><package name="projectA-support" namespace="/" extends="struts2-default">
> >>>
> >>> <action name="Index" class="com.web.projectA.Index">
> >>> <result>/jsp/index.jsp</result>
> >>> </action>
> >>>
> >>></package>
> >>>
> >>>Project B WAR struts.xml :
> >>>
> >>><struts>
> >>><package name="projectB-support" namespace="/" extends="struts2-default">
> >>>
> >>> <action name="Index" class="com.web.projectB.Index">
> >>> <result>/jsp/index.jsp</result>
> >>> </action>
> >>>
> >>> <action name="Login" class="com.web.projectB.Login">
> >>> <result>/jsp/login.jsp</result>
> >>> </action>
> >>>
> >>></package>
> >>>
> >>>----------------------------
> >>>
> >>>1- I can call 'http://localhost:8080/ProjectA/Login.action' and this is
> >>>the 'com.web.projectB.Login' class that is executed (even if no Login
> >>>action is specified in Project A) because they share the namespace '/'.
> >>>
> >>>2- If I call 'http://localhost:8080/ProjectA/Index.action', this is the
> >>>'com.web.projectB.Index' class that is executed (last struts.xml to be
> >>>parsed ?)
> >>>
> >>>I've no clues to resolve this problem (the use of different namespaces
> >>>doesn't resolve the problem either)
> >>>Any idea ?
> >>>
> >>>
> >>>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> >>For additional commands, e-mail: user-help@struts.apache.org
> >>
> >>
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
--
Hugo de Paix de Coeur [Kabhal] <hugo[AT]kab[NOSPAM]hal.org>
Contacts: http://www.kabhal.org/~hugo
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: Multiple Struts2 WAR in a single EAR
Posted by Marc Ende <ml...@e-beyond.de>.
In general it isn't a good idea to put those custom libs (like
struts.jar, spring.jar) etc. in classloaders of the main
appserver. They should be in the applications-classloader so you can
avoid classloader-issues like leaks.
If you've got the first error it sounds to me that you've got the xwork
libs on ear level. If it's in web-inf/lib it shouldn't "see"
each other. The classloaders _should_ be seperated. I'm not sure if
glassfish handles it correctly but I would think so.
May be you've got another xwork.jar somewhere else, which is loaded at
first (such thing can happen if you build using maven and forgets to run
a clean before final build.)
If you've got two identically xwork.jars (or struts.jars) in the
classpath or in parent classpaths they will be considered as two
different types/versions. So I would think that you'll have a xwork.jar
somewhere in your parent classpath.
The second error occures if the loaded classes from lib/ext didn't find
the dependent classes within the current and in one of the parent
classloaders (up to the bootclassloader). If the javax.servlet.Filter is
loaded by a seperate classloader (which might be a child of the
classloader (which loads the classes from lib/ext) it wouldn't be found
by the lib/ext classes.
Hugo de Paix de Coeur schrieb:
> In fact, this was my second question, so I ask it now :)
>
> I have had problems with deploying *struts*.jar in this special
> configuration (2 war in an ear).
> - I tries to put them in each .war WEB-INF/lib
> => "Error : xwork...ObjectFactory already loaded in bean projectA" at projectB deployment.
> - I tries to put them in glassfish domain lib/ext
> => "Error : ClassLoader : Can't find javax.servlet.Filter"
>
> So, they are for now in the glassfish "main" lib.. but there are
> problems too .. at runtime.
>
> What is the correct installation scheme for struts.jar with this
> configuration ?
>
> Thx...
>
> On Wed, Jun 11, 2008 at 02:31:13PM +0200, Marc Ende wrote:
>
>> Hello,
>>
>> do you deploy the struts.jar in the ear or in the WEB-INF/lib folders of
>> the war-files?
>> if they're in the WEB-INF/lib folders they should be seperate.
>>
>> Marc
>>
>>
>> Hugo de Paix de Coeur schrieb:
>>
>>> Hello,
>>>
>>> I'm currently trying to deploy two Struts2 enabled .war in a single
>>> .ear on Glassfish.
>>>
>>> My problem is : I've no isolation between the 2 projects at the action
>>> dispatcher level.
>>>
>>> ----------------------------
>>> Project A WAR struts.xml :
>>>
>>> <struts>
>>> <package name="projectA-support" namespace="/" extends="struts2-default">
>>>
>>> <action name="Index" class="com.web.projectA.Index">
>>> <result>/jsp/index.jsp</result>
>>> </action>
>>>
>>> </package>
>>>
>>> Project B WAR struts.xml :
>>>
>>> <struts>
>>> <package name="projectB-support" namespace="/" extends="struts2-default">
>>>
>>> <action name="Index" class="com.web.projectB.Index">
>>> <result>/jsp/index.jsp</result>
>>> </action>
>>>
>>> <action name="Login" class="com.web.projectB.Login">
>>> <result>/jsp/login.jsp</result>
>>> </action>
>>>
>>> </package>
>>>
>>> ----------------------------
>>>
>>> 1- I can call 'http://localhost:8080/ProjectA/Login.action' and this is
>>> the 'com.web.projectB.Login' class that is executed (even if no Login
>>> action is specified in Project A) because they share the namespace '/'.
>>>
>>> 2- If I call 'http://localhost:8080/ProjectA/Index.action', this is the
>>> 'com.web.projectB.Index' class that is executed (last struts.xml to be
>>> parsed ?)
>>>
>>> I've no clues to resolve this problem (the use of different namespaces
>>> doesn't resolve the problem either)
>>> Any idea ?
>>>
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
>> For additional commands, e-mail: user-help@struts.apache.org
>>
>>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: Multiple Struts2 WAR in a single EAR
Posted by Hugo de Paix de Coeur <hu...@kabhal.org>.
In fact, this was my second question, so I ask it now :)
I have had problems with deploying *struts*.jar in this special
configuration (2 war in an ear).
- I tries to put them in each .war WEB-INF/lib
=> "Error : xwork...ObjectFactory already loaded in bean projectA" at projectB deployment.
- I tries to put them in glassfish domain lib/ext
=> "Error : ClassLoader : Can't find javax.servlet.Filter"
So, they are for now in the glassfish "main" lib.. but there are
problems too .. at runtime.
What is the correct installation scheme for struts.jar with this
configuration ?
Thx...
On Wed, Jun 11, 2008 at 02:31:13PM +0200, Marc Ende wrote:
> Hello,
>
> do you deploy the struts.jar in the ear or in the WEB-INF/lib folders of
> the war-files?
> if they're in the WEB-INF/lib folders they should be seperate.
>
> Marc
>
>
> Hugo de Paix de Coeur schrieb:
> >Hello,
> >
> >I'm currently trying to deploy two Struts2 enabled .war in a single
> >.ear on Glassfish.
> >
> >My problem is : I've no isolation between the 2 projects at the action
> >dispatcher level.
> >
> >----------------------------
> >Project A WAR struts.xml :
> >
> ><struts>
> ><package name="projectA-support" namespace="/" extends="struts2-default">
> >
> > <action name="Index" class="com.web.projectA.Index">
> > <result>/jsp/index.jsp</result>
> > </action>
> >
> ></package>
> >
> >Project B WAR struts.xml :
> >
> ><struts>
> ><package name="projectB-support" namespace="/" extends="struts2-default">
> >
> > <action name="Index" class="com.web.projectB.Index">
> > <result>/jsp/index.jsp</result>
> > </action>
> >
> > <action name="Login" class="com.web.projectB.Login">
> > <result>/jsp/login.jsp</result>
> > </action>
> >
> ></package>
> >
> >----------------------------
> >
> >1- I can call 'http://localhost:8080/ProjectA/Login.action' and this is
> >the 'com.web.projectB.Login' class that is executed (even if no Login
> >action is specified in Project A) because they share the namespace '/'.
> >
> >2- If I call 'http://localhost:8080/ProjectA/Index.action', this is the
> >'com.web.projectB.Index' class that is executed (last struts.xml to be
> >parsed ?)
> >
> >I've no clues to resolve this problem (the use of different namespaces
> >doesn't resolve the problem either)
> >Any idea ?
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
--
Hugo de Paix de Coeur [Kabhal] <hugo[AT]kab[NOSPAM]hal.org>
Contacts: http://www.kabhal.org/~hugo
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: Multiple Struts2 WAR in a single EAR
Posted by Marc Ende <ml...@e-beyond.de>.
Hello,
do you deploy the struts.jar in the ear or in the WEB-INF/lib folders of
the war-files?
if they're in the WEB-INF/lib folders they should be seperate.
Marc
Hugo de Paix de Coeur schrieb:
> Hello,
>
> I'm currently trying to deploy two Struts2 enabled .war in a single
> .ear on Glassfish.
>
> My problem is : I've no isolation between the 2 projects at the action
> dispatcher level.
>
> ----------------------------
> Project A WAR struts.xml :
>
> <struts>
> <package name="projectA-support" namespace="/" extends="struts2-default">
>
> <action name="Index" class="com.web.projectA.Index">
> <result>/jsp/index.jsp</result>
> </action>
>
> </package>
>
> Project B WAR struts.xml :
>
> <struts>
> <package name="projectB-support" namespace="/" extends="struts2-default">
>
> <action name="Index" class="com.web.projectB.Index">
> <result>/jsp/index.jsp</result>
> </action>
>
> <action name="Login" class="com.web.projectB.Login">
> <result>/jsp/login.jsp</result>
> </action>
>
> </package>
>
> ----------------------------
>
> 1- I can call 'http://localhost:8080/ProjectA/Login.action' and this is the 'com.web.projectB.Login' class that is executed (even if no Login action is specified in Project A) because they share the namespace '/'.
>
> 2- If I call 'http://localhost:8080/ProjectA/Index.action', this is the 'com.web.projectB.Index' class that is executed (last struts.xml to be parsed ?)
>
> I've no clues to resolve this problem (the use of different namespaces doesn't resolve the problem either)
> Any idea ?
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org