Salient Features of India constitution especially power and functions
JBoss AS Upgrade
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
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 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)
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"));
}
}
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>
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