Migration Guide
Migrating to Red Hat JBoss A-MQ 6.2
Copyright © 2011-2015 Red Hat, Inc. and/or its affiliates.
Abstract
Chapter 1. Migration Overview
Abstract
1.1. Upgraded Components
Version upgrades
Table 1.1. Component Versions
| Component | Version for 6.1 | Version for 6.2 |
|---|---|---|
| Apache ActiveMQ | 5.9.x | 5.11.0 |
| Apache Karaf | 2.3.x | 2.4.0 |
| Fabric8 (was Fuse Fabric) | 1.0.0 | 1.2.0 |
| Spring framework | 3.2.x | 3.2.x |
Apache ActiveMQ changes
1.2. New Role-Based Access Control
Overview
Standardized roles
Table 1.2. Standard Roles for Access Control
| Roles | Description |
|---|---|
Monitor, Operator, Maintainer | Grants read-only access to the container. |
Deployer, Auditor | Grants read-write access at the appropriate level for ordinary users, who want to deploy and run applications. But blocks access to sensitive container configuration settings. |
Administrator, SuperUser | Grants unrestricted access to the container. |
Migrating user data for RBAC
Reference
1.3. Security Changes
Overriding the default JAAS realm in Fabric
ZookeeperLoginModule JAAS module (which is installed by default in a Fabric container) has changed to 99, and the name of the default realm is karaf. In previous releases, the rank of ZookeeperLoginModule realm was just 1.
karaf in the context of Fabric, you must define a new realm named karaf, with a rank attribute that is greater than or equal to 100.
Enabling LDAP authentication in a Fabric
rank attribute of the jaas:config element in the JAAS realm configuration file must be increased to at least 100 (recommended is 200). For details, see section "Procedure for a Fabric" in "Security Guide".
1.4. Migrating Spring-DM to Blueprint
Spring-DM is now deprecated
Prefer Blueprint over Spring-DM
How to tell whether your code uses Spring-DM
http://www.springframework.org/schema/osgi
How to migrate Spring-DM to Blueprint
- In the standard Maven project layout, Blueprint XML files are stored under the following directory:
src/main/resources/OSGI-INF/blueprint
If it does not already exist, create this directory under your Maven project. - Move the relevant Spring XML file from the Spring directory,
src/main/resources/META-INF/spring, to the Blueprint directory,src/main/resources/OSGI-INF/blueprint. - Edit the Spring XML file in order to convert it to a Blueprint XML file. For example, a typical Spring XML file using Spring-DM has the following outline:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:osgi="http://www.springframework.org/schema/osgi"> ... <osgi:reference id="osgiPlatformTransactionManager" interface="org.springframework.transaction.PlatformTransactionManager"/> <osgi:reference id="osgiJtaTransactionManager" interface="javax.transaction.TransactionManager"/> ... </beans>
You can convert this Spring XML file to a Blueprint XML file by replacing thebeansroot element by a rootblueprintroot element, and replacing Spring-DMosgi:referenceelements by Blueprintreferenceelements. For example:<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ... <reference id="osgiPlatformTransactionManager" interface="org.springframework.transaction.PlatformTransactionManager"/> <reference id="osgiJtaTransactionManager" interface="javax.transaction.TransactionManager"/> ... </blueprint>
1.5. Migrating Maven Projects
Overview
version elements on each Maven dependency, all you need to do is to import the latest JBoss A-MQ BOM, which defines default versions for all of the dependencies provided by JBoss A-MQ.
JBos A-MQ BOM
Current version of the JBos A-MQ BOM
pom.xml files from the quickstarts examples. For example, in the InstallDir/quickstarts/eip/pom.xml file, you can find a line that defines the JBoss A-MQ BOM version, as follows:
<project ...>
...
<properties>
...
<!-- the version of the JBoss A-MQ BOM, defining all the dependency versions -->
<jboss.fuse.bom.version>6.2.1.redhat-084</jboss.fuse.bom.version>
</properties>
...
</project>How to migrate Maven dependencies using the JBos A-MQ BOM
pom.xml file for your project and edit it as follows:
- Define the JBoss A-MQ BOM version as a property in your
pom.xmlfile, using the current BOM version. For example:<project ...> ... <properties> ... <jboss.fuse.bom.version>6.2.1.redhat-084</jboss.fuse.bom.version> </properties> ... </project> - Reference the JBoss A-MQ BOM parent POM in a
dependencyManagementelement, so that it defines default versions for the artifacts provided by JBoss A-MQ. Add the followingdependencyManagementelement to yourpom.xmlfile:<project ...> ... <dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.fuse.bom</groupId> <artifactId>jboss-fuse-parent</artifactId> <version>${jboss.fuse.bom.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ... </project> - Now delete all of the
versionelements in your JBoss A-MQ dependencies. All of the versions defined in the JBoss A-MQ BOM will be applied automatically to your dependencies (through the Maven dependency management mechanism). For example, if you already had some Apache Camel dependencies, as follows:<dependencies> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <version>2.15.1.redhat-621084</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-blueprint</artifactId> <version>2.15.1.redhat-621084</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jetty</artifactId> <version>2.15.1.redhat-621084</version> </dependency> ... </dependencies>You would delete the version elements, so that the dependencies are specified as follows:<dependencies> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-blueprint</artifactId> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jetty</artifactId> </dependency> ... </dependencies> - In future, when you migrate to a later version of JBoss A-MQ, all that you need to do to upgrade your
pom.xmlfile is to edit thejboss.fuse.bom.versionproperty, so that it references the new version of the JBoss A-MQ BOM.
Chapter 2. Deprecated and Removed Features
bin/deletefabric8 script is deprecated
bin/deletefabric8 script is deprecated and will be removed in a future release.
Spring Dynamic Modules (Spring-DM) is deprecated
ServiceMix Maven archetypes not supported
groupId of org.apache.servicemix.tooling) are no longer supported and are not available in 6.2. You can use the fabric8 Maven archetypes instead (which provide similar functionality). The fabric8 archetypes have a groupId of io.fabric8.archetypes and the following fabric8 archetypes are available:
karaf-camel-amq-archetype karaf-camel-cbr-archetype karaf-camel-cxf-code-first-archetype karaf-camel-cxf-contract-first-archetype karaf-camel-dozer-wiki-archetype karaf-camel-drools-archetype karaf-camel-eips-archetype karaf-camel-errorhandler-archetype karaf-camel-log-archetype karaf-camel-log-wiki-archetype karaf-camel-webservice-archetype karaf-rest-archetype karaf-secure-rest-archetype karaf-secure-soap-archetype karaf-soap-archetype
Fuse Application Bundles
Chapter 3. Console Changes
fabric:mq-create command
--portsto--port--networksto--network
fabric:profile-create command
--parentsto--parent
fabric:profile-edit command
--repositoriesto--repository--featuresto--feature--libsto--lib--bundlesto--bundle
fabric:export and fabric:import commands
fabric:export and fabric:import commands have been removed in JBoss A-MQ 6.2, and are now replaced by the corresponding zk:export and zk:import commands. To gain access to these Zookeeper commands, you must install the fabric-zookeeper-commands feature.
zk:export and zk:import commands interact purely with the Zookeeper registry. For example, you cannot use these commands to export or import Fabric profile data, which is now stored in the container's Git repository.
Chapter 4. Apache ActiveMQ Issues
Abstract
4.1. Key Migration Issues
JMS ObjectMessage serialization
javax.jms.ObjectMessage type), in JBoss A-MQ 6.2.1 you must now set the org.apache.activemq.SERIALIZABLE_PACKAGES JVM property. The org.apache.activemq.SERIALIZABLE_PACKAGES property must be set to the list of Java packages that are allowed to be serialized.
InstallDir/etc/system.properties file, as follows:
org.apache.activemq.SERIALIZABLE_PACKAGES="java.lang,java.util,org.apache.activemq,org.fusesource.hawtbuf,com.thoughtworks.xstream.mapper,com.mycompany.myapp"
Caused by: javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: Forbidden class com.sundar.verify.MyBean! This class is not allowed to be serialized. Add package with 'org.apache.activemq.SERIALIZABLE_PACKAGES' system property.
4.2. Migrating Clients
Migrating Apache ActiveMQ clients
4.3. New Features
ActiveMQ 5.10.0
- Hardened MQTT support
- Hardened AMQP support
- Hardened LevelDB store
- Improved RAR/JCA adapter
- Improved Runtime configuration plugin
ActiveMQ 5.11.0
- Destination import/export for lock down mode. Use the
destinationsPluginon the broker to import/export broker destinations to s a specified location. For example:<plugins> <destinationsPlugin location="/workspace/destinations"/> </plugins> - Dynamic Camel root loading. Allows routes to modified on the fly without restarting the broker. To take advantage of this feature, you must define a
camelroutesBrokerPluginplug-in in the broker configuration, as follows:<plugins> <camelroutesBrokerPlugin routesFile="routes.xml" /> </plugins>Where theroutes.xmlfile must be in the same location as the broker configuration file. - MQTT: QOS2 mapped to virtual topics. Can be enabled using the transport option,
?transport.subscriptionStrategy="mqtt-virtual-topic-subscriptions". - Start scripts simplification
- Recover scheduler database option
4.4. Dependency Upgrades
Spring framework
Apache Karaf
4.5. API Changes
JMS streams
org.apache.activemq.ActiveMQInputStreamand ActiveMQOutputStream classes are deprecated, as are the ActiveMQConnection.createInputStream and ActiveMQConnection.createOutputStream methods.
Camel ActiveMQ component
org.apache.activemq.camel.converter.IdentityMessageReuseConverter class from the Camel ActiveMQ component (activemq-camel).
Chapter 5. Migrating JBoss A-MQ from 6.2.0 to 6.2.1 on Karaf
Abstract
5.1. Patching a Standalone Karaf Container from 6.2.0 to 6.2.1
Overview
New patching mechanism
- Install the patch management enablement pack for 6.2.0, which replaces the existing patch mechanism with the new patching mechanism. In all other respects, the container remains at version 6.2.0.
- Install the 6.2.1 patch in the standalone container using the new patch mechanism. After this step, the container is upgraded fully to version 6.2.1.
Initial system
jboss-a-mq-6.2.0.redhat-133.zip). This can be a container instance that you have customized in various ways, by adding application bundles and features, or even by editing configuration files under the etc/ directory.
Download the required packages
patch-management-for-amq-620-6.2.1.redhat-084.zip- Available as the download file, Red Hat JBoss A-MQ 6.2.1 on Karaf Update Installer.
jboss-a-mq-6.2.1.redhat-084.zip- Available as the download file, Red Hat JBoss A-MQ 6.2.1.
Applying the 6.2.1 patch to a standalone container
- Make a full backup of your JBoss A-MQ 6.2.0 installation before attempting to apply the patch. In particular, if you made any custom changes to the
etc/org.ops4j.pax.logging.cfgfile, make sure that you back it up. The patch process for 6.2.1 will over-write this file and you will need to re-apply your changes to it. - Install the patch management enablement pack for 6.2.0,
patch-management-for-amq-620-6.2.1.redhat-084.zip, on top of your 6.2.0 installation. Use an archive utility to extract the contents on top of the existing 6.2.0 installation.The patch management enablement pack contains the following files:patches/jboss-a-mq-6.2.0.redhat-133-baseline.zip system/io/fabric8/patch/patch-commands/1.2.0.redhat-621084/patch-commands-1.2.0.redhat-621084.jar system/io/fabric8/patch/patch-core/1.2.0.redhat-621084/patch-core-1.2.0.redhat-621084.jar system/io/fabric8/patch/patch-features/1.2.0.redhat-621084/patch-features-1.2.0.redhat-621084-features.xml system/io/fabric8/patch/patch-management/1.2.0.redhat-621084/patch-management-1.2.0.redhat-621084.jar
NoteIt does not matter whether the container is running or not when you extract these files. - Start the container, if it is not already running.
- Enable the new patch management commands in the old 6.2.0 container, by entering the following console commands:
features:uninstall patch features:removeurl mvn:io.fabric8.patch/patch-features/1.2.0.redhat-133/xml/features features:addurl mvn:io.fabric8.patch/patch-features/1.2.0.redhat-621084/xml/features features:install patch
The effect of this is to replace the old patch commands by the new patch commands in the existing 6.2.0 container, thereby bootstrapping the new patch mechanism (which is needed to install the 6.2.1 patch). - Before proceeding to the next phase, verify that the new patch commands have been successfully installed. Enter the following command:
JBossFuse:karaf@root> list -s -t 0 | grep -i patch [ 265] [Active ] [ ] [ ] [ 2] io.fabric8.patch.patch-management (1.2.0.redhat-621084) [ 266] [Active ] [ ] [ ] [ 80] io.fabric8.patch.patch-core (1.2.0.redhat-621084) [ 267] [Active ] [ ] [ ] [ 80] io.fabric8.patch.patch-commands (1.2.0.redhat-621084)
Check that the preceding bundles and only these bundles are output by this command. - Add the 6.2.1 patch to the container's environment using the patch:add command (remembering to customize the path to the patch file), as follows:
JBossA-MQ:karaf@root> patch:add file:///path/to/jboss-a-mq-6.2.1.redhat-084.zip [name] [installed] [description] jboss-a-mq-6.2.1.redhat-084 false jboss-a-mq-6.2.1.redhat-084
NoteIn this case, the patch file is the full distribution of JBoss A-MQ 6.2.1. Under the new patching mechanism, the full distribution file has a dual purpose: you can extract the archive directly to create a fresh 6.2.1 distribution; or you can add the file as a patch to migrate an existing 6.2.0 installation to 6.2.1. - Simulate installing the patch using the patch:simulate command.This will generate a log of the changes that will be made to the container when the patch is installed, but will not make any actual changes to the container. Review the simulation log to understand the changes that will be made to the container.
- Apply the patch to the container using the patch:install command:
patch:install jboss-a-mq-6.2.1.redhat-084
NoteMake sure that the container has fully started before you run patch:install. - After installing the patch, the container shuts down automatically. At this point, the
data/cachedirectory is empty, but it will be repopulated when the container starts up again.Note(Windows O/S only) At this point, it is likely that thebin\fuse.batscript (which calls thebin\karaf.batscript) will output an error as it exits. This error can be safely ignored. This happens because, on Windows, thebin\karaf.batscript continues to execute even after it has been overwritten by thepatch:installcommand (whereas on Linux or UNIX, the corresponding script process exits immediately). - Open the
bin/setenvfile (bin\setenv.baton Windows O/S) in a text editor and check the value of theJAVA_MAX_MEMenvironment variable, which must be set to at least1024M. Increase the setting, if necessary.NoteThe JBoss A-MQ 6.2.1 rollup patch tries to update theJAVA_MAX_MEMsetting to the correct value. But if you have already customized thesetenvfile yourself, the patching mechanism preserves your custom settings. This could result in theJAVA_MAX_MEMenvironment variable having a value that is too low. - The JBoss A-MQ 6.2.1 rollup patch over-writes the contents of the
etc/org.ops4j.pax.logging.cfgconfiguration file (in order fix a security issue). If you previously made any customizations to this file, they will be over-written. If this is the case, edit the file to re-apply your changes. - Restart the container manually, as follows:
./bin/amq
As the container starts up again, the patching mechanism repopulates the container with all of the requisite bundles and features for the patched standalone container. When the Welcome banner appears, it displays the new patch version:_ ____ __ __ ____ | | _ \ /\ | \/ |/ __ \ | | |_) | ___ ___ ___ / \ ______| \ / | | | | _ | | _ < / _ \/ __/ __| / /\ \______| |\/| | | | | | |__| | |_) | (_) \__ \__ \ / ____ \ | | | | |__| | \____/|____/ \___/|___/___/ /_/ \_\ |_| |_|\___\_\ JBoss A-MQ (6.2.1.redhat-084) http://www.redhat.com/products/jbossenterprisemiddleware/amq/ Hit '<tab>' for a list of available commands and '[cmd] --help' for help on a specific command. Open a browser to http://localhost:8181 to access the management console Hit '<ctrl-d>' or 'osgi:shutdown' to shutdown JBoss A-MQ.TipIf you were invoking the scripts from within theInstallDir/bindirectory, you might find that thebin/directory appears to be empty after the container shuts down. This is because the contents of this directory were re-written by the patch. To see the scripts again, simply re-enter thebin/directory, for example:cd ..;cd bin.
5.2. Patching a Fabric from 6.2.0 to 6.2.1
Overview
Prerequisite for patching Fabric in JBoss A-MQ
jboss-a-mq-6.2.1.redhat-084.zip distribution:
system/io/fabric8/fabric8-karaf/1.2.0.redhat-621084/fabric8-karaf-1.2.0.redhat-621084.zip
jboss-fuse-full-6.2.1.redhat-084.zip), you can copy the missing file from that distribution into the location given above. Otherwise, please contact support.
New patching mechanism
- Install the patch management enablement pack for 6.2.0, which replaces the existing patch mechanism with the new patching mechanism. In all other respects, the container remains at version 6.2.0.
- Install the 6.2.1 patch in the container using the new patch mechanism and create a new profile version to store the 6.2.1 patched profiles.
- Upgrade each of the containers in the fabric to the patched version.
Upgrading different container types
- Root container
- The root container is the container where you initially install the patch. The root container plays a key role in the patch process—for example, by acting as a source of patch files for the other containers in the fabric. For this reason, it is recommended that you upgrade this container last of all.
- SSH container
- There are some special steps required to prepare SSH containers for patching. See the section called “Preparing for a Fabric SSH container upgrade”.
- Child container
- Because child containers share some files and configuration with their parent container, they can easily get into an inconsistent state during the patching process. The simplest way to deal with child containers is to shut them down and focus on upgrading the parent container initially. After the parent container has been successfully upgraded, you can turn your attention to the child containers.NoteChild containers cannot be kept at a lower patch version than the root container. They must be upgraded to at least the same patch version as the parent container.
Establishing a baseline for an SSH container upgrade
system/ directory, to discover the initial set of bundles and Maven artifacts available in the installation.
fabric8-karaf-1.2.0.redhat-133.zip, is initially not included with the 6.2.0 distribution and is not present in system/. When Fabric requires a copy of this file (for example, for creating a remote SSH container), it has two alternative ways of obtaining it:
- By downloading the missing core Fabric artifact,
fabric8-karaf-1.2.0.redhat-133.zip, from a remote Maven repository. - By assembling the
fabric8-karaf-1.2.0.redhat-133.zipfile on the fly from the contents of the root container.
system/:
system/io/fabric8/fabric8-karaf/1.2.0.redhat-133/fabric8-karaf-1.2.0.redhat-133.zip
system/ directory of the root installation (the container you are using to install patches across the fabric). It can happen, however, that an SSH container uses a different version of fabric8-karaf-1.2.0.redhat-133.zip from the one that is installed in the root container. If the Fabric distribution installed in root and the Fabric distribution installed in the SSH container are different, it is impossible to establish a proper baseline for the SSH container and patching of the SSH container will fail.
fabric8-karaf-1.2.0.redhat-133.zip Maven artifact (and only for this artifact), it is possible to install two different artifact versions under the system/ directory, with the following names:
system/io/fabric8/fabric8-karaf/1.2.0.redhat-133/fabric8-karaf-1.2.0.redhat-133.zip system/io/fabric8/fabric8-karaf/1.2.0.redhat-133/fabric8-karaf-1.2.0.redhat-133-custom.zip
.zip and the other ends in -custom.zip. It does not matter which file is which. When both of the alternative Fabric distribution files are stored in this way, it becomes possible for the patching mechanism to establish a baseline for either of the Fabric distributions and patching of SSH containers will now work.
Initial system
jboss-a-mq-6.2.0.redhat-133.zip), which is already configured as part of a Fabric (see ).
etc/ directory.
Download the required packages
patch-management-for-amq-620-6.2.1.redhat-084.zip- Available as the download file, Red Hat JBoss A-MQ 6.2.1 on Karaf Update Installer.
jboss-a-mq-6.2.1.redhat-084.zip- Available as the download file, Red Hat JBoss A-MQ 6.2.1.
Preparing for a Fabric SSH container upgrade
- In the installation of your root container, look for the following file under the
system/directory:system/io/fabric8/fabric8-karaf/1.2.0.redhat-133/fabric8-karaf-1.2.0.redhat-133.zip
Use a file system command to get the exact size of this file in bytes (which provides a simple way of identifying this file).NoteIt is possible that there is nofabric8-karaf-1.2.0.redhat-133.zipfile located under this directory, which would suggest that you have not used the root container to create any SSH containers. - Look for the
fabric8-karaf-1.2.0.redhat-133.zipthat is installed with your SSH container (or SSH containers). Use a file system command to get the exact size of this file in bytes. Repeat this for every SSH container instance in your fabric. - Compare the file sizes obtained from the SSH containers with the file size obtained from the root container. If all of the file sizes are the same, this indicates that all of the containers in the Fabric are using exactly the same Fabric distribution—proceed straight to the section called “Applying the 6.2.1 patch to a Fabric container”.If any of the file sizes obtained from the SSH containers differ from the file size obtained from the root container, this indicates that at least one of the SSH containers is using a Fabric distribution that is different from the root container's Fabric distribution—proceed to the next step.
- Take one of the
fabric8-karaf-1.2.0.redhat-133.zipfiles that is different from thefabric8-karaf-1.2.0.redhat-133.zipfile already stored under the root container'ssystem/directory (where the difference is indicated by having a different file size), rename it tofabric8-karaf-1.2.0.redhat-133-custom.zip, and copy it to the following location under the root container'ssystem/directory:system/io/fabric8/fabric8-karaf/1.2.0.redhat-133/fabric8-karaf-1.2.0.redhat-133-custom.zip
When you are finished, there should be two files located under this directory, as follows:system/io/fabric8/fabric8-karaf/1.2.0.redhat-133/fabric8-karaf-1.2.0.redhat-133.zip system/io/fabric8/fabric8-karaf/1.2.0.redhat-133/fabric8-karaf-1.2.0.redhat-133-custom.zip
Applying the 6.2.1 patch to a Fabric container
- Make a full backup of your JBoss A-MQ 6.2.0 installation before attempting to apply the patch.
- Install the patch management enablement pack for 6.2.0,
patch-management-for-amq-620-6.2.1.redhat-084.zip, on top of your 6.2.0 installation. Use an archive utility to extract the contents on top of the existing 6.2.0 installation.The patch management enablement pack contains the following files:patches/jboss-a-mq-6.2.0.redhat-133-baseline.zip system/io/fabric8/patch/patch-commands/1.2.0.redhat-621084/patch-commands-1.2.0.redhat-621084.jar system/io/fabric8/patch/patch-core/1.2.0.redhat-621084/patch-core-1.2.0.redhat-621084.jar system/io/fabric8/patch/patch-features/1.2.0.redhat-621084/patch-features-1.2.0.redhat-621084-features.xml system/io/fabric8/patch/patch-management/1.2.0.redhat-621084/patch-management-1.2.0.redhat-621084.jar
NoteIt does not matter whether the container is running or not when you extract these files. - Start the container, if it is not already running.
- Shut down all of the child containers in the fabric using the
container-stopcommand:fabric:container-stop ChildContainerList
- Create a new version for the updated patch mechanism, using the
fabric:version-createcommand:JBossFuse:karaf@root> fabric:version-create 1.0.1 Created version: 1.0.1 as copy of: 1.0
ImportantThe version name must be a pure numeric string, such as1.0.1,1.1,2.1, or2.2. You cannot incorporate alphabetic characters in the version name (such as1.0.patch). - Add the new patch feature repository to version
1.0.1of thedefaultprofile, as follows:fabric:profile-edit --repository mvn:io.fabric8.patch/patch-features/1.2.0.redhat-621084/xml/features default 1.0.1
- Add the
patchandpatch-corefeatures to version1.0.1of thedefaultprofile, as follows:fabric:profile-edit --feature patch --feature patch-core default 1.0.1
- Upgrade the root container to version
1.0.1, as follows:fabric:container-upgrade 1.0.1 root
The effect of this upgrade is to replace the old patch commands by the new patch commands in the current 6.2.0 Fabric container, thereby bootstrapping the new patch mechanism (which is needed to install the 6.2.1 patch). - Wait until the current container is successfully re-provisioned to version
1.0.1before proceeding to the next phase of the patch installation. You can monitor the provision status of the current container by entering the following console command:watch container-list
When the[provision status]changes tosuccess, you can proceed with the next step. - Add the 6.2.1 patch to the container's environment using the patch:add command (remembering to customize the path to the patch file), as follows:
JBossA-MQ:karaf@root> patch:add file:///path/to/jboss-a-mq-6.2.1.redhat-084.zip [name] [installed] [description] jboss-a-mq-6.2.1.redhat-084 false jboss-a-mq-6.2.1.redhat-084
NoteIn this case, the patch file is the full distribution of JBoss A-MQ 6.2.1. Under the new patching mechanism, the full distribution file has a dual purpose: you can extract the archive directly, to create a fresh 6.2.1 distribution; or you can add the file as a patch, in order to migrate an existing 6.2.0 installation to 6.2.1. - Create a new version, using the
fabric:version-createcommand:JBossFuse:karaf@root> fabric:version-create 1.1 Created version: 1.1 as copy of: 1.0.1
- Apply the patch to the new version,
1.1, using thepatch:fabric-installcommand. Note that in order to run this command you must provide the credentials,UsernameandPassword, of a user withAdministratorprivileges. For example:patch:fabric-install --username Username --password Password --upload --version 1.1 jboss-a-mq-6.2.1.redhat-084
- Synchronize the patch information across the fabric, to ensure that the profile changes in version
1.1are propagated to all containers in the fabric (particularly remote SSH containers). Enter the following console command:patch:fabric-synchronize
- Upgrade each existing container in the fabric using the
fabric:container-upgradecommand (but leaving the root container, where you installed the patch, until last) along with its respective child containers. For example, to upgrade a container namedremoteand its child,childOfRemote, enter the following command:fabric:container-upgrade 1.1 remote childOfRemote
ImportantIt is recommended that you initially upgrade only one or two containers to the patched profile version, to ensure that the patch does not introduce any new issues.NoteIf the upgraded remote container gives the following error:Provision error: io.fabric8.common.util.MultiException: Error restarting bundles at ... Caused by: org.eclipse.jgit.api.errors.JGitInternalException: Invalid ref name: baseline-ssh-fabric8-1.2.0.redhat-133 ...
This implies that you omitted to follow the steps required to prepare for upgrading an SSH container—see the section called “Preparing for a Fabric SSH container upgrade”. - Keep checking the provision status of the container you are upgrading until the status appears as
requires full restart. Enter thefabric:container-listcommand to check the status, as follows:fabric:container-list
NoteAfter the target container has been upgraded to the patch version, the target container requires a full restart. The restart cannot be performed automatically by the patching mechanism, because the auto-restart capability of the patching mechanism will not become available until after the restart.ImportantDo not attempt to restart the container you are upgrading until the status appears asrequires full restart. - Use one of the standard mechanisms to stop and restart the container manually. In some cases, it will be possible to do this using Fabric commands from the console of the root container.For example, you could stop the
remotecontainer as follows:fabric:container-stop remote
And restart theremotecontainer as follows:fabric:container-start remote
- Wait until the provision status of the container you are upgrading appears as
successand then start up its child containers (if any). For example, to restart thechildOfRemotecontainer:fabric:container-start childOfRemote
- Upgrade the root container last (that is, the container that you originally installed the patch on) and its children (if any). For example, to upgrade the root container,
root, and its child,childOfRoot, enter the following command:fabric:container-upgrade 1.1 root childOfRoot
- Keep checking the provision status of the root container until the status appears as
requires full restart. Enter thefabric:container-listcommand to check the status, as follows:fabric:container-list
ImportantDo not attempt to restart the root container until the status appears asrequires full restart. - The root container must also be restarted manually. Shut it down using the
shutdownconsole command, as follows:JBossFuse:karaf@root> shutdown Confirm: shutdown instance root (yes/no): yes
Restart the container manually, as follows:./bin/amq
TipIf you were invoking the scripts from within theInstallDir/bindirectory, you might find that thebin/directory appears to be empty after the container shuts down. This is because the contents of this directory were re-written by the patch. To see the scripts again, simply re-enter thebin/directory, for example:cd ..;cd bin. - Wait until the provision status of the root container appears as
successand then start up its child containers (if any). For example, to restart thechildOfRootcontainer:fabric:container-start childOfRoot
- Now set the default profile version to
1.1(the version that has the 6.2.1 patch applied):fabric:version-set-default 1.1
This ensures that when you create new containers from now on, those containers will use the version1.1profiles by default (otherwise you would have to specify version1.1explicitly in the container create command). - The JBoss A-MQ 6.2.1 rollup patch over-writes the properties from the
org.ops4j.pax.loggingpersistent ID (PID) in thekarafprofile (in order to fix a security issue). If you previously made any customizations to this logging PID, they will be over-written. If this is the case, edit thekarafprofile to re-apply your changes—for example, by invoking the built-in profile text editor in the Karaf console, as follows:profile-edit --pid org.ops4j.pax.logging karaf 1.1
Rolling back the 6.2.1 patch in a Fabric container
1.1 to version 1.0.1 (using the fabric:container-rollback command) is guaranteed to fail; and rolling back from profile version 1.1 to version 1.0 is also guaranteed to fail.
Chapter 6. Migrate Data Store
Overview
Migrate the KahaDB Data Store
- Backup the KhahaDB files and Aries transaction files from the old container. The files can be found at:
- KahaDB files -
InstallDir/data/amq/kahadb/*.* - Aries transaction files -
InstallDir/data/txlog/*.*
- Manually copy all of the KahaDB files from the old container to the same location in the new container.
- Manually copy all Aries transaction log files from the same location in the sold container to the new container.
Legal Notice
Trademark Disclaimer
