[ 
https://issues.jboss.org/browse/SOLDER-222?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12706468#comment-12706468
 ] 

Roberto Carta commented on SOLDER-222:
--------------------------------------

I've find another way trying to solve my problem. This solution tries to use 
two different class loader. First using original code, and if no 
classes/resources are founded, using the _expectedType.getClassLoader()_.

Here the patch:
{code:title=solder-api/org.jboss.solder.util.service.ServiceLoader}
--- a/api/src/main/java/org/jboss/solder/util/service/ServiceLoader.java
+++ b/api/src/main/java/org/jboss/solder/util/service/ServiceLoader.java
@@ -148,6 +148,11 @@
         List<URL> serviceFiles = new ArrayList<URL>();
         try {
             Enumeration<URL> serviceFileEnumerator = 
loader.getResources(serviceFile);
+            if (!serviceFileEnumerator.hasMoreElements()) {
+               if 
(loader.equals(Thread.currentThread().getContextClassLoader())) {
+                       serviceFileEnumerator = 
expectedType.getClassLoader().getResources(serviceFile);
+               }
+            }
             while (serviceFileEnumerator.hasMoreElements()) {
                 serviceFiles.add(serviceFileEnumerator.nextElement());
             }
@@ -210,9 +215,21 @@
         Class<? extends S> serviceClass = null;
         try {
             clazz = loader.loadClass(serviceClassName);
-            serviceClass = clazz.asSubclass(expectedType);
         } catch (ClassNotFoundException e) {
-            log.warn("Could not load service class " + serviceClassName);
+               if (!loader.equals(expectedType.getClassLoader())) {
+                       try {
+                                       clazz = 
expectedType.getClassLoader().loadClass(serviceClassName);
+                               } catch (ClassNotFoundException e2) {
+                                       
+                               }
+               }
+        }
+        try {
+               if (clazz == null) {
+                               log.warn("Could not load service class " + 
serviceClassName);
+                       } else {
+                               serviceClass = clazz.asSubclass(expectedType);
+                       }
         } catch (ClassCastException e) {
             throw new RuntimeException("Service class " + serviceClassName + " 
didn't implement the Extension interface");
         }
{code}
*But keep in mind that*:
- i'm not able to evaluate possibile side effects, as this class is havily used.
- i've written the minimum changes to this class, without altering other 
classes, but you can try to locate a class twice with the same class loader, 
depending on how methods/constructor are invoked.

In the hope it will be useful
                
> EAR contained WAR's beans.xml not processed
> -------------------------------------------
>
>                 Key: SOLDER-222
>                 URL: https://issues.jboss.org/browse/SOLDER-222
>             Project: Solder
>          Issue Type: Bug
>    Affects Versions: 3.0.0.Final
>         Environment: JBoss AS 7
>            Reporter: Mike Mosiewicz
>
> I have the EAR app containing one ejb jar and one war. I placed 
> seam-config.jar in EAR's lib directory. My beans.xml are discovered by weld 
> as follows:
> 15:21:36,588 DEBUG [org.jboss.weld] (MSC service thread 1-3) Found beans.xml: 
> "/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/mongodb-seam-0.0.1-SNAPSHOT.jar/META-INF/beans.xml"
> 15:21:36,591 DEBUG [org.jboss.weld] (MSC service thread 1-3) Found beans.xml: 
> "/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/seam-persistence-api-3.0.0.Final.jar/META-INF/beans.xml"
> 15:21:36,592 DEBUG [org.jboss.weld] (MSC service thread 1-3) Found beans.xml: 
> "/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/seam-security-api-3.0.0.Final.jar/META-INF/beans.xml"
> 15:21:36,594 DEBUG [org.jboss.weld] (MSC service thread 1-3) Found beans.xml: 
> "/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/seam-servlet-3.0.0.Final.jar/META-INF/beans.xml"
> 15:21:36,597 DEBUG [org.jboss.weld] (MSC service thread 1-3) Found beans.xml: 
> "/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/seam-solder-3.0.0.Final.jar/META-INF/beans.xml"
> 15:21:36,601 DEBUG [org.jboss.weld] (MSC service thread 1-3) Found beans.xml: 
> "/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/commerce-ejb-0.0.1-SNAPSHOT.jar/META-INF/beans.xml"
> 15:21:36,603 DEBUG [org.jboss.weld] (MSC service thread 1-11) Found 
> beans.xml: 
> "/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/public-war.war/WEB-INF/beans.xml"
>  It seems that for ejb and other library jars the extension is executed but 
> not for war. Like this:
> 15:21:54,173 INFO  [org.jboss.seam.config.xml.bootstrap.XmlConfigExtension] 
> (MSC service thread 1-10) Reading XML file: 
> vfs:/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/seam-security-api-3.0.0.Final.jar/META-INF/beans.xml
> 15:21:54,177 INFO  [org.jboss.seam.config.xml.bootstrap.XmlConfigExtension] 
> (MSC service thread 1-10) Reading XML file: 
> vfs:/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/commerce-ejb-0.0.1-SNAPSHOT.jar/META-INF/beans.xml
> 15:21:54,195 INFO  [org.jboss.seam.config.xml.bootstrap.XmlConfigExtension] 
> (MSC service thread 1-10) Reading XML file: 
> vfs:/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/seam-servlet-3.0.0.Final.jar/META-INF/beans.xml
> 15:21:54,196 INFO  [org.jboss.seam.config.xml.bootstrap.XmlConfigExtension] 
> (MSC service thread 1-10) Reading XML file: 
> vfs:/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/mongodb-seam-0.0.1-SNAPSHOT.jar/META-INF/beans.xml
> 15:21:54,197 INFO  [org.jboss.seam.config.xml.bootstrap.XmlConfigExtension] 
> (MSC service thread 1-10) Reading XML file: 
> vfs:/C:/servers/jboss-as-web-7.0.0.Final/standalone/deployments/laura.ear/lib/seam-solder-3.0.0.Final.jar/META-INF/beans.xml
> 15:21:54,204 INFO  [org.jboss.seam.config.xml.bootstrap.XmlConfigExtension] 
> (MSC service thread 1-10) Adding XML Defined Bean: 
> pl.proinet.seam.mongo.MongoResolver

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        
_______________________________________________
seam-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-issues

Reply via email to