J2EE Connection Architecture J2EE Container Limitations J2EE

Document Sample
J2EE Connection Architecture J2EE Container Limitations J2EE Powered By Docstoc
					                                                   J2EE Container Limitations
                                              • The Container for various reasons cannot
                                                communicate with the external world
 J2EE Connection Architecture                   directly.
                                              • The Container uses App Server
                                                Extensions to communicate with external
                Dev Bhattacharyya
                                              • JDBC, JavaMail, JNDI, JMS and J2EE CA
                                                are some of the architectures

 J2EE Connection Architecture                         J2EE CA Components
• Uniform Way to integrate J2EE Application   •   Resource Adapters
  Servers with EIS                            •   Data Mapping
• Facilitate Sharing of Data                  •   Message Brokers
• Integrate new J2EE applications with        •   Workflow
• J2EE Connection Architecture is
  mentioned throughout, the Resource
  Adapter is what this presentation
  concentrates on

Integrating the Application with EIS                    Resource Adapters
                                    EIS       • Connecting the Container to the external
  Application                                   world

 App Server            Adapter
 For Resource

         J2EECA Components and
                                                                                                             J2EE CA RA 1.0
                                                                                                  • Connection Management
                                        Application                                               • Transaction Management
                                                                                                  • Security
                                                     Client API
          Application      Contracts
            Server                                                                   EIS

                                        Adapter               EIS Specific

                     J2EE CA RA 1.5                                                                Java Contracts and Interfaces
•   Improved Outbound                                                                             • The J2EE Connector Architecture
•   New Inbound Message and Transactions                                                            specification defines interfaces, which
•   Lifecycle and Workmanagement Contracts                                                          implement the three contracts –
                                                                                                    Connection, Transaction and Security
•   Support for Administered Objects
                                                                                                  • Most of these interfaces are mandatory.
                                                                                                  • Vendors can define and implement their
                                                                                                    own interfaces

        Connection Management                                                                              Connection Factory
                                                                                                  • ConnectionFactory is an interface that
                                        Component                                                   allows an application component to get a
                                                               Client API                           connection to an EIS instance.
                           ConnectionFactory              Connection                              • An application establishes a connection
                                                                                                    through the getConnection method.
     Application                                                                            EIS
                                             Resource                                             • Then, this method must ask the
                                              Adapter                        EIS Specific
                                                                             Interface              application server to allocate a connection
                          ManagedConnectionFactory       ManagedConnection
                                                                                                    through the server's ConnectionManager.
                                                                                                    allocateConnection method.

ConnectionFactory (Sample Code)                                    Connection Factory Code Contd
public class StarJCAConnectionFactory implements                   …
javax.resource.cci.ConnectionFactory {                             …

ManagedConnectionFactory fact = null;                              public Connection getConnection() throws ResourceException {
ConnectionManager cxManager = null;                                System.out.println("In
public StarJCAConnectionFactory(ManagedConnectionFactory fact,     try {
   ConnectionManager cxManager) {                                  StarJCAConnection sconn =
System.out.println("In StarJCAConnectionFactory (constructor)");      (StarJCAConnection)cxManager.allocateConnection(fact, null);
this.fact = fact;                                                  return (javax.resource.cci.Connection)sconn;
if (cxManager == null)                                             } catch (ResourceException ex) {
this.cxManager = new StarJCAConnectionManager();                   throw new ResourceException(ex.getMessage());
else                                                               }
 this.cxManager = cxManager;                                       }

                     Connection                                           Connection (Sample Code)
                                                                   public class StarJCAConnection implements
• The Connection interface provides an                                javax.resource.cci.Connection {

  application with connectivity to an EIS. A                       private StarJCAManagedConnection mc;

  close method must be provided so the                             public StarJCAConnection(StarJCAManagedConnection mc) {
                                                                   System.out.println("In StarJCAConnection");
  application component can terminate the                 = mc;
  connection to the EIS.                                           /* (non-Javadoc)
                                                                    * @see javax.resource.cci.Connection#close()
                                                                   public void close() throws ResourceException {

       Connection Request Info                                                Connection Request Info
                                                                   public class StarJCAConnectionRequestInfo implements ConnectionRequestInfo {
• ConnectionRequestInfo                                            private String user;
                                                                   private String password;
• ConnectionRequestInfo represents a resource                      public StarJCAConnectionRequestInfo(String user, String password) {
                                                                   System.out.println("In StarJCAConnectionRequestInfo");
  adapter's request-specific data. It is passed to                 this.user = user;
                                                                   this.password = password;

  the application server's ConnectionManager.                      }
                                                                   public String getUser() {

  allocateConnection .                                             System.out.println("In StarJCAConnectionRequestInfo.getUser");
                                                                   return user;
• The value null can be used if there is no data to                public String getPassword() {
                                                                   System.out.println("In StarJCAConnectionRequestInfo.getPassword");
  pass.                                                            return password;

• If a resource adapter chooses to implement this                  public boolean equals(Object obj) {
                                                                   System.out.println("In StarJCAConnectionRequestInfo.equals");

  interface, then it must provide the equals and                   if (obj == null)
                                                                   return false;

  hashcode methods to aide the application server                  if (obj instanceof StarJCAConnectionRequestInfo) {
                                                                   StarJCAConnectionRequestInfo other = (StarJCAConnectionRequestInfo) obj;

  in connection pooling.                                           return isEqual(user, other.user)
                                                                   && isEqual(password, other.password);
                                                                   } else {
                                                                   return false;

           Connection Request Info                                         Managed Connection Factory
public int hashCode() {
System.out.println("In StarJCAConnectionRequestInfo.hashCode");         • ManagedConnectionFactory
String result = "" + user + password;
return result.hashCode();
                                                                        • The interface ManagedConnectionFactory either
private boolean isEqual(Object o1, Object o2) {
                                                                          matches an existing connection to the EIS with
System.out.println("In StarJCAConnectionRequestInfo.isEqual");            the incoming request or creates a new physical
if (o1 == null)
return o2 == null;                                                        connection to the EIS.
return o1.equals(o2);
                                                                        • When the application server needs to allocate a
                                                                          connection to the EIS, it asks the resource
                                                                          adapter's ManagedConnectionFactory instance
                                                                          to get either an existing or a new connection.
                                                                        • The configuration of the instance is facilitated by
                                                                          request-specific data.

    Managed Connection Factory                                                      Managed Connection
public class StarJCAManagedConnectionFactory
implements ManagedConnectionFactory, Serializable {
                                                                        • ManagedConnection
public StarJCAManagedConnectionFactory() {
System.out.println("In StarJCAManagedConnectionFactory.constructor");
                                                                        • The ManagedConnection interface provides an application -level
}                                                                         connection handle from the EIS to the resource adapter's
public Object createConnectionFactory(ConnectionManager cxManager)
throws ResourceException {
                                                                          ManagedConnection instance.
System.out.println(                                                     • Communication between the two occurs through listeners and event
"In StarJCAManagedConnectionFactory. createConnectionFactory,1");
return new StarJCAConnectionFactory(this, cxManager);
                                                                          notifications. Support for error logging and tracing must be present.
public Object createConnectionFactory() throws ResourceException {
                                                                        • Metadata about this instance and the EIS can be retrieved by
System.out.println(                                                       invoking getMetaData, which returns information encapsulated in a
"In StarJCAManagedConnectionFactory.createManagedFactory,2");
return new StarJCAConnectionFactory(this, null);
                                                                          ManagedConnectionMetaData instance.
}                                                                       • The interface also provides methods, like cleanup, to reinitialize the
public ManagedConnection createManagedConnection(
Subject subject,
                                                                          instance and free resources after communication ceases.
ConnectionRequestInfo info) {
                                                                        • The instance does not close the connection, however. This is
"In StarJCAManagedConnectionFactory. createManagedConnection");           handled by the application server so connection pooling can be
return new StarJCAManagedConnection(this, "test");
public int hashCode() {
return 1;

    Managed Connection (Sample)                                         Managed Connection MetaData
public class StarJCAManagedConnection implements ManagedConnection {
private StarJCAConnectionEventListener myListener;
private String user;
                                                                        • ManagedConnectionMetaData
private ManagedConnectionFactory mcf;
private PrintWriter logWriter;
private boolean destroyed;
                                                                        • ManagedConnectionMetaData facilitates the
private Set connectionSet;
StarJCAManagedConnection(ManagedConnectionFactory mcf, String user) {
                                                                          retrieval of metadata about a
System.out.println("In StarJCAManagedConnection");
this.mcf = mcf;                                                           ManagedConnection instance and the particular
this.user = user;
connectionSet = new HashSet();                                            EIS.
myListener = new StarJCAConnectionEventListener(this);
public Object getConnection(                                            • The metadata must provide the enterprise
Subject subject,
ConnectionRequestInfo connectionRequestInfo)
throws ResourceException {
                                                                          information system's product name and version,
System.out.println("In StarJCAManagedConnection.getConnection");
StarJCAConnection myCon = new StarJCAConnection(this);
                                                                          the maximum number of concurrent
return myCon;
                                                                          connections that it can support, and the
                                                                          username associated with the connection.

Managed Connection MetaData                                                                 Transaction Management
public class StarJCAConnectionMetaData implements ManagedConnectionMetaData {
private StarJCAManagedConnection mc;
public StarJCAConnectionMetaData (StarJCAManagedConnection mc) {
System.out.println("In StarJCAConnectionMetaData. constructor"); = mc;
}                                                                                                                           ManagedConnection
public String getEISProductName() throws ResourceException {
System.out.println("In StarJCAConnectionMetaData.getEISProductName");
return "myJCA";
public String getEISProductVersion() throws ResourceException {
System.out.println("In StarJCAConnectionMetaData.getEISProductVersion");
return "1.0";                                                                              Application                               Resource
public int getMaxConnections() throws ResourceException {                                    Server                                   Adapter                                       EIS
System.out.println("In StarJCAConnectionMetaData.getMaxConnections");
return 5;
}                                                                                                                             Local Transaction
public String getUserName() throws ResourceException {
return mc.getUserName();
}                                                                                                                                 XA Resource                         EIS Specific

                          Transactions                                                                   Security Interfaces
• Transaction Management Interfaces                                             • The security contract enables secure
• The transaction management interfaces provide a
  framework that the application server uses to manage                            access to the EIS from the application
  and perform transactions with the EIS for the enterprise                        component. The security contract is
• These transactions are referred to as JTA or XA
                                                                                  adhered to by incorporating the J2EE Java
  transactions because the transactions are performed                             Authentication and Authorization Service
  across a variety of enterprise information systems.                             (JAAS) into the connection management
• XA transactions are defined in the Java Transaction API
  (JTA) specification. The resource adapter can support                           interfaces.
  either local transactions, both types of transactions, or
  neither type of transaction.

                                Security                                                 Defining the Meta Contents
                                                                                <?xml version="1.0" encoding="UTF-8"?>
• Subject - A Subject represents a grouping of related                          <!DOCTYPE connector PUBLIC "-//Sun Microsystems, Inc.//DTD Connector 1.0//EN"

  information for a single entity, such as a person. It                         <connector>
                                                                                  <description>Starwood ResourceAdapter</description>
  includes identities, each known as a Principal , and                            <vendor-name>Starwood</vendor-name>

  security-related attributes, which are called Credentials.                      <eis-type>RRA</eis-type>
  The subject is passed to the resource adapter by the                              <description>Starwood ResourceAdapter</description>
  application server for authentication and authorization.                        </license>
                                                                                    <managedconnectionfactory-class>com.starwood.jca.StarJCAManagedConnectionFactory      </managedconnectionfactory-
• Principal - As mentioned above, a Principal represents                             class>
                                                                                    <connectionfactory-interface>javax.resource.cci.ConnectionFactory      </connectionfactory-interface>
                                                                                    <connectionfactory-impl-class>com.starwood.jca.StarJCAConnectionFactory      </connectionfactory-impl-class>
  an identity.                                                                      <connection-interface>javax.resource.cci.Connection
• Generic Credential - The Generic Credential interface                             <authentication-mechanism>
                                                                                      <description>BasicPassword authentication </description>
  defines a way to access the security credentials of a                               <authentication-mechanism-type>BasicPassword</authentication-mechanism-type>

  Principal. With this interface, the resource adapter is                           </authentication-mechanism>
                                                                                      <description>Kerbv5 Authentication </description>
  able to retrieve the credentials passed from the                                    <authentication-mechanism-type>Kerbv5</authentication-mechanism-type>

  application server.                                                               </authentication-mechanism>

     Building the Adapter (ANT Build)                                                                                                     Clients
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE connector PUBLIC "-//Sun Microsystems, Inc.//DTD Connector 1.0//EN" "file://c:/connector_1_0.dtd">
<project default="build">
  <property value="C:\redhat_8\jboss\jboss-3.0.4\server\default\lib\jboss-j2ee.jar" name="j2ee.jar"/>
                                                                                                               • Non-Managed
  <target name="init">
    <delete dir="classes"/>
    <mkdir dir="classes"/>
    <mkdir dir="javadoc"/>
                                                                                                                    – POJOs and Servlets connecting directly.
  <target name="build" depends="init">
    <javac debug="on" destdir="classes">
                                                                                                               • Managed
        <pathelement location="${j2ee.jar}"/>
      <src path="."/>
                                                                                                                    – Through Session Beans and MBeans
    <jar jarfile="starjca.jar">
      <fileset dir="classes">
        <include name="**/jca/**"/>
    <jar destfile="starjca.rar">
      <fileset dir=".">
       <include name="starjca.jar"/>
       <include name="META-INF/**"/>

      Client (Non-Managed POJO)                                                                                                Client (Managed)
public TestClient() {
try {                                                                                                               Context initCtx = null;
System.out.println("In TestClient - Non Managed Connection Started");
mcf = new StarJCAManagedConnectionFactory();                                                                        Object obj = null;
cxf =                                                                                                               try {
(javax.resource.cci.ConnectionFactory) mcf                                                                            initCtx = getInitialContext();
connection = cxf.getConnection();                                                                                     Object ref = initCtx.lookup("java:/StarJCA");
StarJCAInteractionSpec spec = new StarJCAInteractionSpec();                                                         } catch (Exception e) {
StarJCARecord result = new StarJCARecord();                                                                                      "Error with context: " + e);
StarJCAInteraction six = (StarJCAInteraction) connection.createInteraction();                                           e.printStackTrace();
System.out.println("In TestClient Interaction Received");
result = (StarJCARecord)six.execute(spec, null);
System.out.println("In TestClient Result " + result.getRecordName());                                           }
six = (StarJCAInteraction) connection.createInteraction();
System.out.println("In TestClient Interaction Received");
result = (StarJCARecord)six.execute(spec, null);
System.out.println("In TestClient Result " + result.getRecordName());
} catch (Exception ex) { ex.printStackTrace(); }

                      JBoss Configuration                                                                                    Deploying the RAR
• Starjca-ds.xml                                                                                               • Run the ANT Script
<?xml version="1.0" encoding="UTF-8"?>
<connection-factories>                                                                                         • Copy the RAR file to
                                                                                                               • /server/default/deploy folder within JBoss
                                                                                                                 4 installation

<!-- call the transaction connection factory -->
<!-- tx-connection-factory -->

                               References                                                        Questions
•   JBoss 4.0 Documentation
•   Sun Java Site.                                                                           • Email:
     –   The J2EE Connector Architecture's Resource Adapter
     –   Jennifer Rodoni
•   IBM Red Books:
     –   Build JCA-compliant resource adapters with WebSphere Studio Application Developer
     –   Michael McMahon (, Advisory Software Engineer, IBM
     –   Mikhail Genkin ( ), Technical Solution Designer, IBM
•   Connect the enterprise with the JCA Part 1 and 2
     –   Java World - Dirk Reinshagen
•   Sun Java Site.
     –   Creating Resource Adapters with J2EE Connector Architecture 1.5
     –   Alejandro E. Murillo and Binod P. G.,
•   Sun Java Site.
     –   J2EE Connection Architecture Specs