Upgrading to JBoss
      AS7
      Amit Sharma
     AXS USA LLC
    amit@axsusa.com
      9th Jan 2013
Index
O Cover Jboss AS7
  O Jboss AS 6.x/5.x comparison
O Features
O The Architecture
O New Components
O Lessons learned
O References
JBoss AS7
O 7.0.0.Final – First stable release 12th July
    2011
O   7.1.1.Final – released 9th March 2012
O   First major shift – common codebase
O   Major re-write of the underlying
    architecture
O   Extensible framework – Immutant
    (clojure), torquebox (Jruby)
Client History
O A complete JBoss Shop
  O JBoss EAP 6.x
  O Hibernate 3.3
  O Seam 2.x
  O JBoss Messaging
  O JMX Console
  O RestEasy
  O Jdk 1.6.0_31
Features
JBoss AS7 Website:
O Blazingly fast (<3s startup)
O Lightweight
O Modular core
O Elegant administration
O Domain management
O First class components
AS7 Architecture
O Core:
  O Jboss Modules (class loading of resources)
  O Module Service Container (install/uninstall
    or manage services)
O Standalone.xml at the heart of Jboss
  O Snapshot folder strategy
O JSR-299 compliant server (Java EE6)
  O CDI / Weld supported fully.
O Modules are open source projects
AS7 Architecture (standard)
 O Hibernate Core (4.0.1.Final) – Default JPA
     Provider.
 O   RestEasy (2.3.1.GA)
 O   Apache CXF (4.0.1.GA)
 O   Mojarra (JSF 2.0)
 O   JBoss Logging (Java Util Logging)
 * Jboss/docs/licenses/licenses.xml
Folder Structure
Modules
AS    Bootstrap libs      Server libs
4.x   JBOSS_HOME/server   JBOSS_HOME/server/<server>/lib

5.x – JBOSS_HOME/server   JBOSS_HOME/common/lib and
6.x                       JBOSS_HOME/server/<server>/lib

7.x   JBOSS_HOME/jboss-   JBOSS_HOME/modules subfolders.
      modules.jar
Standalone.xml
O Variants of standalone.xml pre-exist.
O <extensions> - shared by all applications
  O These are stored in ‘modules’
O <profile> - collection of subsystems.
  O One for standalone, multiple for domain.
O <interfaces> - bind addresses.
O <socket-binding-group> - define ports.
O <system-properties>
  O Define in xml
  O standalone.bat -P=mypropertiesfile.properties
Standalone.xml (contd.)
O Adding SMTP support
  O Bring the subsystem
  <subsystem xmlns="urn:jboss:domain:mail:1.0">
   <mail-session jndi-name="java:/Mail" debug="true">
      <smtp-server outbound-socket-binding-ref="mail-smtp"/>
   </mail-session>
  </subsystem>
  O Add the socket bindings
  <outbound-socket-binding name="mail-smtp">
   <remote-destination host=“mail.google.com" port="25"/>
  </outbound-socket-binding>
Standalone.xml (contd.)
O Overiding default scanner path
<subsystem xmlns="urn:jboss:domain:deployment-
scanner:1.1">
   <deployment-scanner path="C:/myapp/deployments"
scan-interval="5000" auto-deploy-zipped="true" auto-
deploy-exploded="true" deployment-timeout="180"/>
 </subsystem>
O Port Offset
standalone.bat -Djboss.socket.binding.port-
offset=10 [All ports are offset by 10]
http://localhost:8090
Standalone.xml (contd.)
O Registering a database driver (another subsystem)
  O No common/lib or *ds.xml files
<datasources>
            <datasource jndi-name="java:jboss/datasources/testDS" pool-
name="testDS" use-java-context="false">
           <connection-url>jdbc:oracle:thin:@myserverip/myschema</connection-url>
           <driver>oracle</driver>
           <security>
              <user-name>amit</user-name>
              <password>sharma</password>
           </security>
        </datasource>
        <drivers>
           <driver name="oracle" module="com.oracle.ojdbc6">
              <xa-datasource-class>oracle.jdbc.OracleDriver</xa-datasource-class>
           </driver>
        </drivers>
      </datasources>

JBOSS_HOMEmodulescomoracleojdbc6mainmodule.xml and jar
JBoss CLI
O Example:
<system-properties>
<property name="hibernate.default_schema“ value="AMIT"/>
</system-properties>
O Read System properties
[standalone@localhost:9999 /] /system-
property=hibernate.default_schema:read-resource
{
   "outcome" => "success",
   "result" => {"value" => "AMIT"}
}
JBoss CLI (contd.)
O Command Line Interface. GUI available as well.
   O /subsystem=datasources/data-source=ExampleDS/
      c:jboss-as-7.1.1.Finalbin>jboss-cli.bat –gui
O Command line
[standalone@localhost:9999 /]
/subsystem=datasources/data-source=ExampleDS:read-
attribute(name=connection-url)
{
   "outcome" => "success",
   "result" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"
}
Deployment
O Mechanisms:
  O Deployments Directory
    (/standalone/deployments)
  O CLI (undeploy and then .dodeploy)
  O Marker files
    O   .deployed or .undeployed markers
    O   .failed
    O    .isdeploying
    O    .isundeploying
  O Management Console
  O Eclipse Plugin
What’s new
O HornetQ – default JMS Provider (2.2.11)
O Jgroups API Implementation for communication
  between nodes - UDP and multicast. (3.1.0.GA)
O IronJacamar - Java Connector Architecture 1.6
  Implementation. (1.0.7.Final)
O Infinispan – JSR-107 compatible cache
   O Handles cluster consistency
O Jolokia - JMX-HTTP bridge (JMX with JSON over
  http)
O Arquillian support.
O Mod_cluster support. (mod_jk and mod_proxy still
  works)
HornetQ
O HornetQ is an open source project to build a
  multi-protocol, embeddable, very high
  performance, clustered, asynchronous
  messaging system.
O High performance journal mechanism for
  message persistence (No database
  persistence)
O Provides fully functional JMS capabilities.
   O Supports JMS 1.1 API. (No code changes)
   O Provides its own Messaging API.
   O STOMP and REST support
HornetQ (contd.)
O MDB example
  O No Java Impact to MDBs
    @MessageDriven(name = "MDBExample",
              activationConfig =
                  {
                     @ActivationConfigProperty(propertyName =
    "destinationType", propertyValue = "javax.jms.Queue"),
                     @ActivationConfigProperty(propertyName =
    "destination", propertyValue = "queue/testQueue")
                  })
    public class MDBExample implements MessageListener
    {
      public void onMessage(Message message)...
    }
HornetQ (contd.)
O Wildcards on Addresses rather than specific queue.
   O   filter for the destination - jms.queue.#
O Standalone-full-ha.xml
      <jms-destinations>
          <jms-queue name="testQueue">
             <entry name="queue/test"/>
           <entry name="java:jboss/exported/jms/queue/test"/>
          </jms-queue>
          <jms-topic name="testTopic">
             <entry name="topic/test"/>
             <entry name="java:jboss/exported/jms/topic/test"/>
          </jms-topic>
       </jms-destinations>
HornetQ (contd.)
O Integration with any JEE App Server must
 happen via JCA (Java Connector
 Architecture) Adaptor
  O A JCA Adapter basically controls the inflow
    of messages to Message-Driven Beans
    (MDBs) and the outflow of messages sent
    from other JEE components, e.g. EJBs and
    Servlets.
  O Anti-pattern defined. (See Image)
HornetQ (contd.)
O Anti-Pattern
JBoss CLI - HornetQ
O See a Queue
   O /subsystem=messaging/hornetq-
     server=default/:read-children-
     resources(child-type=jms-queue)
O Read a broadcast-group
   O /subsystem=messaging/hornetq-
     server=default/:read-children-names(child-
     type=broadcast-group)
O Test a connection
data-source test-connection-in-pool --name=testDS
Jolokia
O WAR-Agent (access to your JMX beans)
O Query:
http://localhost:8080/jolokia-war-
1.0.6/read/jboss.as:subsystem=datasources,data-
source=ExampleDS/connectionUrl?ignoreErrors=true
O Result:
{"timestamp":1357502024,"status":200,"request":{"m
bean":"jboss.as:data-
source=ExampleDS,subsystem=datasources","attrib
ute":"connectionUrl","type":"read"},"value":"jdbc:h2:m
em:test;DB_CLOSE_DELAY=-1"}
Arquillian
O No more mocks and No more container lifecycle
   and deployment
@RunWith(Arquillian.class)
public class GreeterTest {
  @Deployment
  public static JavaArchive createDeployment() {
     return ShrinkWrap.create(JavaArchive.class)
        .addClass(Greeter.class)
        .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
  }
@Inject
Greeter greeter;
@Test
public void should_create_greeting() {
     assertEquals("Hello, Earthling!", greeter.greet("Earthling"));
  }
}
Arquillian (contd.)
O src/test/resources/arquillian.xml
<arquillian xmlns="http://jboss.org/schema/arquillian"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
     http://jboss.org/schema/arquillian
     http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
  <container qualifier="jbossas-managed" default="true">
     <configuration>
        <property name="jbossHome">target/jboss-as-
7.1.1.Final</property>
     </configuration>
  </container>
</arquillian>
What’s missing?
O JMX Console
O JBoss Messaging 1.0
O JBoss Logging (old implementation)
O VFS – Virtual File System
O Farm deployment (vs Domain settings)
O Same folder structure
O Extensive configuration 
O Clear Documentation 
Lessons Learned
O Seam 2.x (hibernate dependency)
O Hibernate Validators (JPA-2 compliance)
O Apache CXF collision
O Seam Tests failure (Arquillian upgrade)
O JMX console obsolete (jolokia war)
O JSF 1.2 support
O HornetQ learning curve and dns issues.
O MDB and Seam race condition issues.
  [@DependsOn does not work]
O Jboss Logging
Lessons Learned (contd.)
O Hibernate 3.x (JPA 2) support
    O META-INF/persistence.xml
         <property name="jboss.as.jpa.providerModule"
value="hibernate3-bundled" />
O Enable AJP Connector binding
   O <connector name="AJP"
     protocol="AJP/1.3" socket-binding="ajp" />
   O <socket-binding name="ajp" port="8009"/>
O HornetQ clustering (disabled by default)
   O <clustered>true</clustered>
Lessons Learned (contd.)
O    Declare dependencies
META-INF/MANIFEST.MF
           Dependencies: org.apache.log4j
OR

WEB-INF/jboss-deployment-structure.xml
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
   <deployment>
     <exclusions>
       <module name="javax.faces.api" slot="main"/>
       <module name="com.sun.jsf-impl" slot="main"/>
     </exclusions>
     <dependencies>
       <module name="javax.faces.api" slot="1.2" export="true"/>
       <module name="com.sun.jsf-impl" slot="1.2" export="true"/>
     </dependencies>
   </deployment>
</jboss-deployment-structure>
Lessons Learned (contd.)
O Jboss-web.xml (still defines the context)
   <jboss-web>
      <context-root>myapp</context-root>
   </jboss-web>
O HornetQ - DNS entries must exist for IP addresses
  defined for messaging (multicast or otherwise)
O HornetQ – multicast configuration is enabled by default.
O HornetQ - Round Robin Load Balancing configuration.
<connection-load-balancing-policy-class-name>
org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLo
adBalancingPolicy</connection-load-balancing-policy-class-name>
Lessons Learned (contd.)
O JBoss - You can load your own xml by :
  standalone.bat --server-config standalone-
  full-ha.xml
O JBOSS_HOME/docs/schema has
  dtds/xsds defined for validations
O Arquillian – TestSuite still in works.
References
O JBoss AS 7 Configuration, Deployment and Administration.
  Marchioni, Francesco
O Credits: Isaac Christoffersen (Vizuri), Aslak Knutsen (Red
  Hat) and Catherine Robson (Red Hat)
O Links:
   http://www.jboss.org/as7
   https://docs.jboss.org/author/display/AS71/Documentation
   http://Jolokia.org
   http://www.jboss.org/ironjacamar
   http://java.net/projects/mojarra/
   http://jboss.org/hornetq
   http://www.jgroups.org/
   http://arqullian.org
   http://www.jboss.org/resteasy
   http://www.jboss.org/infinispan

JBoss AS Upgrade

  • 1.
    Upgrading to JBoss AS7 Amit Sharma AXS USA LLC amit@axsusa.com 9th Jan 2013
  • 2.
    Index O Cover JbossAS7 O Jboss AS 6.x/5.x comparison O Features O The Architecture O New Components O Lessons learned O References
  • 3.
    JBoss AS7 O 7.0.0.Final– First stable release 12th July 2011 O 7.1.1.Final – released 9th March 2012 O First major shift – common codebase O Major re-write of the underlying architecture O Extensible framework – Immutant (clojure), torquebox (Jruby)
  • 4.
    Client History O Acomplete JBoss Shop O JBoss EAP 6.x O Hibernate 3.3 O Seam 2.x O JBoss Messaging O JMX Console O RestEasy O Jdk 1.6.0_31
  • 5.
    Features JBoss AS7 Website: OBlazingly fast (<3s startup) O Lightweight O Modular core O Elegant administration O Domain management O First class components
  • 6.
    AS7 Architecture O Core: O Jboss Modules (class loading of resources) O Module Service Container (install/uninstall or manage services) O Standalone.xml at the heart of Jboss O Snapshot folder strategy O JSR-299 compliant server (Java EE6) O CDI / Weld supported fully. O Modules are open source projects
  • 7.
    AS7 Architecture (standard) O Hibernate Core (4.0.1.Final) – Default JPA Provider. O RestEasy (2.3.1.GA) O Apache CXF (4.0.1.GA) O Mojarra (JSF 2.0) O JBoss Logging (Java Util Logging) * Jboss/docs/licenses/licenses.xml
  • 8.
  • 9.
    Modules AS Bootstrap libs Server libs 4.x JBOSS_HOME/server JBOSS_HOME/server/<server>/lib 5.x – JBOSS_HOME/server JBOSS_HOME/common/lib and 6.x JBOSS_HOME/server/<server>/lib 7.x JBOSS_HOME/jboss- JBOSS_HOME/modules subfolders. modules.jar
  • 10.
    Standalone.xml O Variants ofstandalone.xml pre-exist. O <extensions> - shared by all applications O These are stored in ‘modules’ O <profile> - collection of subsystems. O One for standalone, multiple for domain. O <interfaces> - bind addresses. O <socket-binding-group> - define ports. O <system-properties> O Define in xml O standalone.bat -P=mypropertiesfile.properties
  • 11.
    Standalone.xml (contd.) O AddingSMTP support O Bring the subsystem <subsystem xmlns="urn:jboss:domain:mail:1.0"> <mail-session jndi-name="java:/Mail" debug="true"> <smtp-server outbound-socket-binding-ref="mail-smtp"/> </mail-session> </subsystem> O Add the socket bindings <outbound-socket-binding name="mail-smtp"> <remote-destination host=“mail.google.com" port="25"/> </outbound-socket-binding>
  • 12.
    Standalone.xml (contd.) O Overidingdefault scanner path <subsystem xmlns="urn:jboss:domain:deployment- scanner:1.1"> <deployment-scanner path="C:/myapp/deployments" scan-interval="5000" auto-deploy-zipped="true" auto- deploy-exploded="true" deployment-timeout="180"/> </subsystem> O Port Offset standalone.bat -Djboss.socket.binding.port- offset=10 [All ports are offset by 10] http://localhost:8090
  • 13.
    Standalone.xml (contd.) O Registeringa database driver (another subsystem) O No common/lib or *ds.xml files <datasources> <datasource jndi-name="java:jboss/datasources/testDS" pool- name="testDS" use-java-context="false"> <connection-url>jdbc:oracle:thin:@myserverip/myschema</connection-url> <driver>oracle</driver> <security> <user-name>amit</user-name> <password>sharma</password> </security> </datasource> <drivers> <driver name="oracle" module="com.oracle.ojdbc6"> <xa-datasource-class>oracle.jdbc.OracleDriver</xa-datasource-class> </driver> </drivers> </datasources> JBOSS_HOMEmodulescomoracleojdbc6mainmodule.xml and jar
  • 14.
    JBoss CLI O Example: <system-properties> <propertyname="hibernate.default_schema“ value="AMIT"/> </system-properties> O Read System properties [standalone@localhost:9999 /] /system- property=hibernate.default_schema:read-resource { "outcome" => "success", "result" => {"value" => "AMIT"} }
  • 15.
    JBoss CLI (contd.) OCommand Line Interface. GUI available as well. O /subsystem=datasources/data-source=ExampleDS/ c:jboss-as-7.1.1.Finalbin>jboss-cli.bat –gui O Command line [standalone@localhost:9999 /] /subsystem=datasources/data-source=ExampleDS:read- attribute(name=connection-url) { "outcome" => "success", "result" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" }
  • 16.
    Deployment O Mechanisms: O Deployments Directory (/standalone/deployments) O CLI (undeploy and then .dodeploy) O Marker files O .deployed or .undeployed markers O .failed O .isdeploying O .isundeploying O Management Console O Eclipse Plugin
  • 17.
    What’s new O HornetQ– default JMS Provider (2.2.11) O Jgroups API Implementation for communication between nodes - UDP and multicast. (3.1.0.GA) O IronJacamar - Java Connector Architecture 1.6 Implementation. (1.0.7.Final) O Infinispan – JSR-107 compatible cache O Handles cluster consistency O Jolokia - JMX-HTTP bridge (JMX with JSON over http) O Arquillian support. O Mod_cluster support. (mod_jk and mod_proxy still works)
  • 18.
    HornetQ O HornetQ isan open source project to build a multi-protocol, embeddable, very high performance, clustered, asynchronous messaging system. O High performance journal mechanism for message persistence (No database persistence) O Provides fully functional JMS capabilities. O Supports JMS 1.1 API. (No code changes) O Provides its own Messaging API. O STOMP and REST support
  • 19.
    HornetQ (contd.) O MDBexample O No Java Impact to MDBs @MessageDriven(name = "MDBExample", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/testQueue") }) public class MDBExample implements MessageListener { public void onMessage(Message message)... }
  • 20.
    HornetQ (contd.) O Wildcardson Addresses rather than specific queue. O filter for the destination - jms.queue.# O Standalone-full-ha.xml <jms-destinations> <jms-queue name="testQueue"> <entry name="queue/test"/> <entry name="java:jboss/exported/jms/queue/test"/> </jms-queue> <jms-topic name="testTopic"> <entry name="topic/test"/> <entry name="java:jboss/exported/jms/topic/test"/> </jms-topic> </jms-destinations>
  • 21.
    HornetQ (contd.) O Integrationwith any JEE App Server must happen via JCA (Java Connector Architecture) Adaptor O A JCA Adapter basically controls the inflow of messages to Message-Driven Beans (MDBs) and the outflow of messages sent from other JEE components, e.g. EJBs and Servlets. O Anti-pattern defined. (See Image)
  • 22.
  • 23.
    JBoss CLI -HornetQ O See a Queue O /subsystem=messaging/hornetq- server=default/:read-children- resources(child-type=jms-queue) O Read a broadcast-group O /subsystem=messaging/hornetq- server=default/:read-children-names(child- type=broadcast-group) O Test a connection data-source test-connection-in-pool --name=testDS
  • 24.
    Jolokia O WAR-Agent (accessto your JMX beans) O Query: http://localhost:8080/jolokia-war- 1.0.6/read/jboss.as:subsystem=datasources,data- source=ExampleDS/connectionUrl?ignoreErrors=true O Result: {"timestamp":1357502024,"status":200,"request":{"m bean":"jboss.as:data- source=ExampleDS,subsystem=datasources","attrib ute":"connectionUrl","type":"read"},"value":"jdbc:h2:m em:test;DB_CLOSE_DELAY=-1"}
  • 25.
    Arquillian O No moremocks and No more container lifecycle and deployment @RunWith(Arquillian.class) public class GreeterTest { @Deployment public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class) .addClass(Greeter.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void should_create_greeting() { assertEquals("Hello, Earthling!", greeter.greet("Earthling")); } }
  • 26.
    Arquillian (contd.) O src/test/resources/arquillian.xml <arquillianxmlns="http://jboss.org/schema/arquillian" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <container qualifier="jbossas-managed" default="true"> <configuration> <property name="jbossHome">target/jboss-as- 7.1.1.Final</property> </configuration> </container> </arquillian>
  • 27.
    What’s missing? O JMXConsole O JBoss Messaging 1.0 O JBoss Logging (old implementation) O VFS – Virtual File System O Farm deployment (vs Domain settings) O Same folder structure O Extensive configuration  O Clear Documentation 
  • 28.
    Lessons Learned O Seam2.x (hibernate dependency) O Hibernate Validators (JPA-2 compliance) O Apache CXF collision O Seam Tests failure (Arquillian upgrade) O JMX console obsolete (jolokia war) O JSF 1.2 support O HornetQ learning curve and dns issues. O MDB and Seam race condition issues. [@DependsOn does not work] O Jboss Logging
  • 29.
    Lessons Learned (contd.) OHibernate 3.x (JPA 2) support O META-INF/persistence.xml <property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" /> O Enable AJP Connector binding O <connector name="AJP" protocol="AJP/1.3" socket-binding="ajp" /> O <socket-binding name="ajp" port="8009"/> O HornetQ clustering (disabled by default) O <clustered>true</clustered>
  • 30.
    Lessons Learned (contd.) O Declare dependencies META-INF/MANIFEST.MF Dependencies: org.apache.log4j OR WEB-INF/jboss-deployment-structure.xml <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> </dependencies> </deployment> </jboss-deployment-structure>
  • 31.
    Lessons Learned (contd.) OJboss-web.xml (still defines the context) <jboss-web> <context-root>myapp</context-root> </jboss-web> O HornetQ - DNS entries must exist for IP addresses defined for messaging (multicast or otherwise) O HornetQ – multicast configuration is enabled by default. O HornetQ - Round Robin Load Balancing configuration. <connection-load-balancing-policy-class-name> org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLo adBalancingPolicy</connection-load-balancing-policy-class-name>
  • 32.
    Lessons Learned (contd.) OJBoss - You can load your own xml by : standalone.bat --server-config standalone- full-ha.xml O JBOSS_HOME/docs/schema has dtds/xsds defined for validations O Arquillian – TestSuite still in works.
  • 33.
    References O JBoss AS7 Configuration, Deployment and Administration. Marchioni, Francesco O Credits: Isaac Christoffersen (Vizuri), Aslak Knutsen (Red Hat) and Catherine Robson (Red Hat) O Links: http://www.jboss.org/as7 https://docs.jboss.org/author/display/AS71/Documentation http://Jolokia.org http://www.jboss.org/ironjacamar http://java.net/projects/mojarra/ http://jboss.org/hornetq http://www.jgroups.org/ http://arqullian.org http://www.jboss.org/resteasy http://www.jboss.org/infinispan