Upgrade to JBoss AS7

Uploaded on


More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads


Total Views
On Slideshare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. Upgrading to JBoss AS7 Amit Sharma AXS USA LLC amit@axsusa.com 9th Jan 2013
  • 2. 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
  • 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 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
  • 5. Features JBoss AS7 Website: O Blazingly 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. Folder Structure
  • 9. Modules AS Bootstrap libs Server libs 4.x JBOSS_HOME/server JBOSS_HOME/server/<server>/lib 5.x – 6.x JBOSS_HOME/server JBOSS_HOME/common/lib and JBOSS_HOME/server/<server>/lib 7.x JBOSS_HOME/jboss- modules.jar JBOSS_HOME/modules subfolders.
  • 10. 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
  • 11. 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>
  • 12. 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
  • 13. 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
  • 14. 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"} }
  • 15. 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" }
  • 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 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
  • 19. 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)... }
  • 20. 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>
  • 21. 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)
  • 22. HornetQ (contd.) O Anti-Pattern
  • 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 (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"}
  • 25. 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")); } }
  • 26. 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>
  • 27. 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 
  • 28. 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
  • 29. 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>
  • 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.) 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>
  • 32. 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.
  • 33. 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