You are correct that you need to deploy the resource adapter on the
app client as well as the server. I think the problem is that your
external-rar tag is pointing to the server's broker configuration
rather than the actibvemq rar file in the geronimo repository.
I think there's correct configuration in one of the daytrader app
clients.
This would make a great subject for a wiki page (I haven't searched
much, maybe there already is one?)
thanks
david jencks
On Jul 22, 2008, at 2:47 AM, Stella Lok wrote:
Hi,
I am trying to access a server-scoped JMS TopicConnectionFactory and
Topic on Geronimo 2.02, from a J2EE Application Client, but am
encountering problems. Here are the steps I took:
1) Deployed JMS TopicConnectionFactory & Topic in Resource Adapter:
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/
connector-1.2">
<dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2
">
<dep:moduleId>
<dep:groupId>console.jms</dep:groupId>
<dep:artifactId>topic</dep:artifactId>
<dep:version>1.0</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>eventTopicResourceAdapter</
resourceadapter-name>
<config-property-setting
name="ServerUrl">tcp://localhost:61616</config-property-
setting>
<config-property-setting name="UserName">system</config-
property-setting> <config-property-setting
name="Password">manager</config-property-setting>
<nam:workmanager xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2
">
<nam:gbean-link>DefaultWorkManager</nam:gbean-link>
</nam:workmanager>
</resourceadapter-instance>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-
interface>javax.jms.TopicConnectionFactory</connectionfactory-
interface>
<connectiondefinition-instance>
<name>jms/topicConnectionFactory</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.apache.activemq.command.ActiveMQQueue</adminobject-class>
</adminobject>
<adminobject>
<adminobject-interface>javax.jms.Topic</adminobject-interface>
<adminobject-
class>org.apache.activemq.command.ActiveMQTopic</adminobject-class>
<adminobject-instance>
<message-destination-name>topic</message-destination-name>
<config-property-setting name="PhysicalName">topic</
config-property-setting>
</adminobject-instance>
</adminobject>
</connector>
2) I created a dummy J2EE application client with the following
deployment descriptors:
application.xml:
<?xml version="1.0" encoding="UTF-8"?>
<application-client version="5" xmlns="http://java.sun.com/xml/ns/javaee
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application-client_5.xsd
">
<resource-ref>
<res-ref-name>jms/topicConnectionFactory</res-ref-name>
<res-type>javax.jms.TopicConnectionFactory</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<message-destination-ref>
<message-destination-ref-name>topic</message-destination-ref-
name>
<message-destination-type>javax.jms.Topic</message-
destination-type>
<message-destination-usage>Consumes</message-destination-
usage>
<message-destination-link>topic</message-destination-link>
</message-destination-ref>
<message-destination>
<message-destination-name>topic</message-destination-name>
</message-destination>
</application-client>
and geronimo-application-client.xml:
<?xml version="1.0" encoding="UTF-8"?>
<application-client xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0
"
xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"
xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2"
xmlns:security="http://geronimo.apache.org/xml/ns/security-2.0"
xmlns:connector="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2
">
<dep:client-environment>
<dep:moduleId>
<dep:groupId>client</dep:groupId>
<dep:artifactId>jmsClient</dep:artifactId>
<dep:version>1</dep:version>
<dep:type>car</dep:type>
</dep:moduleId>
<dep:dependencies/>
<dep:hidden-classes/>
<dep:non-overridable-classes/>
</dep:client-environment>
<dep:server-environment>
<dep:moduleId>
<dep:groupId>console.jms</dep:groupId>
<dep:artifactId>topic</dep:artifactId>
<dep:version>1.0</dep:version>
<dep:type>rar</dep:type>
</dep:moduleId>
<dep:dependencies/>
<dep:hidden-classes/>
<dep:non-overridable-classes/>
</dep:server-environment>
<resource-ref>
<ref-name>jms/topicConnectionFactory</ref-name>
<resource-link>jms/topicConnectionFactory</resource-link>
</resource-ref>
<message-destination>
<message-destination-name>topic</message-destination-name>
<admin-object-link>topic</admin-object-link>
</message-destination>
<resource>
<external-rar>
<dep:groupId>org.apache.geronimo.configs</dep:groupId>
<dep:artifactId>activemq-broker</dep:artifactId>
<dep:version>2.0.2</dep:version>
<dep:type>car</dep:type>
</external-rar>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2
">
<resourceadapter>
<resourceadapter-instance>
<resourceadapter-name>ActiveMQ RA</resourceadapter-
name>
<config-property-setting name="ServerUrl">tcp://
172.168.29.227:61616</config-property-setting>
<config-property-setting name="UserName">system</
config-property-setting>
<config-property-setting name="Password">manager</
config-property-setting>
<workmanager>
<gbean-link>DefaultWorkManager</gbean-link>
</workmanager>
</resourceadapter-instance>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-
interface>javax.jms.ConnectionFactory</connectionfactory-interface>
<connectiondefinition-instance>
<name>jms/topicConnectionFactory</name>
<implemented-
interface>javax.jms.QueueConnectionFactory</implemented-interface>
<implemented-
interface>javax.jms.TopicConnectionFactory</implemented-interface>
<connectionmanager> <xa-transaction>
<transaction-caching/> </xa-transaction> <single-pool> <max-
size>10</max-size> <blocking-timeout-milliseconds>5000</blocking-
timeout-milliseconds> <match-one/> </single-pool> </
connectionmanager> </connectiondefinition-instance> </connection-
definition> </outbound-resourceadapter>
</resourceadapter>
<adminobject>
<adminobject-interface>javax.jms.Topic</adminobject-interface>
<adminobject-class>org.apache.activemq.command.ActiveMQTopic</
adminobject-class>
<adminobject-instance>
<message-destination-name>bacmTopic</message-destination-name>
<config-property-setting name="PhysicalName">bacmTopic</
config-property-setting>
</adminobject-instance>
</adminobject>
</connector> </resource>
</application-client>
Bascially, what I'm trying to do is deploy the
TopicConnectionFactory and Topic on the server, and use my
application client to look them up.
However, when I try to deploy the application client, I get this
error: "Error: Unable to distribute MyAppClient.jar: Could not
access external rar contents for artifact:
org.apache.geronimo.configs/activemq-broker/2.0.2/car Access is
denied"
I'm not even sure if I'm doing the right thing by trying to deploy
the activemq resource adapter on the client container as well (I
picked up that tip online). If anyone could help me figure out how
to let my application client access the JMS resources, please let me
know!
Thanks a lot,
Stella