[jboss-jira] [JBoss JIRA] (WFLY-5941) IllegalArgumentException when injecting dependencies for SAR

John Farrelly (JIRA) issues at jboss.org
Wed Jan 6 05:53:00 EST 2016


     [ https://issues.jboss.org/browse/WFLY-5941?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

John Farrelly updated WFLY-5941:
--------------------------------
    Description: 
I created a service archive based on the code in {{wildfly/sar/src/test/_java}}.  I have the following files in my {{standalone/deployment}} directory:
{noformat}
.
|-- my-test.sar
|   |-- META-INF
|   |   `-- jboss-service.xml
|   `-- org
|       `-- jboss
|           `-- as
|               `-- service
|                   |-- LegacyService.class
|                   `-- LegacyServiceMBean.class
`-- my-test.sar.dodeploy
{noformat}

I get the following error when WildFly tries to deploy the sar:

{noformat}
10:47:01,472 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.mbean.service.jboss:name=testTwo,type=service.create: org.jboss.msc.service.StartException in service jboss.mbean.service.jboss:name=testTwo,type=service.create: Failed to start service
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60]
        at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60]
Caused by: org.jboss.msc.inject.InjectionException: Injection failed
        at org.jboss.msc.inject.MethodInjector.inject(MethodInjector.java:102) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
        at org.jboss.msc.service.ServiceControllerImpl.doInject(ServiceControllerImpl.java:1672) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
        at org.jboss.msc.service.ServiceControllerImpl.access$2000(ServiceControllerImpl.java:51) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.performInjections(ServiceControllerImpl.java:1917) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1876) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
        ... 3 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_60]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_60]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_60]
        at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_60]
        at org.jboss.msc.inject.MethodInjector.inject(MethodInjector.java:92) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
        ... 7 more
{noformat}

Attached is the sar file that I tried to deploy.  The {{META-INF/jboss-service.xml}} file has the following content:
{code:xml}
<server xmlns="urn:jboss:service:7.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd">

    <mbean name="jboss:name=test,type=service" code="org.jboss.as.service.LegacyService">
        <constructor>
            <arg value="Test Value" type="java.lang.String"/>
        </constructor>
    </mbean>

    <mbean name="jboss:name=testTwo,type=service" code="org.jboss.as.service.LegacyService">
        <depends optional-attribute-name="other">jboss:name=test,type=service</depends>
        <attribute name="somethingElse">
            <value-factory bean="jboss:name=test,type=service" method="appendSomethingElse">
                <parameter class="java.lang.String">more value</parameter>
            </value-factory>
        </attribute>
    </mbean>

    <mbean name="jboss:name=testThree,type=service" code="org.jboss.as.service.LegacyService">
        <attribute name="other">
            <inject bean="jboss:name=testTwo,type=service" property="other"/>
        </attribute>
        <attribute name="somethingElse">Another test value</attribute>
    </mbean>
</server>
{code}

The code for {{LegacyService}} is as follows:
{code:java}
package org.jboss.as.service;

import org.jboss.logging.Logger;

/**
 * @author John E. Bailey
 */
public class LegacyService implements LegacyServiceMBean {

    private static final Logger logger = Logger.getLogger(LegacyService.class);

    private LegacyService other;
    private String somethingElse;

    public LegacyService() {
    }

    public LegacyService(String somethingElse) {
        this.somethingElse = somethingElse;
    }

    public void setOther(LegacyService other) {
        this.other = other;
    }

    public LegacyService getOther() {
        return other;
    }

    public String getSomethingElse() {
        return somethingElse;
    }

    public String appendSomethingElse(String more) {
        return somethingElse + " - " + more;
    }

    public void setSomethingElse(String somethingElse) {
        this.somethingElse = somethingElse;
    }

    public void start() {
        logger.info("Started");
    }

    public void stop() {
        logger.info("Stopped");
    }
}
{code}

The code for {{LegacyServiceMBean.java}} is:
{code:java}
package org.jboss.as.service;

/**
 * @author John Bailey
 */
public interface LegacyServiceMBean {
}
{code}

  was:
We use Orbacus as our CORBA implementation, and in our application we wish to use CORBA classes only from the orbacus module, and not the JDK/WildFly bundled CORBA.

In the {{jboss-deployment-structure.xml}} file of our {{ear}} file, we have the following:

{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <ear-subdeployments-isolated>false</ear-subdeployments-isolated>
    <deployment>
        <exclusions>
            <module name="javax.orb.api" />
            <module name="org.omg.api" />
        </exclusions>
        <dependencies>
            <module name="com.ooc.orbacus" export="true"/>
            <module name="org.apache.commons.logging" export="true" />
            <module name="org.apache.commons.collections" export="true" />
            <module name="org.apache.log4j" export="true" />
            <module name="org.dom4j" export="true" />
            <module name="org.jdom" export="true" />
            <module name="javax.faces.api" slot="mojarra-2.1.23" export="true"/>
            <module name="com.sun.jsf-impl" slot="mojarra-2.1.23" export="true"/>
            <module name="org.jboss.ejb-client" export="true" />
            <module name="org.jboss.remote-naming" export="true" />
            <module name="org.jboss.remoting3" export="true" />
            <module name="org.apache.xerces" />
            <!-- dependency for richfaces -->
            <module name="com.google.guava" slot="11.0.2" export="true"/>
        </dependencies>
    </deployment>
...
{code}

However, despite excluding the {{javax.orb.api}} module, I can see that {{org.omg.PortableServer.Servant}} is loaded from that module instead of being loaded from our {{com.ooc.orbacus}} module.  This causes our application to fail.

Debugging through the jboss module loader, I can see that it considers both {{javax.orb.api}} and {{com.ooc.orbacus}} as prodivers of the {{org/omg/PortableServer}} path.  I am not sure why {{javax.orb.api}} is being considered when it has been excluded in the deployment descriptor for the application.



> IllegalArgumentException when injecting dependencies for SAR
> ------------------------------------------------------------
>
>                 Key: WFLY-5941
>                 URL: https://issues.jboss.org/browse/WFLY-5941
>             Project: WildFly
>          Issue Type: Bug
>          Components: Class Loading
>    Affects Versions: 10.0.0.CR4
>         Environment: Red Hat Enterprise Linux Server release 7.1 (Maipo)
> Linux 3.10.0-229.4.2.el7.x86_64 #1 SMP Wed May 13 10:06:09 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
> java version "1.8.0_60"
> Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
> Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
>            Reporter: John Farrelly
>            Assignee: Stuart Douglas
>
> I created a service archive based on the code in {{wildfly/sar/src/test/_java}}.  I have the following files in my {{standalone/deployment}} directory:
> {noformat}
> .
> |-- my-test.sar
> |   |-- META-INF
> |   |   `-- jboss-service.xml
> |   `-- org
> |       `-- jboss
> |           `-- as
> |               `-- service
> |                   |-- LegacyService.class
> |                   `-- LegacyServiceMBean.class
> `-- my-test.sar.dodeploy
> {noformat}
> I get the following error when WildFly tries to deploy the sar:
> {noformat}
> 10:47:01,472 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.mbean.service.jboss:name=testTwo,type=service.create: org.jboss.msc.service.StartException in service jboss.mbean.service.jboss:name=testTwo,type=service.create: Failed to start service
>         at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_60]
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_60]
>         at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_60]
> Caused by: org.jboss.msc.inject.InjectionException: Injection failed
>         at org.jboss.msc.inject.MethodInjector.inject(MethodInjector.java:102) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
>         at org.jboss.msc.service.ServiceControllerImpl.doInject(ServiceControllerImpl.java:1672) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
>         at org.jboss.msc.service.ServiceControllerImpl.access$2000(ServiceControllerImpl.java:51) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
>         at org.jboss.msc.service.ServiceControllerImpl$StartTask.performInjections(ServiceControllerImpl.java:1917) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
>         at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1876) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
>         ... 3 more
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_60]
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_60]
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_60]
>         at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_60]
>         at org.jboss.msc.inject.MethodInjector.inject(MethodInjector.java:92) [jboss-msc-1.2.6.Final.jar:1.2.6.Final]
>         ... 7 more
> {noformat}
> Attached is the sar file that I tried to deploy.  The {{META-INF/jboss-service.xml}} file has the following content:
> {code:xml}
> <server xmlns="urn:jboss:service:7.0"
>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>       xsi:schemaLocation="urn:jboss:service:7.0 jboss-service_7_0.xsd">
>     <mbean name="jboss:name=test,type=service" code="org.jboss.as.service.LegacyService">
>         <constructor>
>             <arg value="Test Value" type="java.lang.String"/>
>         </constructor>
>     </mbean>
>     <mbean name="jboss:name=testTwo,type=service" code="org.jboss.as.service.LegacyService">
>         <depends optional-attribute-name="other">jboss:name=test,type=service</depends>
>         <attribute name="somethingElse">
>             <value-factory bean="jboss:name=test,type=service" method="appendSomethingElse">
>                 <parameter class="java.lang.String">more value</parameter>
>             </value-factory>
>         </attribute>
>     </mbean>
>     <mbean name="jboss:name=testThree,type=service" code="org.jboss.as.service.LegacyService">
>         <attribute name="other">
>             <inject bean="jboss:name=testTwo,type=service" property="other"/>
>         </attribute>
>         <attribute name="somethingElse">Another test value</attribute>
>     </mbean>
> </server>
> {code}
> The code for {{LegacyService}} is as follows:
> {code:java}
> package org.jboss.as.service;
> import org.jboss.logging.Logger;
> /**
>  * @author John E. Bailey
>  */
> public class LegacyService implements LegacyServiceMBean {
>     private static final Logger logger = Logger.getLogger(LegacyService.class);
>     private LegacyService other;
>     private String somethingElse;
>     public LegacyService() {
>     }
>     public LegacyService(String somethingElse) {
>         this.somethingElse = somethingElse;
>     }
>     public void setOther(LegacyService other) {
>         this.other = other;
>     }
>     public LegacyService getOther() {
>         return other;
>     }
>     public String getSomethingElse() {
>         return somethingElse;
>     }
>     public String appendSomethingElse(String more) {
>         return somethingElse + " - " + more;
>     }
>     public void setSomethingElse(String somethingElse) {
>         this.somethingElse = somethingElse;
>     }
>     public void start() {
>         logger.info("Started");
>     }
>     public void stop() {
>         logger.info("Stopped");
>     }
> }
> {code}
> The code for {{LegacyServiceMBean.java}} is:
> {code:java}
> package org.jboss.as.service;
> /**
>  * @author John Bailey
>  */
> public interface LegacyServiceMBean {
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list