Top Banner
Upgrading to JBoss AS7 Amit Sharma AXS USA LLC [email protected] 9 th Jan 2013
33
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Upgrade to JBoss AS7

Upgrading to JBoss AS7

Amit SharmaAXS USA LLC

[email protected] Jan 2013

Page 2: Upgrade to JBoss AS7

IndexO Cover Jboss AS7

O Jboss AS 6.x/5.x comparisonO FeaturesO The ArchitectureO New ComponentsO Lessons learnedO References

Page 3: Upgrade to JBoss AS7

JBoss AS7O 7.0.0.Final – First stable release 12th

July 2011O 7.1.1.Final – released 9th March

2012O First major shift – common codebaseO Major re-write of the underlying

architectureO Extensible framework – Immutant

(clojure), torquebox (Jruby)

Page 4: Upgrade to JBoss AS7

Client HistoryO A complete JBoss Shop

O JBoss EAP 6.x O Hibernate 3.3O Seam 2.xO JBoss MessagingO JMX ConsoleO RestEasy O Jdk 1.6.0_31

Page 5: Upgrade to JBoss AS7

Features

JBoss AS7 Website:O Blazingly fast (<3s startup)O LightweightO Modular coreO Elegant administrationO Domain managementO First class components

Page 6: Upgrade to JBoss AS7

AS7 ArchitectureO Core:

O Jboss Modules (class loading of resources)

O Module Service Container (install/uninstall or manage services)

O Standalone.xml at the heart of JbossO Snapshot folder strategy

O JSR-299 compliant server (Java EE6)O CDI / Weld supported fully.

O Modules are open source projects

Page 7: Upgrade to JBoss AS7

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

Page 8: Upgrade to JBoss AS7

Folder Structure

Page 9: Upgrade to JBoss AS7

ModulesAS 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 andJBOSS_HOME/server/<server>/lib

7.x JBOSS_HOME/jboss-modules.jar

JBOSS_HOME/modules subfolders.

Page 10: Upgrade to JBoss AS7

Standalone.xmlO 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 xmlO standalone.bat -P=mypropertiesfile.properties

Page 11: Upgrade to JBoss AS7

Standalone.xml (contd.)

O Adding SMTP supportO 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>

Page 12: Upgrade to JBoss AS7

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

Page 13: Upgrade to JBoss AS7

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_HOME\modules\com\oracle\ojdbc6\main\module.xml and jar

Page 14: Upgrade to JBoss AS7

JBoss CLIO 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"}

}

Page 15: Upgrade to JBoss AS7

JBoss CLI (contd.)O Command Line Interface. GUI available as well.

O /subsystem=datasources/data-source=ExampleDS/c:\jboss-as-7.1.1.Final\bin>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"}

Page 16: Upgrade to JBoss AS7

DeploymentO Mechanisms:

O Deployments Directory (/standalone/deployments)

O CLI (undeploy and then .dodeploy)O Marker files

O .deployed or .undeployed markersO .failedO .isdeployingO .isundeploying

O Management ConsoleO Eclipse Plugin

Page 17: Upgrade to JBoss AS7

What’s newO 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 consistencyO Jolokia - JMX-HTTP bridge (JMX with JSON over

http)O Arquillian support.O Mod_cluster support. (mod_jk and mod_proxy still

works)

Page 18: Upgrade to JBoss AS7

HornetQO 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

Page 19: Upgrade to JBoss AS7

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)...}

Page 20: Upgrade to JBoss AS7

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>

Page 21: Upgrade to JBoss AS7

HornetQ (contd.)O Integration with any JEE App Server

must happen via JCA (Java Connector Architecture) AdaptorO 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)

Page 22: Upgrade to JBoss AS7

HornetQ (contd.)O Anti-Pattern

Page 23: Upgrade to JBoss AS7

JBoss CLI - HornetQO See a Queue

O /subsystem=messaging/hornetq-server=default/:read-children-resources(child-type=jms-queue)

O Read a broadcast-groupO /subsystem=messaging/hornetq-

server=default/:read-children-names(child-type=broadcast-group)

O Test a connection data-source test-connection-in-pool --name=testDS

Page 24: Upgrade to JBoss AS7

JolokiaO 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=trueO Result:{"timestamp":1357502024,"status":200,"request":{"mbean":"jboss.as:data-source=ExampleDS,subsystem=datasources","attribute":"connectionUrl","type":"read"},"value":"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"}

Page 25: Upgrade to JBoss AS7

ArquillianO 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"); }@InjectGreeter greeter;@Testpublic void should_create_greeting() { assertEquals("Hello, Earthling!", greeter.greet("Earthling")); }}

Page 26: Upgrade to JBoss AS7

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>

Page 27: Upgrade to JBoss AS7

What’s missing?O JMX ConsoleO JBoss Messaging 1.0O JBoss Logging (old implementation)O VFS – Virtual File SystemO Farm deployment (vs Domain

settings)O Same folder structureO Extensive configuration O Clear Documentation

Page 28: Upgrade to JBoss AS7

Lessons LearnedO Seam 2.x (hibernate dependency)O Hibernate Validators (JPA-2 compliance) O Apache CXF collisionO Seam Tests failure (Arquillian upgrade)O JMX console obsolete (jolokia war)O JSF 1.2 supportO HornetQ learning curve and dns issues.O MDB and Seam race condition issues.

[@DependsOn does not work]O Jboss Logging

Page 29: Upgrade to JBoss AS7

Lessons Learned (contd.)

O Hibernate 3.x (JPA 2) supportO META-INF/persistence.xml

<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />

O Enable AJP Connector bindingO <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>

Page 30: Upgrade to JBoss AS7

Lessons Learned (contd.)

O Declare dependenciesMETA-INF/MANIFEST.MF

Dependencies: org.apache.log4jOR

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>

Page 31: Upgrade to JBoss AS7

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.RoundRobinConnectionLoadBalancingPolicy</connection-load-balancing-policy-class-name>

Page 32: Upgrade to JBoss AS7

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.

Page 33: Upgrade to JBoss AS7

ReferencesO JBoss AS 7 Configuration, Deployment and Administration.

Marchioni, FrancescoO Credits: Isaac Christoffersen (Vizuri), Aslak Knutsen (Red

Hat) and Catherine Robson (Red Hat) O Links:

http://www.jboss.org/as7https://docs.jboss.org/author/display/AS71/Documentationhttp://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