I am trying to get a simple MDB to work using annotations. However, when
I deploy it into Geronimo 2.0, I get the following error. This is with
the ConnectionFactory and Queue set up in Geronimo already:
Error: Unable to distribute order-ear-2.0-SNAPSHOT.ear: Unable to
resolve resource reference 'jms/CommonConnectionFactory' (Could not
auto-map to resource. Try adding a resource-ref mapping to your
Geronimo deployment plan.
My deployment plan for the ConnectionFactory and Queues looks like this:
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.1">
<dep:environment
xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2">
<dep:moduleId>
<dep:groupId>org.apache.geronimo.samples</dep:groupId>
<dep:artifactId>jms-resources</dep:artifactId>
<dep:version>1.2</dep:version>
<dep:type>rar</dep:type>
</dep:moduleId>
<dep:dependencies>
<dep:dependency>
<dep:groupId>org.apache.geronimo.configs</dep:groupId>
<dep:artifactId>activemq-broker</dep:artifactId>
<dep:type>car</dep:type>
</dep:dependency>
</dep:dependencies>
</dep:environment>
<resourceadapter>
<resourceadapter-instance>
<resourceadapter-name>CommonConnectionFactory</resourceadapter-name>
<config-property-setting
name="Password">geronimo</config-property-setting>
<config-property-setting
name="UserName">geronimo</config-property-setting>
<nam:workmanager
xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1">
<nam:gbean-link>DefaultWorkManager</nam:gbean-link>
</nam:workmanager>
</resourceadapter-instance>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>javax.jms.QueueConnectionFactory</connectionfactory-interface>
<connectiondefinition-instance>
<name>CommonConnectionFactory</name>
<connectionmanager>
<xa-transaction>
<transaction-caching/>
</xa-transaction>
<single-pool>
<match-one/>
</single-pool>
</connectionmanager>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
<adminobject>
<adminobject-interface>javax.jms.Queue</adminobject-interface>
<adminobject-class>org.activemq.message.ActiveMQQueue</adminobject-class>
<adminobject-instance>
<message-destination-name>OrderQueue</message-destination-name>
<config-property-setting
name="PhysicalName">OrderQueue</config-property-setting>
</adminobject-instance>
<adminobject-instance>
<message-destination-name>ConsignmentQueue</message-destination-name>
<config-property-setting
name="PhysicalName">ConsignmentQueue</config-property-setting>
</adminobject-instance>
</adminobject>
<adminobject>
<adminobject-interface>javax.jms.Topic</adminobject-interface>
<adminobject-class>org.activemq.message.ActiveMQTopic</adminobject-class>
</adminobject>
</connector>
I have the MDB with the following annotation
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName="destinationType",
propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination",
propertyValue="jms/OrderQueue")
})
I have a Servlet with the following annotated Queue and ConnectionFactory:
@Resource(mappedName="jms/OrderQueue")
private static Queue receivingQueue;
@Resource(mappedName="jms/CommonConnectionFactory")
private static QueueConnectionFactory factory;
I have the geronimo-web.xml file which has the following:
<resource-ref>
<ref-name>jms/CommonConnectionFactory</ref-name>
<resource-link>CommonConnectionFactory</resource-link>
</resource-ref>
<resource-env-ref>
<ref-name>jms/OrderQueue</ref-name>
<admin-object-link>OrderQueue</admin-object-link>
</resource-env-ref>
However, I think that these references are unnecessary when the
annotations are present. But I am new to EJBs in general so I am not sure.
And I also have a web.xml with the following references too
<resource-ref>
<res-ref-name>jms/CommonConnectionFactory</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<message-destination-ref>
<message-destination-ref-name>jms/OrderQueue</message-destination-ref-name>
<message-destination-type>javax.jms.Queue</message-destination-type>
<message-destination-usage>Produces</message-destination-usage>
<message-destination-link>OrderQueue</message-destination-link>
</message-destination-ref>
Am I missing something? I would appreciate any type of feedback.
Thanks,
Viet Nguyen