| Title: Changing JMS Implementations |
| Notice: Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| . |
| http://www.apache.org/licenses/LICENSE-2.0 |
| . |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| ActiveMQ is the default JMS provider in Apache TomEE and OpenEJB. |
| |
| Changing JMS implementation is as simple as using that implementation's Java EE Connector. The connector which will be a `.rar` file should be bundled with the application in a `.ear` |
| file. All JMS usage in that `.ear` will favor the JMS ConnectionFactory and Topic and Queue implementations |
| that are configured in the `.rar` file rather than ActiveMQ. |
| |
| If the JMS implementation does not have a `.rar` file, there are still some options for wiring in an alternate implementation. |
| |
| # Generic JMS Resource Adapter |
| |
| If the JMS implementation does not have a Resource Archive (`.rar` file) that defines a compliant Resource Adapter, the [Generic Resource Adapter for JMS](http://genericjmsra.java.net/) should work fine. |
| |
| To use this Adapter in TomEE or OpenEJB you'll need to create a `service-jar.xml` file and include that in a jar file and add it to the `<tomee.home>/lib/` directory. |
| Then you can declare `ConnectionFactory`, `Topic`, and `Queue` and more via the `tomee.xml` file. |
| |
| The one below should be considered boiler plate. Updating it to contain some useful default values for your JMS implementation would be good. These values can be overridden in the `tomee.xml` or `openejb.xml` |
| |
| Let's say that the following file lives in the jar at `META-INF/org.superbiz/service-jar.xml` |
| |
| <?xml version="1.0" encoding="UTF-8"?> |
| <ServiceJar> |
| <ServiceProvider |
| id="genericra" |
| service="Resource" |
| types="GenericJMSRA" |
| class-name="com.sun.genericra.GenericJMSRA"> |
| UserName |
| Password |
| ProviderIntegrationMode |
| ConnectionFactoryClassName |
| QueueConnectionFactoryClassName |
| TopicConnectionFactoryClassName |
| XAConnectionFactoryClassName |
| XAQueueConnectionFactoryClassName |
| XATopicConnectionFactoryClassName |
| UnifiedDestinationClassName |
| TopicClassName |
| QueueClassName |
| SupportsXA |
| ConnectionFactoryProperties |
| JndiProperties |
| CommonSetterMethodName |
| RMPolicy |
| LogLevel |
| DeliveryType |
| UseFirstXAForRedelivery |
| </ServiceProvider> |
| |
| <ServiceProvider |
| id="ConnectionFactory" |
| service="Resource" |
| types="javax.jms.ConnectionFactory, javax.jms.QueueConnectionFactory, javax.jms.TopicConnectionFactory, QueueConnectionFactory, TopicConnectionFactory" |
| class-name="com.sun.genericra.outbound.ManagedJMSConnectionFactory"> |
| ConnectionFactoryJndiName |
| ClientId |
| ConnectionValidationEnabled |
| ResourceAdapter |
| </ServiceProvider> |
| |
| <ServiceProvider |
| id="Queue" |
| service="Resource" |
| types="javax.jms.Queue, Queue" |
| class-name="com.sun.genericra.outbound.QueueProxy"> |
| DestinationJndiName |
| ResourceAdapter |
| UserName |
| Password |
| JndiProperties |
| QueueClassName |
| </ServiceProvider> |
| |
| <ServiceProvider |
| id="Topic" |
| service="Resource" |
| types="javax.jms.Topic, Topic" |
| class-name="com.sun.genericra.outbound.TopicProxy"> |
| DestinationJndiName |
| ResourceAdapter |
| UserName |
| Password |
| JndiProperties |
| TopicClassName |
| </ServiceProvider> |
| </ServiceJar> |
| |
| It is strongly recommended to not leave the values in the service-jar.xml file blank as shown above. It is |
| possible to setup several sets of defaults in a `service-jar.xml` or via several `service-jar.xml` files. |
| |
| Once this file is packed in a jar and added to the `<tomee.home>/lib` or `<openejb.home>/lib` directory, you can |
| then declare and configure "instances" of these things in your `tomee.xml` or `openejb.xml` config file as follows: |
| |
| <Resource id="My Generic Adapter" type="GenericJMSRA" provider="org.superbiz:genericra"> |
| AdapterProperty1 PropertyValue1 |
| AdapterProperty2 PropertyValue2 |
| ... |
| </Resource> |
| |
| Or in properties like so: |
| |
| myGenericAdapter = new://Resource?type=GenericJMSRA&provider=org.superbiz:genericra |
| myGenericAdapter.AdapterProperty1 = PropertyValue1 |
| myGenericAdapter.AdapterProperty2 = PropertyValue2 |
| |
| This is basically the same as all configuration in TomEE/OpenEJB, but with the addition that you must |
| specify the `provider` attribute so the server knows where to look for the `service-jar.xml` file that |
| defines the resource and all its defaults. |
| |
| In this example: |
| |
| - the file is `META-INF/org.superbiz/service-jar.xml` |
| - so the `provider` attribute is `org.superbiz` |
| |
| You can use whatever prefix you like for the `provider` id, though for obvious reasons we'd advise not using `org.apache.openejb` or `org.apache.tomee` in the prefix. |
| |