diff options
author | Kim van der Riet <kpvdr@apache.org> | 2013-02-28 16:14:30 +0000 |
---|---|---|
committer | Kim van der Riet <kpvdr@apache.org> | 2013-02-28 16:14:30 +0000 |
commit | 9c73ef7a5ac10acd6a50d5d52bd721fc2faa5919 (patch) | |
tree | 2a890e1df09e5b896a9b4168a7b22648f559a1f2 /java/jca | |
parent | 172d9b2a16cfb817bbe632d050acba7e31401cd2 (diff) | |
download | qpid-python-asyncstore.tar.gz |
Update from trunk r1375509 through r1450773asyncstore
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/asyncstore@1451244 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/jca')
-rw-r--r-- | java/jca/README-JBOSS-EAP6.txt | 183 | ||||
-rw-r--r-- | java/jca/README-JBOSS.txt | 26 | ||||
-rw-r--r-- | java/jca/build.xml | 25 | ||||
-rw-r--r-- | java/jca/rar/src/main/resources/META-INF/jboss-ra.xml (renamed from java/jca/src/main/resources/META-INF/jboss-ra.xml) | 0 | ||||
-rwxr-xr-x | java/jca/rar/src/main/resources/META-INF/ra.xml (renamed from java/jca/src/main/resources/META-INF/ra.xml) | 0 | ||||
-rw-r--r-- | java/jca/src/main/java/org/apache/qpid/ra/admin/QpidConnectionFactoryProxy.java | 73 |
6 files changed, 276 insertions, 31 deletions
diff --git a/java/jca/README-JBOSS-EAP6.txt b/java/jca/README-JBOSS-EAP6.txt new file mode 100644 index 0000000000..219bfb6468 --- /dev/null +++ b/java/jca/README-JBOSS-EAP6.txt @@ -0,0 +1,183 @@ +Qpid JCA Resource Adapter + +JBoss EAP 6.x Installation and Configuration Instructions + +Overview +======== +The Qpid Resource Adapter is a JCA 1.5 compliant resource adapter that allows +for JEE integration between EE applications and AMQP 0.10 message brokers. + +The adapter provides both outbound and inbound connectivity and +exposes a variety of options to fine tune your messaging applications. +Currently the adapter only supports C++ based brokers and has only been tested with Apache Qpid C++ broker. + +The following document explains how to configure the resource adapter for deployment in JBoss EAP 6.x. + +Deployment +========== +To deploy the Qpid JCA adapter in the JBoss EAP 6 environment, copy the qpid-ra-<version>.rar file +to your JBoss deployment directory. By default this can be found at + +JBOSS_ROOT/<server-config>/deployments + +where JBOSS_ROOT denotes the root directory of your JBoss EAP 6.x installation and <server-config> denotes the +particular server configuration for your applicationd development. Currently, JBoss EAP 6 provides two configurations +by default standalone and domain. This documentation assumes the standalone server configuration, though the process +to configure and deploy the Qpid JCA adapter is largely the same between the two. Assuming the standalone configuration +the deployment location above would be + +JBOSS_ROOT/standalone/deployments + +Note, as opposed to prior versions of EAP, copying a RAR file to the deployment location does not automatically +start and deploy the adapter. A separate manual configuration step is required which is explained in the following +section. + +Configuration +============= +The EAP 6.x environment uses an XML based configuration scheme that is fundamentally different than prior versions +of EAP. As previously mentioned, EAP 6.x provides two server configuration types, standalone and domain. Each come with +a different set of configuration files that are tailored to varying types of server environments. Configuration locations +can be found at + +JBOSS_ROOT/<server-config>/configuration + +The varying XML files are named + +<server-config>-full.xml +<server-config>-full-ha.xml +<server-config>.xml + +where each XML file denotes the capabilites of the server. This document assumes a minimal server configuration in +the standalone server environment. While each configuration file provides a variety of options, this document is +only concerned with the configuration of the JCA adapter. Please consult the EAP 6.x documentation for other +options and configuration scenarios. + +The EAP 6.x infrastructure is built upon the notion of varying subsystem where subsystem generally corresponds +to one particular piece of functionality. Typical examples are EJB, JAXR etc. In order to configure the Qpid JCA adapter +we need to modify the ejb and resource-adapters subsystems in order to tell EAP 6.x about our RAR deployment as well +as the RAR that will provide JMS provider functionality. + +Note, JCA in EAP 6.x involves two subsystems, jca and resource-adapters. The former subsytem provides capabilities for +all JCA deployments (the JCA runtime environment) where the resource-adapters subsystem is particular to an invidual JCA +deployment. Here we are only concerned with the latter. Please consult the EAP 6.x documentation for more general JCA +configuration options as well as other subsystems. + +Each subsystem is configured in an XML fragment and is versioned separately. Subsystem versions will change over +time so this document may not reflect the most current version, but the Qpid JCA configuration options remain +unchanged across subsystem regardless of version or release date. + +The following XML fragment replaces the default messaging provider in the EAP 6.x environment + + <subsystem xmlns="urn:jboss:domain:ejb3:1.2"> + <session-bean> + <stateless> + <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/> + </stateless> + <stateful default-access-timeout="5000" cache-ref="simple"/> + <singleton default-access-timeout="5000"/> + </session-bean> + <mdb> + <resource-adapter-ref resource-adapter-name="qpid-ra-<rar-version>.rar"/> + <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> + </mdb> + <pools> + <bean-instance-pools> + <strict-max-pool name="slsb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> + <strict-max-pool name="mdb-strict-max-pool" max-pool-size="20" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> + </bean-instance-pools> + </pools> + <caches> + <cache name="simple" aliases="NoPassivationCache"/> + <cache name="passivating" passivation-store-ref="file" aliases="SimpleStatefulCache"/> + </caches> + <passivation-stores> + <file-passivation-store name="file"/> + </passivation-stores> + <async thread-pool-name="default"/> + <timer-service thread-pool-name="default"> + <data-store path="timer-service-data" relative-to="jboss.server.data.dir"/> + </timer-service> + <remote connector-ref="remoting-connector" thread-pool-name="default"/> + <thread-pools> + <thread-pool name="default"> + <max-threads count="10"/> + <keepalive-time time="100" unit="milliseconds"/> + </thread-pool> + </thread-pools> + </subsystem> + +The only real lines we are concerned with are + + <mdb> + <resource-adapter-ref resource-adapter-name="qpid-ra-<rar-version>.rar"/> + <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/> + </mdb> + +however, the complete fragment is provided for clarity. + +The following XML fragment provides a minimal example configuration in the EAP 6 environment. Here we are configuring +an XA aware ManagedConnectionFactory and two JMS destinations (queue and topic) + + <subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"> + <resource-adapters> + <resource-adapter> + <archive> + qpid-ra-<rar-version>.rar + </archive> + <transaction-support> + XATransaction + </transaction-support> + <config-property name="connectionURL"> + amqp://anonymous:passwd@client/test?brokerlist='tcp://localhost?sasl_mechs='PLAIN'' + </config-property> + <config-property name="TransactionManagerLocatorClass"> + org.apache.qpid.ra.tm.JBoss7TransactionManagerLocator + </config-property> + <config-property name="TransactionManagerLocatorMethod"> + getTm + </config-property> + <connection-definitions> + <connection-definition class-name="org.apache.qpid.ra.QpidRAManagedConnectionFactory" jndi-name="QpidJMSXA" pool-name="QpidJMSXA"> + <config-property name="connectionURL"> + amqp://anonymous:passwd@client/test?brokerlist='tcp://localhost?sasl_mechs='PLAIN'' + </config-property> + <config-property name="SessionDefaultType"> + javax.jms.Queue + </config-property> + </connection-definition> + </connection-definitions> + <admin-objects> + <admin-object class-name="org.apache.qpid.ra.admin.QpidTopicImpl" jndi-name="java:jboss/exported/GoodByeTopic" use-java-context="false" pool-name="GoodByeTopic"> + <config-property name="DestinationAddress"> + amq.topic/hello.Topic + </config-property> + </admin-object> + <admin-object class-name="org.apache.qpid.ra.admin.QpidQueueImpl" jndi-name="java:jboss/exported/HelloQueue" use-java-context="false" pool-name="HelloQueue"> + <config-property name="DestinationAddress"> + hello.Queue;{create:always, node:{type:queue, x-declare:{auto-delete:true}}} + </config-property> + </admin-object> + </admin-objects> + </resource-adapter> + </resource-adapters> + </subsystem> + + + +Note, while this document assumes that you are modifying the standalone.xml file directly, an alternative to this approach would be +to make a copy of the file, apply the modifications above and start the EAP instance with the new configuration + +JBOSS_HOME/bin/standalone.sh -c your-modified-config.xml + +Regardless of the approach that you use, once the modifications have been made you can start your EAP 6.x instance and the Qpid JCA +adapter will be deployed and ready for use. If property deployed and configured, you should see something in the log files or console +resembling the following: + +INFO [org.apache.qpid.ra.QpidResourceAdapter] (MSC service thread 1-4) Qpid resource adapter started + + +Notes +===== +While the differences between the EAP 5.x and 6.x environments may appear to be dramatic, the configuration options and functionality of the Qpid +JCA adapter are not. The README.txt file outlines general configuration options that remain unchanged between the respective EAP environments. + diff --git a/java/jca/README-JBOSS.txt b/java/jca/README-JBOSS.txt index 77bf91e6dd..e88643e0f2 100644 --- a/java/jca/README-JBOSS.txt +++ b/java/jca/README-JBOSS.txt @@ -61,7 +61,7 @@ XA ConnectionFactory <xa-transaction/> <rar-name>qpid-ra-<ra-version>.rar</rar-name> <connection-definition>org.apache.qpid.ra.QpidRAConnectionFactory</connection-definition> - <config-property name="connectionURL">amqp://guest:guest@/test?brokerlist='tcp://localhost:5672?sasl_mechs='ANONYMOUS''</config-property> + <config-property name="ConnectionURL">amqp://guest:guest@/test?brokerlist='tcp://localhost:5672?sasl_mechs='PLAIN''</config-property> <max-pool-size>20</max-pool-size> </tx-connection-factory> @@ -79,11 +79,11 @@ Local ConnectionFactory ======================= <tx-connection-factory> <jndi-name>QpidJMS</jndi-name> - <rar-name>qpid-ra-0.10.rar</rar-name> + <rar-name>qpid-ra-<ra-version>.rar</rar-name> <local-transaction/> - <config-property name="useLocalTx" type="java.lang.Boolean">true</config-property> - <config-property name="connectionURL">amqp://anonymous:@client/test?brokerlist='tcp://localhost:5672?sasl_mechs='ANONYMOUS''</config-property> - <connection-definition>org.apache.qpid.ra.QpidRAConnectionFactory</connection-definition> + <config-property name="UseLocalTx" type="java.lang.Boolean">true</config-property> + <config-property name="ConnectionURL">amqp://anonymous:@client/test?brokerlist='tcp://localhost:5672?sasl_mechs='PLAIN'' + </config-property> <connection-definition>org.apache.qpid.ra.QpidRAConnectionFactory</connection-definition> <max-pool-size>20</max-pool-size> </tx-connection-factory> @@ -100,11 +100,10 @@ provides two such objects <mbean code="org.jboss.resource.deployment.AdminObject" name="qpid.jca:name=HelloQueue"> <attribute name="JNDIName">Hello</attribute> - <depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='qpid-ra-0.10.rar'</depends> + <depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='qpid-ra-<ra-version>.rar'</depends> <attribute name="Type">javax.jms.Destination</attribute> <attribute name="Properties"> - destinationType=QUEUE - destinationAddress=amq.direct + DestinationAddress=amq.direct </attribute> </mbean> @@ -113,16 +112,15 @@ The above XML defines a JMS Queue which is bound into JNDI as queue/HelloQueue This destination can be retrieved from JNDI and be used for the consumption or production of messages. The desinationAddress property -can be customized for your environment. Please see the Qpid Java Client documentation for specific configuration options. +can be customized for your environment. Please see the Qpid Java Client documentation for specific configuration options. <mbean code="org.jboss.resource.deployment.AdminObject" name="qpid.jca:name=HelloTopic"> <attribute name="JNDIName">HelloTopic</attribute> - <depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='qpid-ra-0.10.rar'</depends> + <depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='qpid-ra-<ra-version>.rar'</depends> <attribute name="Type">javax.jms.Destination</attribute> <attribute name="Properties"> - destinationType=TOPIC - destinationAddress=amq.topic + DestinationAddress=amq.topic </attribute> </mbean> @@ -138,10 +136,10 @@ can be customized for your environment. Please see the Qpid Java Client document <mbean code="org.jboss.resource.deployment.AdminObject" name="qpid.jca:name=QpidConnectionFactory"> <attribute name="JNDIName">QpidConnectionFactory</attribute> - <depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='qpid-ra-0.10.rar'</depends> + <depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='qpid-ra-<ra-version>.rar'</depends> <attribute name="Type">javax.jms.ConnectionFactory</attribute> <attribute name="Properties"> - connectionURL=amqp://anonymous:@client/test?brokerlist='tcp://localhost:5672?sasl_mechs='ANONYMOUS'' + ConnectionURL=amqp://anonymous:@client/test?brokerlist='tcp://localhost:5672?sasl_mechs='PLAIN'' </attribute> </mbean> diff --git a/java/jca/build.xml b/java/jca/build.xml index 934514aa52..42a19ff83a 100644 --- a/java/jca/build.xml +++ b/java/jca/build.xml @@ -22,18 +22,26 @@ <property name="module.depends" value="common client"/> <property name="module.name" value="jca"/> + <!-- Hack to make the renamed module jars available on the module test classpath --> + <property name="module.test.depends" value="ra ra/tests"/> + + <!-- Import common.xml to make the properties it defines available before importing module.xml --> + <import file="../common.xml"/> + + <!-- Override the standard output jar names before importing module.xml, to produce + artifacts that use ra in the name instead of jca like the module should --> + <property name="module.test.jar" value="${build.lib}/${project.name}-ra-tests-${project.version}.jar"/> + <property name="module.jar" value="${build.lib}/${project.name}-ra-${project.version}.jar"/> + <property name="module.source.jar" value="${build.lib}/${project.name}-ra-${project.version}-sources.jar"/> <import file="../module.xml"/> <property name="module.rar" value="${build.lib}/${project.name}-ra-${project.version}.rar"/> + <property name="rar.resources" value="rar/src/main/resources"/> - <property name="module.resources" value="src/main/resources"/> - - <target name="rar" depends="jar"> - <!--Note we need to do this as we need to keep the ra in the name of the artificats but we can't override the module.jar property which is based on the directory name--> - <move file="${build.lib}/${project.name}-${module.name}-${project.version}.jar" tofile="${build.lib}/${project.name}-ra-${project.version}.jar"/> + <target name="rar" depends="jar" description="creates a rar file containing the module jar, client jars, etc"> <jar destfile="${module.rar}"> - <fileset dir="${module.resources}"> + <fileset dir="${rar.resources}"> <include name="**/*.xml"/> </fileset> <fileset dir="${build.lib}"> @@ -67,6 +75,9 @@ <target name="examples" depends="example-properties-file, example-jars"/> - <target name="build" depends="rar, examples"/> + <target name="postbuild" depends="rar, examples"/> + <!-- Override module.xml 'libs' target to avoid copying the jar files dependencies + into the 'build/lib' dir, since they will be supplied by the app server --> + <target name="libs"/> </project> diff --git a/java/jca/src/main/resources/META-INF/jboss-ra.xml b/java/jca/rar/src/main/resources/META-INF/jboss-ra.xml index f459b1efc1..f459b1efc1 100644 --- a/java/jca/src/main/resources/META-INF/jboss-ra.xml +++ b/java/jca/rar/src/main/resources/META-INF/jboss-ra.xml diff --git a/java/jca/src/main/resources/META-INF/ra.xml b/java/jca/rar/src/main/resources/META-INF/ra.xml index a9374f52d7..a9374f52d7 100755 --- a/java/jca/src/main/resources/META-INF/ra.xml +++ b/java/jca/rar/src/main/resources/META-INF/ra.xml diff --git a/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidConnectionFactoryProxy.java b/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidConnectionFactoryProxy.java index a948948d6a..d7ca29e04a 100644 --- a/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidConnectionFactoryProxy.java +++ b/java/jca/src/main/java/org/apache/qpid/ra/admin/QpidConnectionFactoryProxy.java @@ -27,13 +27,17 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import java.io.Serializable; -import javax.jms.ConnectionFactory; import javax.jms.Connection; +import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.naming.NamingException; +import javax.jms.QueueConnection; +import javax.jms.QueueConnectionFactory; import javax.naming.Reference; import javax.naming.Referenceable; import javax.naming.spi.ObjectFactory; +import javax.jms.TopicConnection; +import javax.jms.TopicConnectionFactory; import org.apache.qpid.client.AMQConnectionFactory; @@ -44,7 +48,7 @@ import org.slf4j.LoggerFactory; * * */ -public class QpidConnectionFactoryProxy implements Externalizable, Referenceable, ConnectionFactory, Serializable +public class QpidConnectionFactoryProxy implements QueueConnectionFactory, TopicConnectionFactory, Externalizable, Referenceable, Serializable { private static final Logger _log = LoggerFactory.getLogger(QpidDestinationProxy.class); @@ -100,13 +104,6 @@ public class QpidConnectionFactoryProxy implements Externalizable, Referenceable try { _delegate = new AMQConnectionFactory(getConnectionURL()); - /* - QpidResourceAdapter ra = new QpidResourceAdapter(); - QpidRAManagedConnectionFactory mcf = new QpidRAManagedConnectionFactory(); - mcf.setResourceAdapter(ra); - mcf.setConnectionURL(getConnectionURL()); - delegate = new QpidRAConnectionFactoryImpl(mcf, null); - */ return ((Referenceable) _delegate).getReference(); } catch(Exception e) @@ -162,7 +159,63 @@ public class QpidConnectionFactoryProxy implements Externalizable, Referenceable */ public Connection createConnection(final String userName, final String password) throws JMSException { - return _delegate.createConnection(userName, password); + try + { + if(_delegate == null) + { + getReference(); + } + + return _delegate.createConnection(userName, password); + } + catch(Exception e) + { + throw new JMSException(e.getMessage()); + } + } + + /** + * Create a queue connection + * @return The queue connection + * @exception JMSException Thrown if the operation fails + */ + public QueueConnection createQueueConnection() throws JMSException + { + return (QueueConnection)createConnection(); + } + + /** + * Create a queue connection + * @param userName The user name + * @param password The password + * @return The connection + * @exception JMSException Thrown if the operation fails + */ + public QueueConnection createQueueConnection(final String userName, final String password) throws JMSException + { + return (QueueConnection)createConnection(userName, password); + } + + /** + * Create a topic connection + * @return The topic connection + * @exception JMSException Thrown if the operation fails + */ + public TopicConnection createTopicConnection() throws JMSException + { + return (TopicConnection)createConnection(); + } + + /** + * Create a topic connection + * @param userName The user name + * @param password The password + * @return The topic connection + * @exception JMSException Thrown if the operation fails + */ + public TopicConnection createTopicConnection(final String userName, final String password) throws JMSException + { + return (TopicConnection)createConnection(userName, password); } } |