You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Ed Hillmann <ed...@gmail.com> on 2007/09/28 07:20:01 UTC

Q: Can a JCA adapter define multiple inbound resource adapters?

Hi.  I've been working on a Resource Adapter, and as part of it, I
want to support two types of inbound adapters.  The mechanisms by when
calls into the container are substantially different, so it does not
make sense for a single inbound resource adapter to handle this.

When reading the JCA 1.5 specification, I came across section 17.3.1,
which states:

Inbound resource adapter information

    * Message listener type: The resource adapter provider must specify one or
      more message listener types supported by a messaging resource adapter. The
      message listener type is the fully qualified name of the Java
type of a message
      listener interface.
    * ActivationSpec class: The resource adapter provider must specify the fully
      qualified Java class name of the activation specification class. The
      implementation of this class must be a JavaBean. An ActivationSpec
      specifies an activation specification per message listener type. The
      ActivationSpec is configured by a message endpoint deployer during
      application deployment.

So, I've interpreted this as that a Resource Adapter can specify more
than one message listener types.  Each message listener type declares
its ActivationSpec implementation class.

So, I've got different listener types (equating to different Java
interfaces), and each type has its own ActivationSpec implementation.
So I've done that.  but when I attempt to deploy my connector module,
I get the following error:

15:08:49,735 ERROR [Deployer] Deployment failed due to
org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
descriptor
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.createModule(ConnectorModuleBuilder.java:200)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.createModule(ConnectorModuleBuilder.java:167)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder$$FastClassByCGLIB$$a535b6aa.invoke(<generated>)
	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:830)
	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)
	at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)
	at org.apache.geronimo.j2ee.deployment.ActivationSpecInfoLocator$$EnhancerByCGLIB$$96eec940.createModule(<generated>)
	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.getDeploymentPlan(EARConfigBuilder.java:295)
	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder$$FastClassByCGLIB$$38e56ec6.invoke(<generated>)
	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:830)
	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)
	at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)
	at org.apache.geronimo.deployment.ConfigurationBuilder$$EnhancerByCGLIB$$bf40cfd5.getDeploymentPlan(<generated>)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:234)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:126)
	at org.apache.geronimo.deployment.Deployer$$FastClassByCGLIB$$734a235d.invoke(<generated>)
	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:865)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:239)
	at org.apache.geronimo.deployment.plugin.local.AbstractDeployCommand.doDeploy(AbstractDeployCommand.java:116)
	at org.apache.geronimo.deployment.plugin.local.DistributeCommand.run(DistributeCommand.java:61)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.xmlbeans.XmlException: Invalid deployment
descriptor: errors:

error: cvc-complex-type.2.4a: Expected elements
'adminobject@http://java.sun.com/xml/ns/j2ee
security-permission@http://java.sun.com/xml/ns/j2ee' instead of
'inbound-resourceadapter@http://java.sun.com/xml/ns/j2ee' here in
element resourceadapter@http://java.sun.com/xml/ns/j2ee

Descriptor:
<connector version="1.5" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd">
  <display-name>Singl.eView Connector"</display-name>
  <vendor-name>Intec</vendor-name>
  <eis-type>Singl.eView Server</eis-type>
  <resourceadapter-version>1.0</resourceadapter-version>
  <resourceadapter>
    <resourceadapter-class>com.intecbilling.connector.SVResourceAdapter</resourceadapter-class>
    <!--Can define config-property entries here, if you settings that
are constant across the Resource Adapter-->
    <outbound-resourceadapter>
      <connection-definition>
        <managedconnectionfactory-class>com.intecbilling.connector.SVManagedConnectionFactory</managedconnectionfactory-class>
        <config-property>
          <config-property-name>ServerName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>wallaby</config-property-value>
        </config-property>
        <config-property>
          <config-property-name>PortNumber</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
          <config-property-value>10000</config-property-value>
        </config-property>
        <config-property>
          <config-property-name>UserName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>user</config-property-value>
        </config-property>
        <config-property>
          <config-property-name>Password</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>password</config-property-value>
        </config-property>
        <connectionfactory-interface>javax.resource.cci.ConnectionFactory</connectionfactory-interface>
        <connectionfactory-impl-class>com.intecbilling.connector.SVConnectionFactory</connectionfactory-impl-class>
        <connection-interface>javax.resource.cci.Connection</connection-interface>
        <connection-impl-class>com.intecbilling.connector.SVConnection</connection-impl-class>
      </connection-definition>
      <transaction-support>LocalTransaction</transaction-support>
      <reauthentication-support>false</reauthentication-support>
    </outbound-resourceadapter>
    <inbound-resourceadapter>
      <messageadapter>
        <messagelistener>
          <messagelistener-type>com.intecbilling.connector.TreEventListener</messagelistener-type>
          <activationspec>
            <activationspec-class>com.intecbilling.connector.TreEventActivationSpec</activationspec-class>
            <required-config-property>
              <config-property-name>ServerName</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>PortNumber</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>UserName</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>Password</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>EventPatterns</config-property-name>
            </required-config-property>
          </activationspec>
        </messagelistener>
      </messageadapter>
    </inbound-resourceadapter>
    <inbound-resourceadapter>
      <messageadapter>
        <messagelistener>
          <messagelistener-type>com.adc.tre.srv.Invoke</messagelistener-type>
          <activationspec>
            <activationspec-class>com.intecbilling.connector.TreProxyActivationSpec</activationspec-class>
            <required-config-property>
              <config-property-name>ProxyPort</config-property-name>
            </required-config-property>
          </activationspec>
        </messagelistener>
      </messageadapter>
    </inbound-resourceadapter>
    <security-permission>
      <description>Permissions allowed to the Singl.eView
Connector</description>
      <security-permission-spec/>
    </security-permission>
  </resourceadapter>
</connector>

	at org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil.validateDD(XmlBeansUtil.java:223)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.convertToConnectorSchema(ConnectorModuleBuilder.java:276)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.createModule(ConnectorModuleBuilder.java:197)
	... 31 more


So, jave I misinterpreted the spec?  Should I be able to do this, or
will I need to break these out into multiple RAR files?

Thanks for any help,
Ed

Re: Q: Can a JCA adapter define multiple inbound resource adapters?

Posted by David Jencks <da...@yahoo.com>.
On Oct 1, 2007, at 3:26 PM, Ed Hillmann wrote:

> On 10/1/07, David Jencks <da...@yahoo.com> wrote:
>> yes.... next time maybe I'll refer to the spec before suggesting
>> stuff.... you also have to remove
>>
>>>       </messageadapter>
>>>       <messageadapter>
>>
>>
>> so its
>> </messagelistener>
>> <messagelistener>
>>
>> messagelistener is the one with maxOccurs="unbounded" so you can have
>> more than one.  Don't blame me, I didn't write the schema :-)
>>
>> Hope I've looked at the schema enough this time :-)
>>
>
> Sorry if I sounded critical before.  I did not intend to be.  You've
> been very helpful throughout the entire process. :)  I'm as guilty of
> not fully comprehending the schema as anyone else, so I'm not throwing
> any stones.

Sorry.... the target of the stones I was throwing was not you but the  
authors of the connector xsd which is kind of bizarre... it has a  
couple layers of elements with multiplicity 1, thus pointless, and  
can't decide if it is trying to describe a type of a connector or an  
instance of that type.  I'm pretty sure it wasn't subjected to a  
sensibility test of "if i don't look at the schema for a week can I  
figure out if a doc is compliant by just looking at it".  As you can  
see I can't tell if a doc is xsd-compliant by just looking :-)

>
> Once I write the ra.xml file correctly, it installed fine.  I'll
> endeavour to write the geronimo-ra.xml file correctly, now, to try out
> my adapter in Geronimo. :)

let us know how it works!

thanks
david jencks

>
> Thanks heaps!
>
> Ed


Re: Q: Can a JCA adapter define multiple inbound resource adapters?

Posted by Ed Hillmann <ed...@gmail.com>.
On 10/1/07, David Jencks <da...@yahoo.com> wrote:
> yes.... next time maybe I'll refer to the spec before suggesting
> stuff.... you also have to remove
>
> >       </messageadapter>
> >       <messageadapter>
>
>
> so its
> </messagelistener>
> <messagelistener>
>
> messagelistener is the one with maxOccurs="unbounded" so you can have
> more than one.  Don't blame me, I didn't write the schema :-)
>
> Hope I've looked at the schema enough this time :-)
>

Sorry if I sounded critical before.  I did not intend to be.  You've
been very helpful throughout the entire process. :)  I'm as guilty of
not fully comprehending the schema as anyone else, so I'm not throwing
any stones.

Once I write the ra.xml file correctly, it installed fine.  I'll
endeavour to write the geronimo-ra.xml file correctly, now, to try out
my adapter in Geronimo. :)

Thanks heaps!

Ed

Re: Q: Can a JCA adapter define multiple inbound resource adapters?

Posted by David Jencks <da...@yahoo.com>.
On Sep 30, 2007, at 5:15 PM, Ed Hillmann wrote:

> On 9/28/07, David Jencks <da...@yahoo.com> wrote:
>> I think you have to remove these lines:
>>
>>      </inbound-resourceadapter>
>>      <inbound-resourceadapter>
>>
>> Hope this helps
>> david jencks
>>
>
> Well, I get a different exception:
>
>  	
> Deployment failed:
> org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
> descriptor
> Show full details
>
> org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
> descriptor
> org.apache.geronimo.common.DeploymentException:
> org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
> descriptor
> 	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:385)
> 	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:126)
> 	at org.apache.geronimo.deployment.Deployer$$FastClassByCGLIB$ 
> $734a235d.invoke(<generated>)
> 	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> 	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke 
> (FastMethodInvoker.java:38)
> 	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke 
> (GBeanOperation.java:124)
> 	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke 
> (GBeanInstance.java:865)
> 	at org.apache.geronimo.kernel.basic.BasicKernel.invoke 
> (BasicKernel.java:239)
> 	at  
> org.apache.geronimo.deployment.plugin.local.AbstractDeployCommand.doDe 
> ploy(AbstractDeployCommand.java:116)
> 	at  
> org.apache.geronimo.deployment.plugin.local.DistributeCommand.run 
> (DistributeCommand.java:61)
> 	at java.lang.Thread.run(Thread.java:619)
> Caused by: org.apache.geronimo.common.DeploymentException: Could not
> parse ra.xml descriptor
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.create 
> Module(ConnectorModuleBuilder.java:200)
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.create 
> Module(ConnectorModuleBuilder.java:167)
> 	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder$ 
> $FastClassByCGLIB$$a535b6aa.invoke(<generated>)
> 	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> 	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke 
> (FastMethodInvoker.java:38)
> 	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke 
> (GBeanOperation.java:124)
> 	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke 
> (GBeanInstance.java:830)
> 	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke 
> (RawInvoker.java:57)
> 	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke 
> (RawOperationInvoker.java:35)
> 	at  
> org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept 
> (ProxyMethodInterceptor.java:96)
> 	at org.apache.geronimo.j2ee.deployment.ActivationSpecInfoLocator$ 
> $EnhancerByCGLIB$$3e56968e.createModule(<generated>)
> 	at  
> org.apache.geronimo.j2ee.deployment.EARConfigBuilder.getDeploymentPlan 
> (EARConfigBuilder.java:295)
> 	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder$ 
> $FastClassByCGLIB$$38e56ec6.invoke(<generated>)
> 	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> 	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke 
> (FastMethodInvoker.java:38)
> 	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke 
> (GBeanOperation.java:124)
> 	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke 
> (GBeanInstance.java:830)
> 	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke 
> (RawInvoker.java:57)
> 	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke 
> (RawOperationInvoker.java:35)
> 	at  
> org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept 
> (ProxyMethodInterceptor.java:96)
> 	at org.apache.geronimo.deployment.ConfigurationBuilder$ 
> $EnhancerByCGLIB$$66a89d23.getDeploymentPlan(<generated>)
> 	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:234)
> 	... 10 more
> Caused by: org.apache.xmlbeans.XmlException: Invalid deployment
> descriptor: errors:
>
> error: cvc-complex-type.2.4b: Element not allowed:
> messageadapter@http://java.sun.com/xml/ns/j2ee in element
> inbound-resourceadapter@http://java.sun.com/xml/ns/j2ee
>
> Descriptor:
> <connector version="1.5" xmlns="http://java.sun.com/xml/ns/j2ee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:schemaLocation="http://java.sun.com/xml/ns/j2ee
> http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd">
>   <display-name>Singl.eView Connector</display-name>
>   <vendor-name>Intec</vendor-name>
>   <eis-type>Singl.eView Server</eis-type>
>   <resourceadapter-version>1.0</resourceadapter-version>
>   <resourceadapter>
>     <resourceadapter- 
> class>com.intecbilling.connector.SVResourceAdapter</resourceadapter- 
> class>
>     <!--Can define config-property entries here, if you settings that
> are constant across the Resource Adapter-->
>     <outbound-resourceadapter>
>       <connection-definition>
>         <managedconnectionfactory- 
> class>com.intecbilling.connector.SVManagedConnectionFactory</ 
> managedconnectionfactory-class>
>         <config-property>
>           <config-property-name>ServerName</config-property-name>
>           <config-property-type>java.lang.String</config-property- 
> type>
>           <config-property-value>wallaby</config-property-value>
>         </config-property>
>         <config-property>
>           <config-property-name>PortNumber</config-property-name>
>           <config-property-type>java.lang.Integer</config-property- 
> type>
>           <config-property-value>10000</config-property-value>
>         </config-property>
>         <config-property>
>           <config-property-name>UserName</config-property-name>
>           <config-property-type>java.lang.String</config-property- 
> type>
>           <config-property-value>user</config-property-value>
>         </config-property>
>         <config-property>
>           <config-property-name>Password</config-property-name>
>           <config-property-type>java.lang.String</config-property- 
> type>
>           <config-property-value>password</config-property-value>
>         </config-property>
>         <connectionfactory- 
> interface>javax.resource.cci.ConnectionFactory</connectionfactory- 
> interface>
>         <connectionfactory-impl- 
> class>com.intecbilling.connector.SVConnectionFactory</ 
> connectionfactory-impl-class>
>         <connection-interface>javax.resource.cci.Connection</ 
> connection-interface>
>         <connection-impl- 
> class>com.intecbilling.connector.SVConnection</connection-impl-class>
>       </connection-definition>
>       <transaction-support>LocalTransaction</transaction-support>
>       <reauthentication-support>false</reauthentication-support>
>     </outbound-resourceadapter>
>     <inbound-resourceadapter>
>       <messageadapter>
>         <messagelistener>
>           <messagelistener- 
> type>com.intecbilling.connector.TreEventListener</messagelistener- 
> type>
>           <activationspec>
>             <activationspec- 
> class>com.intecbilling.connector.TreEventActivationSpec</ 
> activationspec-class>
>             <required-config-property>
>               <config-property-name>ServerName</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>PortNumber</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>UserName</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>Password</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>EventPatterns</config-property- 
> name>
>             </required-config-property>
>           </activationspec>
>         </messagelistener>
>       </messageadapter>
>       <messageadapter>
>         <messagelistener>
>           <messagelistener-type>com.adc.tre.srv.Invoke</ 
> messagelistener-type>
>           <activationspec>
>             <activationspec- 
> class>com.intecbilling.connector.TreProxyActivationSpec</ 
> activationspec-class>
>             <required-config-property>
>               <config-property-name>ProxyPort</config-property-name>
>             </required-config-property>
>           </activationspec>
>         </messagelistener>
>       </messageadapter>
>     </inbound-resourceadapter>
>     <security-permission>
>       <description>Permissions allowed to the Singl.eView
> Connector</description>
>       <security-permission-spec/>
>     </security-permission>
>   </resourceadapter>
> </connector>
>
> 	at org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil.validateDD 
> (XmlBeansUtil.java:223)
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.conver 
> tToConnectorSchema(ConnectorModuleBuilder.java:276)
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.create 
> Module(ConnectorModuleBuilder.java:197)
> 	... 31 more
>
> So, now Geronimo won't allow the multiple <messageadapter> elements.
> The connector_1_5.xsd doesn't specify a maxOccurs for this element.
> Is the default value "1"?

yes.... next time maybe I'll refer to the spec before suggesting  
stuff.... you also have to remove

>       </messageadapter>
>       <messageadapter>


so its
</messagelistener>
<messagelistener>

messagelistener is the one with maxOccurs="unbounded" so you can have  
more than one.  Don't blame me, I didn't write the schema :-)

Hope I've looked at the schema enough this time :-)

david jencks


Re: Q: Can a JCA adapter define multiple inbound resource adapters?

Posted by Ed Hillmann <ed...@gmail.com>.
On 9/28/07, David Jencks <da...@yahoo.com> wrote:
> I think you have to remove these lines:
>
>      </inbound-resourceadapter>
>      <inbound-resourceadapter>
>
> Hope this helps
> david jencks
>

Well, I get a different exception:

 	
Deployment failed:
org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
descriptor
Show full details

org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
descriptor
org.apache.geronimo.common.DeploymentException:
org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
descriptor
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:385)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:126)
	at org.apache.geronimo.deployment.Deployer$$FastClassByCGLIB$$734a235d.invoke(<generated>)
	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:865)
	at org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:239)
	at org.apache.geronimo.deployment.plugin.local.AbstractDeployCommand.doDeploy(AbstractDeployCommand.java:116)
	at org.apache.geronimo.deployment.plugin.local.DistributeCommand.run(DistributeCommand.java:61)
	at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.geronimo.common.DeploymentException: Could not
parse ra.xml descriptor
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.createModule(ConnectorModuleBuilder.java:200)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.createModule(ConnectorModuleBuilder.java:167)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder$$FastClassByCGLIB$$a535b6aa.invoke(<generated>)
	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:830)
	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)
	at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)
	at org.apache.geronimo.j2ee.deployment.ActivationSpecInfoLocator$$EnhancerByCGLIB$$3e56968e.createModule(<generated>)
	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder.getDeploymentPlan(EARConfigBuilder.java:295)
	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder$$FastClassByCGLIB$$38e56ec6.invoke(<generated>)
	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:830)
	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)
	at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)
	at org.apache.geronimo.deployment.ConfigurationBuilder$$EnhancerByCGLIB$$66a89d23.getDeploymentPlan(<generated>)
	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:234)
	... 10 more
Caused by: org.apache.xmlbeans.XmlException: Invalid deployment
descriptor: errors:

error: cvc-complex-type.2.4b: Element not allowed:
messageadapter@http://java.sun.com/xml/ns/j2ee in element
inbound-resourceadapter@http://java.sun.com/xml/ns/j2ee

Descriptor:
<connector version="1.5" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd">
  <display-name>Singl.eView Connector</display-name>
  <vendor-name>Intec</vendor-name>
  <eis-type>Singl.eView Server</eis-type>
  <resourceadapter-version>1.0</resourceadapter-version>
  <resourceadapter>
    <resourceadapter-class>com.intecbilling.connector.SVResourceAdapter</resourceadapter-class>
    <!--Can define config-property entries here, if you settings that
are constant across the Resource Adapter-->
    <outbound-resourceadapter>
      <connection-definition>
        <managedconnectionfactory-class>com.intecbilling.connector.SVManagedConnectionFactory</managedconnectionfactory-class>
        <config-property>
          <config-property-name>ServerName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>wallaby</config-property-value>
        </config-property>
        <config-property>
          <config-property-name>PortNumber</config-property-name>
          <config-property-type>java.lang.Integer</config-property-type>
          <config-property-value>10000</config-property-value>
        </config-property>
        <config-property>
          <config-property-name>UserName</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>user</config-property-value>
        </config-property>
        <config-property>
          <config-property-name>Password</config-property-name>
          <config-property-type>java.lang.String</config-property-type>
          <config-property-value>password</config-property-value>
        </config-property>
        <connectionfactory-interface>javax.resource.cci.ConnectionFactory</connectionfactory-interface>
        <connectionfactory-impl-class>com.intecbilling.connector.SVConnectionFactory</connectionfactory-impl-class>
        <connection-interface>javax.resource.cci.Connection</connection-interface>
        <connection-impl-class>com.intecbilling.connector.SVConnection</connection-impl-class>
      </connection-definition>
      <transaction-support>LocalTransaction</transaction-support>
      <reauthentication-support>false</reauthentication-support>
    </outbound-resourceadapter>
    <inbound-resourceadapter>
      <messageadapter>
        <messagelistener>
          <messagelistener-type>com.intecbilling.connector.TreEventListener</messagelistener-type>
          <activationspec>
            <activationspec-class>com.intecbilling.connector.TreEventActivationSpec</activationspec-class>
            <required-config-property>
              <config-property-name>ServerName</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>PortNumber</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>UserName</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>Password</config-property-name>
            </required-config-property>
            <required-config-property>
              <config-property-name>EventPatterns</config-property-name>
            </required-config-property>
          </activationspec>
        </messagelistener>
      </messageadapter>
      <messageadapter>
        <messagelistener>
          <messagelistener-type>com.adc.tre.srv.Invoke</messagelistener-type>
          <activationspec>
            <activationspec-class>com.intecbilling.connector.TreProxyActivationSpec</activationspec-class>
            <required-config-property>
              <config-property-name>ProxyPort</config-property-name>
            </required-config-property>
          </activationspec>
        </messagelistener>
      </messageadapter>
    </inbound-resourceadapter>
    <security-permission>
      <description>Permissions allowed to the Singl.eView
Connector</description>
      <security-permission-spec/>
    </security-permission>
  </resourceadapter>
</connector>

	at org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil.validateDD(XmlBeansUtil.java:223)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.convertToConnectorSchema(ConnectorModuleBuilder.java:276)
	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.createModule(ConnectorModuleBuilder.java:197)
	... 31 more

So, now Geronimo won't allow the multiple <messageadapter> elements.
The connector_1_5.xsd doesn't specify a maxOccurs for this element.
Is the default value "1"?

Re: Q: Can a JCA adapter define multiple inbound resource adapters?

Posted by David Jencks <da...@yahoo.com>.
I think you have to remove these lines:

     </inbound-resourceadapter>
     <inbound-resourceadapter>

Hope this helps
david jencks

On Sep 27, 2007, at 10:20 PM, Ed Hillmann wrote:

> Hi.  I've been working on a Resource Adapter, and as part of it, I
> want to support two types of inbound adapters.  The mechanisms by when
> calls into the container are substantially different, so it does not
> make sense for a single inbound resource adapter to handle this.
>
> When reading the JCA 1.5 specification, I came across section 17.3.1,
> which states:
>
> Inbound resource adapter information
>
>     * Message listener type: The resource adapter provider must  
> specify one or
>       more message listener types supported by a messaging resource  
> adapter. The
>       message listener type is the fully qualified name of the Java
> type of a message
>       listener interface.
>     * ActivationSpec class: The resource adapter provider must  
> specify the fully
>       qualified Java class name of the activation specification  
> class. The
>       implementation of this class must be a JavaBean. An  
> ActivationSpec
>       specifies an activation specification per message listener  
> type. The
>       ActivationSpec is configured by a message endpoint deployer  
> during
>       application deployment.
>
> So, I've interpreted this as that a Resource Adapter can specify more
> than one message listener types.  Each message listener type declares
> its ActivationSpec implementation class.
>
> So, I've got different listener types (equating to different Java
> interfaces), and each type has its own ActivationSpec implementation.
> So I've done that.  but when I attempt to deploy my connector module,
> I get the following error:
>
> 15:08:49,735 ERROR [Deployer] Deployment failed due to
> org.apache.geronimo.common.DeploymentException: Could not parse ra.xml
> descriptor
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.create 
> Module(ConnectorModuleBuilder.java:200)
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.create 
> Module(ConnectorModuleBuilder.java:167)
> 	at org.apache.geronimo.connector.deployment.ConnectorModuleBuilder$ 
> $FastClassByCGLIB$$a535b6aa.invoke(<generated>)
> 	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> 	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke 
> (FastMethodInvoker.java:38)
> 	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke 
> (GBeanOperation.java:124)
> 	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke 
> (GBeanInstance.java:830)
> 	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke 
> (RawInvoker.java:57)
> 	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke 
> (RawOperationInvoker.java:35)
> 	at  
> org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept 
> (ProxyMethodInterceptor.java:96)
> 	at org.apache.geronimo.j2ee.deployment.ActivationSpecInfoLocator$ 
> $EnhancerByCGLIB$$96eec940.createModule(<generated>)
> 	at  
> org.apache.geronimo.j2ee.deployment.EARConfigBuilder.getDeploymentPlan 
> (EARConfigBuilder.java:295)
> 	at org.apache.geronimo.j2ee.deployment.EARConfigBuilder$ 
> $FastClassByCGLIB$$38e56ec6.invoke(<generated>)
> 	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> 	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke 
> (FastMethodInvoker.java:38)
> 	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke 
> (GBeanOperation.java:124)
> 	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke 
> (GBeanInstance.java:830)
> 	at org.apache.geronimo.gbean.runtime.RawInvoker.invoke 
> (RawInvoker.java:57)
> 	at org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke 
> (RawOperationInvoker.java:35)
> 	at  
> org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept 
> (ProxyMethodInterceptor.java:96)
> 	at org.apache.geronimo.deployment.ConfigurationBuilder$ 
> $EnhancerByCGLIB$$bf40cfd5.getDeploymentPlan(<generated>)
> 	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:234)
> 	at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:126)
> 	at org.apache.geronimo.deployment.Deployer$$FastClassByCGLIB$ 
> $734a235d.invoke(<generated>)
> 	at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> 	at org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke 
> (FastMethodInvoker.java:38)
> 	at org.apache.geronimo.gbean.runtime.GBeanOperation.invoke 
> (GBeanOperation.java:124)
> 	at org.apache.geronimo.gbean.runtime.GBeanInstance.invoke 
> (GBeanInstance.java:865)
> 	at org.apache.geronimo.kernel.basic.BasicKernel.invoke 
> (BasicKernel.java:239)
> 	at  
> org.apache.geronimo.deployment.plugin.local.AbstractDeployCommand.doDe 
> ploy(AbstractDeployCommand.java:116)
> 	at  
> org.apache.geronimo.deployment.plugin.local.DistributeCommand.run 
> (DistributeCommand.java:61)
> 	at java.lang.Thread.run(Thread.java:619)
> Caused by: org.apache.xmlbeans.XmlException: Invalid deployment
> descriptor: errors:
>
> error: cvc-complex-type.2.4a: Expected elements
> 'adminobject@http://java.sun.com/xml/ns/j2ee
> security-permission@http://java.sun.com/xml/ns/j2ee' instead of
> 'inbound-resourceadapter@http://java.sun.com/xml/ns/j2ee' here in
> element resourceadapter@http://java.sun.com/xml/ns/j2ee
>
> Descriptor:
> <connector version="1.5" xmlns="http://java.sun.com/xml/ns/j2ee"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:schemaLocation="http://java.sun.com/xml/ns/j2ee
> http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd">
>   <display-name>Singl.eView Connector"</display-name>
>   <vendor-name>Intec</vendor-name>
>   <eis-type>Singl.eView Server</eis-type>
>   <resourceadapter-version>1.0</resourceadapter-version>
>   <resourceadapter>
>     <resourceadapter- 
> class>com.intecbilling.connector.SVResourceAdapter</resourceadapter- 
> class>
>     <!--Can define config-property entries here, if you settings that
> are constant across the Resource Adapter-->
>     <outbound-resourceadapter>
>       <connection-definition>
>         <managedconnectionfactory- 
> class>com.intecbilling.connector.SVManagedConnectionFactory</ 
> managedconnectionfactory-class>
>         <config-property>
>           <config-property-name>ServerName</config-property-name>
>           <config-property-type>java.lang.String</config-property- 
> type>
>           <config-property-value>wallaby</config-property-value>
>         </config-property>
>         <config-property>
>           <config-property-name>PortNumber</config-property-name>
>           <config-property-type>java.lang.Integer</config-property- 
> type>
>           <config-property-value>10000</config-property-value>
>         </config-property>
>         <config-property>
>           <config-property-name>UserName</config-property-name>
>           <config-property-type>java.lang.String</config-property- 
> type>
>           <config-property-value>user</config-property-value>
>         </config-property>
>         <config-property>
>           <config-property-name>Password</config-property-name>
>           <config-property-type>java.lang.String</config-property- 
> type>
>           <config-property-value>password</config-property-value>
>         </config-property>
>         <connectionfactory- 
> interface>javax.resource.cci.ConnectionFactory</connectionfactory- 
> interface>
>         <connectionfactory-impl- 
> class>com.intecbilling.connector.SVConnectionFactory</ 
> connectionfactory-impl-class>
>         <connection-interface>javax.resource.cci.Connection</ 
> connection-interface>
>         <connection-impl- 
> class>com.intecbilling.connector.SVConnection</connection-impl-class>
>       </connection-definition>
>       <transaction-support>LocalTransaction</transaction-support>
>       <reauthentication-support>false</reauthentication-support>
>     </outbound-resourceadapter>
>     <inbound-resourceadapter>
>       <messageadapter>
>         <messagelistener>
>           <messagelistener- 
> type>com.intecbilling.connector.TreEventListener</messagelistener- 
> type>
>           <activationspec>
>             <activationspec- 
> class>com.intecbilling.connector.TreEventActivationSpec</ 
> activationspec-class>
>             <required-config-property>
>               <config-property-name>ServerName</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>PortNumber</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>UserName</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>Password</config-property-name>
>             </required-config-property>
>             <required-config-property>
>               <config-property-name>EventPatterns</config-property- 
> name>
>             </required-config-property>
>           </activationspec>
>         </messagelistener>
>       </messageadapter>
>     </inbound-resourceadapter>
>     <inbound-resourceadapter>
>       <messageadapter>
>         <messagelistener>
>           <messagelistener-type>com.adc.tre.srv.Invoke</ 
> messagelistener-type>
>           <activationspec>
>             <activationspec- 
> class>com.intecbilling.connector.TreProxyActivationSpec</ 
> activationspec-class>
>             <required-config-property>
>               <config-property-name>ProxyPort</config-property-name>
>             </required-config-property>
>           </activationspec>
>         </messagelistener>
>       </messageadapter>
>     </inbound-resourceadapter>
>     <security-permission>
>       <description>Permissions allowed to the Singl.eView
> Connector</description>
>       <security-permission-spec/>
>     </security-permission>
>   </resourceadapter>
> </connector>
>
> 	at org.apache.geronimo.deployment.xmlbeans.XmlBeansUtil.validateDD 
> (XmlBeansUtil.java:223)
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.conver 
> tToConnectorSchema(ConnectorModuleBuilder.java:276)
> 	at  
> org.apache.geronimo.connector.deployment.ConnectorModuleBuilder.create 
> Module(ConnectorModuleBuilder.java:197)
> 	... 31 more
>
>
> So, jave I misinterpreted the spec?  Should I be able to do this, or
> will I need to break these out into multiple RAR files?
>
> Thanks for any help,
> Ed