JBoss.orgCommunity Documentation
This is the final release of the JBoss 5.0 series for the Java EE5 codebase that fully complies with the Java EE5 conformance testing certification requirements. It brings us to the end of a 3+ year marathon of redesigning the most popular open-source application server over a completely new kernel architecture, the JBoss Microcontainer. It also marks the beginning of a new era of innovation for JBoss as we will be exploring the capabilities and limitations of the new architecture in the releases to come. In our view, JBossAS 5 provides a healthy foundation and the most advanced and fully extensible, cross component model, aspect integration, server runtime environment. For information on the APIs that make up Java EE5, see Java EE APIs. A tutorial on Java EE 5 can be found here. Please visit also the JBoss AS docs pages as we'll be updating the documents with the latest information, and post your questions to the JBossAS 5 User Forum.
JBossAS 5 is the next generation of the JBoss Application Server build on top of the new JBoss Microcontainer. The JBoss Microcontainer is a lightweight container for managing POJOs, their deployment, configuration and lifecycle. It is a standalone project that replaces the famous JBoss JMX Microkernel of the 3.x and 4.x JBoss series. The Microcontainer integrates nicely with the JBoss framework for Aspect Oriented Programming, JBoss AOP. Support for JMX in JBoss 5 remains strong and MBean services written against the old Microkernel are expected to work. Further, it lays the groundwork for JavaEE 6 profiles oriented configurations and JBoss AS embedded that will allow for fine grained selection of services for both unit testing and embedded scenarios.
JBossAS 5 is designed around the advanced concept of a Virtual Deployment Framework (VDF), that takes the aspect oriented design of many of the earlier JBoss containers and applies it to the deployment layer. Aspectized Deployers operate in a chain over a Virtual File System (VFS), analyze deployments and produce metadata to be used by the JBoss Microcontainer, which in turn instantiates and wires together the various pieces of a deployment, controlling their lifecycle and dependencies. The VDF allows for both customization of existing component modules including JavaEE and JBoss Microcontainer, as well as introduction of other models such as OSGi and Spring.
Many key features of JBoss 5 are provided by integrating other standalone JBoss projects:
JBoss Microcontainer is the next generation POJO based kernel that is used as the core of the server. It supports an extensible deployment model and advanced dependency relationships.
The definition of the non-kernel deployers and deployment is now defined a Profile obtained from the ProfileService. The ProfileService also provides the ManagementView for ManagedDeployments/ManagedObjects used by the OpenConsole admin tool.
JBoss EJB3 included with JBoss 5 provides the implementation of the latest revision of the Enterprise Java Beans (EJB) specification. EJB 3.0 is a deep overhaul and simplification of the EJB specification. EJB 3.0's goals are to simplify development, facilitate a test driven approach, and focus more on writing plain old java objects (POJOs) rather than coding against complex EJB APIs.
JBoss Messaging is a high performance JMS provider in the JBoss Enterprise Middleware Stack (JEMS), included with JBoss 5 as the default messaging provider. It is also the backbone of the JBoss ESB infrastructure. JBoss Messaging is a complete rewrite of JBossMQ, which is the default JMS provider for the JBoss AS 4.x series.
JBossCache that comes in two flavors. A traditional tree-structured node-based cache and a PojoCache, an in-memory, transactional, and replicated cache system that allows users to operate on simple POJOs transparently without active user management of either replication or persistency aspects.
JBossWS is the web services stack for JBoss 5 providing Java EE compatible web services, JAX-WS-2.0.
JBoss Transactions is the default transaction manager for JBoss 5. JBoss Transactions is founded on industry proven technology and 18 year history as a leader in distributed transactions, and is one of the most interoperable implementations available.
JBoss Web is the Web container in JBoss 5, an implementation based on Apache Tomcat that includes the Apache Portable Runtime (APR) and Tomcat native technologies to achieve scalability and performance characteristics that match and exceed the Apache Http server.
JBoss Security has been updated to support pluggable authorization models including SAML, XACML and federation.
JBossAS 5 includes features and bug fixes, many of them carried over upstream from the 4.x codebase. See the Detailed Release Notes section for the full details, and Section 1.3, “Major Component Upgrades” for the major component versions included in JBossAS as well as their project page locations.
Some rather important JBoss project versions are listed below. You are encouraged to browse the individual project's documentation and view the release notes at www.jboss.org.
JBoss Microcontainer v2.0.2.GA
JBoss Transactions v4.4.0.GA
JBoss WebServices v3.0.4.GA
JBoss Messaging v1.4.1.GA
JBoss Web v2.1.1.GA
JBoss AOP v2.0.0.SP1
JBoss EJB3 v1.0.0-Beta10
JBoss Security v2.0.2.SP3
Hibernate v3.3.1.GA
Hibernate Entity Manager v3.4.0.GA
Hibernate Annotations v3.4.0.GA
JBoss Cache POJO v3.0.0.GA
JBoss Cache Core v3.0.1.GA
JGroups v.2.6.7.GA
JGroups v.2.6.7.GA
JBoss Remoting v.2.5.0.SP2
For a full list of the JBoss and thirdparty libraries used with JBoss AS 5.0.0.GA check the pom.xml found in the component-matrix directory of the source code distribution. To see the maven dependency tree you can run 'mvn dependency:tree' from the thirdparty directory of the source code distro.
With the reworking of the server kernel and evolution of various JBoss technologies to indepdnent projects, the JBossAS project is moving towards becoming largely an integration project. Many key pieces are now integrated as thirdparty jars that integration code/configuration makes avaialble as part of a server configuration/profile.
A common theme for JBossAS 5 is the breaking out of internal subsystems into stand-alone projects and the introduction of SPIs throughout the server codebase. Those changes should not affect directly the end user but they are an important part of the JBoss strategy for making available the various EE services as independent projects, so that they can be wired-together and be consumed à la carte inside different runtime environments and not only inside the JBoss Application Server. If you are building JBossAS from source you'll notice we are migrating to a maven2 build. At this point the build is a hybrid one because it declares all JBoss dependencies as maven2 artifacts, however after the dependencies are resolved/imported the legacy ant based build is used to compile and build the distribution. This will change to a full maven build at some point in time. The jboss maven repo can be found here. Starting from AS5 CR2, please note how the -sources.jar are also downloaded to thirdparty by default. To disable downloading of the sources to thirdparty, define the property skip-download-sources to true either on the command line or in your maven settings.xml.
The project source is rooted at Anonymous SVN for public access, and Committer SVN for committer access. The directories under these roots follow the usual svn conventions:
trunk - the development branch for the next major version
branches - the location for stable branches associated with release series.
Branch_5_0 - the branch for 5.0.x series development.
tags - locations for tagged releases
JBoss_5_0_0_GA - The 5.0.0.GA release tag.
When you checkout the project the resulting subdirectories are:
Server aspects
The server bootstrap that loads the JBoss Microcontainer
The server build directory which contains the main build.xml. See Section 5.3, “Building with Apache ANT”Building with ANT for more on building the server.
A maven project that declares the dependcies for the jboss-all-client.jar
Clustering related services and integration
A maven project the declares the external dependencies consumed by the server. This is used to build the thirdparty/* library structure.
JCA implementation and integration code.
Obsolete admin console. See JBoss Embedded Consoleproject for the future direction of the server admin console.
JSR88 deployment services code.
EJB3 integration code.
Obsolete JBossAS emebedded project that has been moved toSVN embedded for further development. See the Design of Embedded JBoss forum for design discussions.
Hibernate deployment integration code.
JacORB integration code for IIOP support.
JMX remoting and JTS integration code
javax.management.* package implementations
A javax.management.remote.JMXConnector implementation
The main() entry point code
JSR77 mbean view generation code
JBoss JMX extensions
JBoss Messaging integration code
The JBossAS root maven pom
The ProfileService, ManagementView, and DeploymentManager implementations.
JBoss Security integration code
The legacy EJB2 containers, deployers and detached invokers
Spring bean deployment integration
ProfileServiceBootstrap implementation and management code
MBean service component model and deployers
The JBossAS testsuite
The maven2 thirdparty project which builds the local thirdparty jars used by the ant build.
JBossWeb integration code and deployers
build tool jars
Various misc services
JBossWS integration code and deployers
This section describes additional changes in JBossAS 5.
JBoss VFS provides a set of different switches to control it's internal behavior. JBoss AS sets boss.vfs.forceCopy=true by default. To see all the provided VFS flags check out the code of the VFSUtils.java class.
jboss.vfs.forceCopy, useCopyJarHandler option, force copy handling of nested jars if true.
jboss.vfs.forceVfsJar, true if forcing fallback to vfsjar from default vfszip
jboss.vfs.forceNoReaper, noReaper option, true if use of the ZipFileLockReaper background closing of ZipFiles should be disabled. VFS uses an internal caching mechanism to speed up access to deployment artifacts. This means that files in deploy/ remain open as long as they are accessed and then closed by a reaper thread after a 5 seconds inactivity. On window platforms this may cause locking issues if files are re-deployed too quickly. Use jboss.vfs.forceNoReaper=true to disable reaping.
jboss.vfs.forceCaseSensitive, true if case sensitivity should be enforced
jboss.vfs.optimizeForMemory, true if zip streams should be kept in memory with their entries in ZipEntry.STORED format.
jboss.vfs.cache, specifies the org.jboss.util.CachePolicy implementation to use for VFSCache implementations that support an external CachePolicy.
Hibernate-core is now using slf4j-api as a logging facade. To properly integrate that in JBossAS we have created an slf4j-to-jboss-logging adapter (slf4j-jboss-logging.jar) that creates a static binding between sl4j and jboss-logging-spi.
The client/jbossall-client.jar library that used to bundle the majority of jboss client libraries, is now referencing them instead through the Class-Path manifest entry. This allows swapping included libraries (e.g. jboss-javaee.jar) without having to re-package jbossall-client.jar. On the other hand, it requires that you have jbossall-client.jar together with the other client/*.jar libraries, so they can be found.
If using proprietary JBoss/EJB3 annotations, those have moved (since Beta4) into the org.jboss.ejb3.annotation package, EJBTHREE-1099. Those are now included in a new artifact, jboss-ejb3-ext-api.jar
Interoperating with previous JBoss EJB3 implementations may present problems due to serialVersionUIDs issues, EJBTHREE-1118.
Use of JBoss Cache 3.x. has a significantly different API from the 1.x releases used in JBoss AS 4.x and 3.2.x.
@EJB injections should now work from servlets, JBAS-5646.
EJB3 configuration is now controlled by deployers/ejb3.deployer/META-INF/ejb3-deployers-jboss-beans.xml as described in http://www.jboss.org/community/docs/DOC-12407
The ClassPathExtension MBean has been replaced with a VFS classloader definition, see JBAS-5446.
The old JMX-based ServiceBindingManager has been replaced by a POJO-based ServiceBindingManager, see AS5ServiceBindingManager Wiki.
The Farm service from 4.x has been removed, and replaced with a HASingletonDeploymentScanner that integrates with the ProfileService.
JBoss 5 is stricter when it comes to verifying/deploying JavaEE artifacts. EJB3 deployments that run in AS 4.2 may fail in AS5. We have tried to keep the validation messages as accurate as possible in order to help you modify your deployment descriptors/annotations to be in-line with the JavaEE 5 requirements.
A new jboss.server.log.threshold system property can be used to control the log/server.log threshold. It defaults to DEBUG.
The default conf/jboss-log4j.xml configuration now includes the thread name for entries in log/server.log (JBAS-5274).
The transaction manager configuration has moved from conf/jboss-service.xml to deploy/transaction-service.xml.
All the security related configuration files are now grouped under the deploy/security directory (JBAS-5318). The security configuration changes are further described in SecurityInJBoss5 wiki.
A new jboss.jgroups.udp.mcast_port property is to control easy configuration of multicast port. It defaults to ${jboss.jgroups.udp.mcast_port:45688}.
Clustering configurations are now in a deploy/clustering subdirectory
A separate cache is now used for Clustered SSO (JBAS-4676).
Per webapp configuration of useJK, snapshot mode and snapshot interval (JBAS-3460). Default for useJK is whether jvmRoute is set (JBAS-4961).
Total replication (rather than buddy replication) is the default setting for session replication (JBAS-5085).
Loopback is now set to true for all JGroups UDP stacks (JBAS-5323).
JBossAS 5.0.0.GA introduces two new configuration, the standard and the web config. The standard config is the configuration that has been tested for JavaEE compliance. The major differences with the existing configurations is that call-by-value and deployment isolation are enabled by default, along with support for rmiiiop and juddi (taken from the all config). The configurations that are modified include:
deployers/ear-deployer-jboss-beans.xml has callByValue and isolated properties set to true
The "jboss:service=Naming" mbean in conf/jboss-service.xml has CallByValue set to true.
conf/jndi.properties has java.naming.factory.initial=org.jboss.iiop.naming.ORBInitialContextFactory
There are additional JacORB configuration files and jars:
conf/jacorb.properties
deploy/iiop-service.xml
lib/avalon-framework.jar
lib/jacorb.jar
A UDDI implementation deployed as deploy/juddi-service.sar
The web config is a new experimental lightweight configuration created around JBoss Web that will follow the developments of the JavaEE 6 web profile. Except for the servlet/jsp container it provides support for JTA/JCA and JPA. It also limits itself to allowing access to the server only through the http port. Please note that this configuration is not JavaEE certified and will most likely change in the following releases.
Another notable change is that the majority of the libraries common to the different configurations have moved to a new shared location, JBOSS_HOME/common/lib/. This is so we avoid having multiple copies of the same libraries in the distribution. The location of the common library directory can be controlled by the following properties:
jboss.common.base.url defaulting to ${jboss.home.url}/common
jboss.common.lib.url defaulting to ${jboss.common.base.url}/lib
The common library directory is shared by all the configurations except for the minimal config. It is referenced in the very beginning of every configuration's conf/jboss-service.xml:
<classpath codebase="${jboss.server.lib.url}" archives="*"/>
<classpath codebase="${jboss.common.lib.url}" archives="*"/>
You can see that the library directory of the individual configurations is still in place, although in some cases it's empty (e.g. JBOSS_HOME/server/default/lib/)