Top Banner
Upgrading to JBoss AS7 Amit Sharma AXS USA LLC [email protected] 9 th Jan 2013
33

JBoss AS Upgrade

May 19, 2015

Download

Education

sharmami

Upgrading to JBoss AS7? Read this first.
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: JBoss AS Upgrade

Upgrading to JBoss AS7

Amit SharmaAXS USA LLC

[email protected] Jan 2013

Page 2: JBoss AS Upgrade

IndexO Cover Jboss AS7

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

Page 3: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

Features

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

Page 6: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

Folder Structure

Page 9: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

HornetQ (contd.)O Anti-Pattern

Page 23: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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: JBoss AS Upgrade

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