Upgrading to JBoss AS7 Amit Sharma AXS USA LLC MCJUG on 20 th Feb
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 Final – First stable release 12 th July 2011 O Final – released 9 th 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 Services start concurrently now. O Lightweight O Metadata indexing that keeps small footprints. O Modular core O Efficient class loading for your app. O Elegant administration O CLI as well as web console. O Domain management O Port offsets, network interface binding. 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 ASBootstrap libsServer libs 4.xJBOSS_HOME/serverJBOSS_HOME/server/ /lib 5.x – 6.x JBOSS_HOME/serverJBOSS_HOME/common/lib and JBOSS_HOME/server/ /lib 7.xJBOSS_HOME/jboss- modules.jar JBOSS_HOME/modules subfolders.
Standalone.xml O Variants of standalone.xml pre-exist. O - shared by all applications O These are stored in ‘modules’ O - collection of subsystems. O One for standalone, multiple for domain. O - bind addresses. O - define ports. O O Define in xml O standalone.bat -P=mypropertiesfile.properties
Standalone.xml (contd.) O Adding SMTP support O Bring the subsystem O Add the socket bindings
Standalone.xml (contd.) O Overiding default scanner path O Port Offset standalone.bat -Djboss.socket.binding.port- offset=10 [All ports are offset by 10]
Standalone.xml (contd.) O Registering a database driver (another subsystem) O No common/lib or *ds.xml files oracle amit sharma oracle.jdbc.OracleDriver JBOSS_HOME\modules\com\oracle\ojdbc6\main\module.xml and jar
JBoss CLI O Example: O Read System properties /] /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 Final\bin>jboss-cli.bat –gui O Command line /] /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 = "MDBExample", activationConfig = = "destinationType", propertyValue = = "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
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: /read/jboss.as:subsystem=datasources,data- source=ExampleDS/connectionUrl?ignoreErrors=true O Result: {"timestamp": ,"status":200,"request":{"mb ean":"jboss.as:data- source=ExampleDS,subsystem=datasources","attribute" :"connectionUrl","type":"read"},"value":"jdbc:h2:mem:test ;DB_CLOSE_DELAY=-1"}
Arquillian O No more mocks and No more container lifecycle and public class GreeterTest public static JavaArchive createDeployment() { return ShrinkWrap.create(JavaArchive.class).addClass(Greeter.class).addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); Greeter public void should_create_greeting() { assertEquals("Hello, Earthling!", greeter.greet("Earthling")); }
Arquillian (contd.) O src/test/resources/arquillian.xml <arquillian xmlns=" xmlns:xsi=" xsi:schemaLocation=" target/jboss-as Final
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. does not work] O Jboss Logging
Lessons Learned (contd.) O Hibernate 3.x (JPA 2) support O META-INF/persistence.xml O Enable AJP Connector binding O O HornetQ clustering (disabled by default) O true
Lessons Learned (contd.) O Declare dependencies META-INF/MANIFEST.MF Dependencies: org.apache.log4j OR WEB-INF/jboss-deployment-structure.xml
Lessons Learned (contd.) O Jboss-web.xml (still defines the context) myapp 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. org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLoadB alancingPolicy
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:
Questions?