[seam-issues] [JBoss JIRA] (SOLDER-222) EAR contained WAR's beans.xml not processed

Roberto Carta (JIRA) jira-events at lists.jboss.org
Tue Jul 17 17:54:06 EDT 2012


    [ 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

        


More information about the seam-issues mailing list