In my previous post, I had a ‘First Look’ at Red Hat JBoss EAP 7, and highlighted a few fundamental changes from EAP 6. This post has been written to dive deeper under the covers, and aims to examine the key differences between the two versions, looking primarily at the impact of migrating to this version from EAP 6.
I also want to consider whether there are any operational considerations regarding migration, and further expand on some of the points raised when I first opened the EAP 7 box.
Full Support for JBoss EAP 6 finishes at the end of June 2016 - which means there will be no minor releases or software enhancement to the EAP 6 code base from then on. Maintenance support ends June 2019 and Extended Life Support ends in June 2022.
So, if you're happy with the features you have and the system's stable, then bug fixes will still be provided for a while to come. However, if you're looking to use newer features and take advantage of those provided by Java EE 7 - then it's worth starting the evaluation cycle for JBoss EAP 7 now, so that when the first point release arrives (which is historically the more stable release) you are ready to implement into production.
Is your business or organisation considering an EAP 7 Migration? Discover our specialist JBoss migration services.
As is the nature of new releases, some of the older technologies are not supported or are untested - and hence unverified whether they work. For JBoss EAP 7, it is only supported for Java 1.8+ and has not been tested on RHEL 5 or Microsoft 2008 server (Note: it has been tested on Microsoft 2008 R2 server).
Some of the notable untested database integrations include Oracle 11g R1, Microsoft SQL Server 2008 R2 SP2 and PostgreSQL 9.2 –though I would expect these to be added to over time if there is demand. One addition to the database integration testing has been for MariaDB. Fundamentally,though, the support and testing is in line with previous versions of EAP and what you would expect.
Looking at the Java EE standards supported in EAP 7, JAX-RPC is now not available with preference to use JAX-WS. The standards that have been updated are:
- Java EE
- Java Servlet
- JSF (JavaServer Faces)
- JSP (JavaServer Pages)
- JTA (Java Transaction API)
- EJB (Enterprise Java Beans)
- Java EE Connector Architecture
- JMS (Java Message Service)
- JPA (Java Persistence)
- Common annotations for the Java Platform
- JAX-RS (Java API for RESTful Web Services)
- CDI (Contexts and Dependency Injection)
- Bean validation
The major updates here are primarily for Java EE, JMS, and JAX-RS, and corresponding to the standards updates, notable component changes from EAP 6 are :
- JBoss AS has been replaced with the WildFly Core
- JBoss Web has been replaced with Undertow
- HornetQ has been replaced with Active MQ Artemis (though the HornetQ module is retained for backwards compatibility)
- Apache Web Server has been removed
- jBeret has been added
- JBoss Modules has been removed
- JBoss WS-Native has been removed
- JSF has been removed
- The Jacorb subsystem has been removed and switched to OpenJDK ORB
- The JBoss OSGi framework has been removed
With the standards, components and module changes, you can see that there are a lot of areas that will need to be checked, reconfigured, and tested before you can deploy EAP 7 with existing code.
There should always be care consideration given to migrating major versions of an application. In all cases, full evaluation and testing should be undertaken to reduce the risk when deploying to the new environment.
There are a significant number of changes between EAP 6 and EAP 7 with the updated standards used - deprecated APIs, modules and components and modified configuration structure. However there are also a number of compatibilities and interoperabilities provided in EAP 7 that should make the migration easier with proper planning and testing.
Migration tasks should be thought of from various points of view. The main ones I think about when migrating are:
- Do I need to modify CPU, Memory, Storage, Network, Architecture for the new solution?
- Can I upgrade inline or side by side, all at once or some servers at a time?
- Are there deprecated APIs that are used that need to be updated?
- Do current API calls behave in the same way?
3. Server Configuration
- Are there server configuration settings that need to be changed?
- Are the CLI commands the same or are there new ones?
- Is the monitoring you have in place compatible with the new solution?
- Are there new configurations to add or amend for the updated components and modules?
- Does the logging behave in the same way?
5. Process / Procedure
- Are your procedures for operational tasks the same or do they need amending?
- Are your operational scripts still fit for purpose?
- Functional, Integration and Performance testing is required to ensure the application behaves within agreed thresholds.
From a code perspective, as mentioned, there are a number of deprecated features and updated standards, so the code will need to be checked and verified to understand whether any code will need changing to ensure compatibility with the new and updated modules.
For this there is a tool called Windup which is part of the Red Hat JBoss Migration Toolkit that provides an analysis of your code and what will need to be changed.
Some areas that the developers need to be aware of that haven’t already been mentioned are:
- RESTEasy has a number of deprecated classes
- Hibernate Search changes
- JBoss logging annotations change
For the server configuration there are several approaches:
The recommended approach is to use the JBoss server migration tool - but this is currently in alpha (and hence unsupported) and only currently works against EAP 6.4 standalone servers. This is currently being developed though, and I expect it to be expanded to work across more versions and be a full release.
An alternative is to use the EAP 6 configuration as the configuration for EAP 7 and use the in-built CLI commands for migrating the subsystems of messaging, web and jacorb over to the new subsystems. This though does not update all the required server configuration so you are caught with still potentially having to make changes in order to achieve a finalised configuration.
I personally will always keep CLI scripts to configure the server so if a new server is required I can easily run these scripts and the server will be configured. These can be run on a newly installed version of EAP 7 and amended as required to use the new subsystems and configuration structure.
None of the ways described are clean and simple solutions, so there will need to be close attention paid to ensuring the configuration is correct.
Some of the areas that you need to be aware of are:
- The ‘web’ subsystem is now the ‘undertow’ subsystem
- Valves are not supported and need to be migrated to Undertow handlers
- Rewrite sub-filters need to be converted to expression-filters
- The ‘messaging’ subsystem is now the ‘messaging-activemq’subsystem and rather having a ‘hornetq-server’ it is now simply ‘server’
- To allow EAP6 JMS connections ‘add-legacy-entries’ needs to set to true when migrating via CLI
- The threads subsystem has been removed and now each subsystem uses its own thread management
There are also architecture concerns you need to be aware of when planning your migration. Some notable ones are :
- Clusters must be the same version of EAP (So you will need to upgrade an entire cluster at a time)
- JGroups now use a private interface (as opposed to public) as best practice means they should use a separate network interface.
- Infinispan now uses distributed ASYNC caches for its default clustered caches rather than replicated
- Messaging directory and file structure has changed. They are now named with reference to ActiveMQ rather than HornetQ.
- Log messages are newly prefixed with the WFLY project codes
There are a significant number of changes between JBoss EAP 6 and JBoss EAP 7, with a number of modules and components being updated to cater for the updated standards - resulting in API deprecation and configuration changes.
This means the migration path may not be simple, the architecture may need to be reconsidered and the operational procedures may need to be modified. This can be eased by the use of Windup for code analysis, and the JBoss Migration Toolkit.
However there is still a lot to verify, reconfigure and test both from a code perspective and a server configuration/architecture perspective.
If you're thinking about EAP 7, then get your planning underway with a consultation from one of our Principal Consultants. To find out more about our migration services, and arrange a call, simply follow the link.
Red Hat Support
EAP 7 Supported Configurations
EAP 7 Included modules (requires a Red Hat subscription account)
EAP 7 Component Details
EAP 7 Migration Guide
Red Hat JBoss Migration Toolkit
JBoss Server Migration Tool
WildFly Project Codes