Also tested it, I can confirm that the described behavior occurs.
By the way, after the second postback it seems to work.
I get an exception in JBoss log about the usage of a TCCL.
Sorry but here ends my knowledge, I was thinking that it worked.
Hopefully someone one the list can help on this?
Mit freundlichen Grüßen,
------------------------------------------------------------------------
*Christian Beikov*
Am 20.03.2013 10:04, schrieb Adrian Gonzalez:
Hi Christian,
Thanks for the update.
I'm also testing on JBoss 7.1.0.Final.
I've modified [1] with your remarks (except dependentWarExcludes which is
deprecated - I don't use overlays for now).
Still no luck, I've got the following sysout when clicking on first link of
page http://localhost:8080/viewaccessscoped-web/test.faces.
09:47:35,644 INFO [stdout] (http--0.0.0.0-8080-1) @PreDestroy
09:47:35,644 INFO [stdout] (http--0.0.0.0-8080-1) @PostConstruct
So ViewAccessScoped bean is reinstantiated.
I've tested it with both m2e-wtp, and packaging/deploying by hand (mvn clean
package).
Thanks very much for your help on this topic !
[1] https://github.com/gonzalad/codi-ear-viewaccessscoped/tree/ear
----- Mail original -----
De : Christian Beikov <christian.bei...@gmail.com>
À : users@myfaces.apache.org
Cc :
Envoyé le : Mercredi 20 mars 2013 3h07
Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
I just tested your example application.
First of all you need to add Faces Servlet to web.xml, otherwise JSF
won't be loaded.
Next you should also put the myfaces extcdi jar into EAR/lib as
suggested by using the following maven config for the EAR Plugin:
<configuration>
<defaultLibBundleDir>lib</defaultLibBundleDir>
<defaultJavaBundleDir>lib</defaultJavaBundleDir>
<skinnyWars>true</skinnyWars>
<version>6</version>
</configuration>
The addClasspath option in the war plugin is not necessary then. You
should also consider using dependentWarExcludes in the war plugin config
so you can also exclude the jar from overlay projects.
Tested with JBoss AS 7.1.0 Final
Mit freundlichen Grüßen,
------------------------------------------------------------------------
*Christian Beikov*
Am 19.03.2013 22:51, schrieb Adrian Gonzalez:
Hi Denis,
I've already checked your post (very instructive, thanks).
I'm sure SINGLE_CLASSLOADER for ear will resolve this issue.
Problem is I don't know how to specify it in JBoss AS 7 (I don't think it's
supported - JBoss always creates an isolated classloader for each war)
Going to use your instructions for WAS in the future (I'm using both JBoss AS 7
and WAS 8).
For the moment, no problem with WAS 8 and ear packaging, everything is under
WEB-INF/lib (no EJB Timer for the moment).
BTW, updated sample app (moved codi to ear) : it's in ear branch
https://github.com/gonzalad/codi-ear-viewaccessscoped/tree/ear
If I don't find a packaging solution, perhaps I'll give a try modifying locally
CODI code, but not sure which approach is best (the 3rd one perhaps but not
sure it will work ;( ) :
Sorry those are rough notes, and I don't master CDI :
1. modify ClassUtils.getClassloader
add a configurationparameter to return ClassUtils.class.getClassloader().
cons : we're still relying on classloader and potentially will have a pb
with another appserver.
2. remove @JsfPhaseListener and rely on classic phaseListeners configured
with faces-config.xml
cons : non CDI
3. use CDI to communicate phaseListener class in CODI
consumeJsfPhaseListener
i.e. we could perhaps add dynamically a bean or producer of type Class
with a custom annotation, i.e. @JsfPhaseListener Class.
then in consumer, we @Inject @JsfPhaseListener Instance<Class>
jsfPhaseListenerClasses
Afterwards, we instanciate phaseListener iterating on
jsfPhaseListenerClasses.iterator().
cons : make a test with a JsfPhaseListener1 in webapp1 and
JSFPhaseListener2 in webapp2, both being in the same EAR.
Check that webapp1 has only listener JsfPhaseListener1 and not both of
them.
________________________________
De : titou10 titou10 <titou10.tito...@gmail.com>
À : MyFaces Discussion <users@myfaces.apache.org>; Adrian Gonzalez
<adr_gonza...@yahoo.fr>
Envoyé le : Mardi 19 mars 2013 22h37
Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
Maybe you should check my previous post named "CODI jar in ear/lib
with a WAR = fail in WebSphere v8.5" and then "Does CODI supports to
be deployed in a app server that uses multi-classloader..." started
January 17 because it seems that you have the same problem we have
with WebSphere v8.5
If I try to deploy the CODI jar into ear/lib, some PhaseListener
magical initialisation was not working at startup (=first page
accessed)...
And I also have the same feeling as you that this is the way CODI use
the classloaders that causes the problem
...
The only solutions we found: configure WAS to use only 1 classloader
for all the modules in the ear, (but this is not supported by the OWB
implementation packaged with WAS), or deploy everything in war
WEB-INF/lib, including the ejb jars. In fact we put "any module that
uses CDI (inject/producers)" in web-inf/lib and the other in ear/lib
(slf4j, hibernate, jpa module etc)
This is what we are doing even if I don't like it...
Mark Struberg answered that he was using CODI with a multi level CL
without problem...
2013/3/19 Adrian Gonzalez <adr_gonza...@yahoo.fr>:
I've just put myfaces-extcdi-bundle-jsf20-1.0.5.jar into ear (and removed it
from WEB-INF/lib), no more luck.
I'll try to update my sample tomorrow with ear packaging and debug it.
Thanks once more for the help Christian !
P.S. I'm wondering if the root cause of this bug isn't in CODI (classloader usage
in Java EE & CDI appears to be under-specified, so I'm not sure a CDI extension
should rely on TCCL for its internals)
________________________________
De : Christian Beikov <c.bei...@curecomp.com>
À : users@myfaces.apache.org
Envoyé le : Mardi 19 mars 2013 21h20
Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
I used the xml file to be able to put the CODI bundle into EAR/lib.
The problem was that JSF is not on the classpath which the deployment
xml should fix.
My CODI bundle is currently in EAR/lib and it deploys successfully with
this configuration.
Am 19.03.2013 20:43, schrieb Adrian Gonzalez:
Hi Christian,
Thanks for the tip !
Just made a quick test using your file with my sample, but no luck, it doesn't
work.
I'm using JBoss jsf impl (so no jsf jars in my app).
I've also putting myfaces-extcdi-bundle-jsf20-1.0.5.jar in the war, WEB-INF/lib.
Do you have the same setup ?
________________________________
De : Christian Beikov <c.bei...@curecomp.com>
À : users@myfaces.apache.org
Envoyé le : Mardi 19 mars 2013 17h18
Objet : Re: CODI ViewAccessScoped issue with EAR on JBoss 7.1.x
Hey,
I had the same problem a time ago. Just add following
jboss-deployment-structure.xml into META-INF of the EAR:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<!-- Make sub deployments isolated by default, so they cannot see each
others
classes without a Class-Path entry -->
<ear-subdeployments-isolated>true</ear-subdeployments-isolated>
<!-- This corresponds to the top level deployment. For a war this is
the
war's module, for an ear -->
<!-- This is the top level ear module, which contains all the classes
in
the EAR's lib folder -->
<deployment>
<!-- This allows you to define additional dependencies, it is the
same
as using the Dependencies: manifest attribute -->
<dependencies>
<module name="org.w3c.css.sac" />
<module name="net.sourceforge.cssparser" />
<module name="com.sun.jsf-impl" />
<module name="javax.api" />
<module name="javax.faces.api" />
<module name="javax.xml.bind.api" />
<module name="javax.xml.jaxp-provider" />
<module name="com.google.guava" />
</dependencies>
</deployment>
</jboss-deployment-structure>
Am 19.03.2013 16:34, schrieb Adrian Gonzalez:
Hello,
This is a follow up on
http://mail-archives.apache.org/mod_mbox/myfaces-users/201212.mbox/%3c1354617133.46780.yahoomail...@web172404.mail.ir2.yahoo.com%3E.
@ViewAccessScoped is not working when deploying an EAR on JBoss 7.1.0 (tested
it with 7.1.3 same result).
If I deploy only a war, it works.
Sample project is here [1].
I used the debugguer and found that when using and EAR :
* the classloader obtained in PhaseListenerExtension#addPhaseListener
is the EAR classloader
ModuleClassLoader for Module
"deployment.viewaccessscoped-ear.ear:main" from Service Module Loader
* the classloader obtained in
consumePhaseListeners#consumePhaseListeners() is the WAR classloader
ModuleClassLoader for Module
"deployment.viewaccessscoped-ear.ear.viewaccessscoped-web.war:main" from
Service Module Loader
This means that phaselisteners annotated with @JsfPhaseListener are not
executed.
The following phaselisteners are not registered with the war classloader when
using an EAR :
* class
org.apache.myfaces.extensions.cdi.jsf.impl.config.view.PhasesLifecycleCallbackPhaseListener
* class
org.apache.myfaces.extensions.cdi.jsf.impl.listener.phase.JsfRequestLifecyclePhaseListener
Thanks for the help !
[1] Sample project here : https://github.com/gonzalad/codi-ear-viewaccessscoped
To reproduce it,
1. Testing the war
a. add the war on JBoss
b. http://localhost:8080/viewaccessscoped-web/test.faces
you'll see on sysout that CODI ViewAccessScoped bean has been
instantiated
16:24:52,778 INFO [stdout] (http--0.0.0.0-8080-1) @PostConstruct
c. click on first link.
you should see nothing on sysout (this means the previous bean
instance is reused)
1. Testing the ear - incorrect behaviour
a. add the ear on JBoss (remove the previous war)
b. http://localhost:8080/viewaccessscoped-web/test.faces
you'll see on sysout that CODI ViewAccessScoped bean has been
instantiated
16:22:49,186 INFO [stdout] (http--0.0.0.0-8080-1) @PostConstruct
c. click on first link.
you'll see on sysout that previous CODI ViewAccessScoped instance
has been destroyed and a new one is created.
16:23:24,389 INFO [stdout] (http--0.0.0.0-8080-1) @PreDestroy
16:23:24,389 INFO [stdout] (http--0.0.0.0-8080-1) @PostConstruct