MokaByte 99 - 7mbre 2005
 
MokaByte 99 - 7mbre 2005 Prima pagina Cerca Home Page

 

 

 

Integrazione di applicazioni Enterprise
Parte VIII: l'Enterprise Integration Component Server di Librados

Affrontiamo il problema della integrazionecon un approccio che si focalizza principalmente sulla Legacy Integration.

Introduzione
Nei precedenti articoli apparsi nella sezione di Mokabyte dedicata all'integrazione si sono presentati diversi possibili approcci all'integrazione in ambito Enterprise.

In particolare sono state introdotte le seguenti tipologie d'integrazione:

  • Punto-Punto (P2P): si implementano delle connessioni punto a punto tra le Applicazioni oggetto dell'integrazione ponendo l'accento sul singolo problema di comunicazione (vedere [MOKA_INT6]).
  • Middleware Based: questo approccio prevede l'introduzione di uno strato di Middleware che, agendo da intermediario, centralizza sia le problematiche puntuali di connessione che quelle più ampie d'integrazione come il mapping, routing e transformation. Come Middleware d'integrazione si è parlato sia degli Integration Broker (vedere [MOKA_INT7]) che degli ESB (vedere [MOKA_ESB]).

 


Figura 1:
Integrazione P2P, Middleware-Based

 

  • Application Server-based: è un approccio di integrazione per così dire "diretto", che prevede di utilizzare una semplice tecnologia di connessione, demandando allo strato applicativo le altre problematiche di integrazione (mapping, routing, transformation, …). Una soluzione tipica prevede l'adozione dei connettori JCA e degli strumenti di sviluppo ad essi associati (vedere [MOKABOOK2_JCA], [MOKA_JCA5_CICS]). Con tale approccio si ha che nell'Application Server risiederà sia la logica di business che la logica di integrazione.


Figura 2: Approccio d'integrazione "diretto": Connettori JCA


Si può dire che tale approccio è a "metà strada" tra l'integrazione diretta (application server based) e l'integrazione Middleware-based.
Questo approccio, definito da Gartner come Programmatic Integration Servers (vedere http://www.gartner.com), identifica una famiglia di prodotti per l'integrazione non intrusiva per esporre i Sistemi Legacy verso applicazioni sviluppate con nuove piattaforme. L'approccio non intrusivo si basa sul semplice riutilizzo (wrapping) del Legacy "as is". Tipicamente tali applicazioni lasciano inalterata la granularità delle funzionalità Host, limitandosi ad esporle con nuove tecnologie per un utilizzo da programma ("programmatico").
E' bene notare che tale famiglia di prodotti fornisce una via "tattica" alla realizzazione di Sistemi applicativi "nuovi" (dal punto di vista tecnologico e di obiettivi), sviluppati senza volere/dovere ristrutturare i propri sistemi Legaci, rappresentando una soluzione "a basso costo"e "a basso rischio" rispetto ai "costosi" Integration Broker.
L'altra faccia della medaglia è che generalmente tali prodotti forniscono un'infrastruttura e degli strumenti di sviluppo/manutenzione proprietari (quindi non standard) introducendo un potenziale vendor lock-in e non sono pensati per rispondere ad esigenze d'integrazione più ampie (come ad esempio il Business Process Management).
In questo articolo si vedrà l'utilizzo pratico del prodotto Librados.

 

Librados: Resource Adapter & Enterprise Integration Component Server
Nell'ambito dell'integrazione, i prodotti open source non hanno ancora raggiunto i livelli di credibilità raggiunti nell'area dei Platform Middleware (JBoss su tutti). Sicuramente è degno di nota l'accordo di collaborazione tra JBoss e Librados (vedere [JB_LIBRA_GRTNR]) finalizzato a fornire una soluzione d'integrazione "a basso costo" combinando un prodotto open source (JBoss) e un prodotto "cost-effective" (Librados). I sorgenti degli adapter di Librados sono rilasciati come "open source" al cliente nel momento in cui viene effettuato un contratto di manutenzione e supporto (Royalty Free Source Code).
La partnership tra l'open source JBoss e l'opzione royalty-free source code di Librados rappresenta una potenziale soluzione "low cost" di integrazione concorrenziale rispetto ad esempio ai costosi Integration Broker.

La suite di Resource Adapters JCA (RA) di Librados è costituita da circa una cinquantina di connettori JCA installabili nei maggiori Application Server di mercato come JBoss, IBM Websphere, Bea Weblogic, Oracle e Sun One e coprono le principali necessità di collegamento ai principali EIS (CICS, IMS, MQ, DBMS(Oracle, DB2, MS SQL Server, NCR Teradata, …) SAP/3, Siebel, PeopleSoft, ecc…).



Figura 3: i RA di Librados

Il tool di Librados però non mette a disposizione i soli connettori, ma anche l'Enterprise Integration Component Server (EICS): un ambiente di runtime proprietario per l'utilizzo dei Resource Adapter stessi.
L'architettura dell'EICS prevede dei componenti infrastrutturali che permettono l'esecuzione dei Resource Adapter senza dovere sviluppare dei componenti Enterprise ad hoc quali EJB e/o Servlet per potere utilizzare i RA.
Questi componenti sono di fatto dei "controllori di frontiera" che permettono l'invocazione dei RA mediante uno scambio dati in formato XML con differenti protocolli quali IIOP, JMS e SOAP.


Figura 4: EICS

Rispetto quindi a soluzioni che forniscono prettamente librerie di Resource Adapter per così dire "passive", come ad esempio i RA Comporsys visti in [MOKA_JCA_CISCS] che si "limitano" a fornire la connettività per CICS, IMS e MQ, Librados fornisce anche componenti "attivi" che permettono un'interfacciamento uniforme e "ready-to-use" del RA.
In [MOKA_JCA5_CICS] si è visto che, per utilizzare il Resource Adapter Comporsys per CICS si è dovuto sviluppare un EJB (MokaCicsEciBean) ad hoc:

public class MokaCicsEciBean implements SessionBean {
. . . . .
public long getLength(String text) {
Connection connection = null;
Interaction interaction=null;
try {
InitialContext ic = new InitialContext();
Object obj = ic.lookup("java:comp/env/eis/cics");
ConnectionFactory cciCf=(ConnectionFactory)obj;
ConnectionSpecImpl connSpec = new ConnectionSpecImpl("ale", "maio");
connection = cciCf.getConnection(connSpec);
interaction = connection.createInteraction() ;
InteractionSpecImpl spec = new de.comporsys.connector.cics.cci.InteractionSpecImpl();
spec.setFunctionName("MY_PGM_COB");
MOKARECORD input = new MOKARECORD();
MOKARECORD output = new MOKARECORD();
input.setWS_STRINGA(text);
interaction.execute(spec, input, output);
return output.getWS_COUNTER();
} catch( javax.naming.NamingException e ) {
. . .
} catch( javax.resource.ResourceException e ) {
. . .
}
}


Figura 5: Utilizzo di un connettore JCA

Mentre con un approccio "diretto" di utilizzo di un connettore JCA è a carico dell'applicativo sviluppare il componente che lo utilizza (sia esso una Servlet o un EJB), con Librados il componente Enterprise è già disponibile con l'EICS.

Di seguito si riporta un estratto del codice per utilizzare un connettore JCA utilizzando le API proprietarie Librados che incapsulano la comunicazione via IIOP con l'EJB infrastrutturale (IntegrationComponent ) dell'EICS.

Il client deve importare le API necessarie per l'interazione con l'EJB Integration Component dell'EICS

import org.jdom.*;
import org.jdom.input.SAXBuilder;

import com.librados.eics.component.*;
import com.librados.eics.exception.EICSException;
import com.librados.ra.cci.JDOMRecord;

public class EICSClient {
. . . .
public void run(){
// initialize application server connection properties
Hashtable ht = new Hashtable();
ht.put(Context.PROVIDER_URL, <<Provider URL>>);
ht.put(Context.INITIAL_CONTEXT_FACTORY, <<Connection Factory>>);
. . . .
try{

inizializzare opportunamento il JNDI Context

Context ctx = new InitialContext(ht);

richiedere l'Integration Component d'interesse specificando il nome del componente d'interesse

IntegrationComponentMgr icm = IntegrationComponentMgrFactory.getInstance(ctx);
IntegrationComponent ic = icm.getIntegrationComponent(integrationComponentName);

Da notare che la classe Librados IntegrationComponentMgr di fatto utilizza al suo interno la
lookup della Home interface dell'EJB Component (com.librados.eics.component.IntegrationComponentHome) e la crezione della Remote Interface com.librados.eics.component.IntegrationComponentRemote.

Object obj=context.lookup("librados/IntegrationComponent")
IntegrationComponentHome integComponentHome = (IntegrationComponentHome)
PortableRemoteObject.narrow(obj, IntegrationComponentHome.class);
IntegrationComponentRemote integComp = integComponentHome.create(descriptor);

Mediante l'interfaccia IntegratonComponentRemote è possibile interagire con il RA mediante record di classe com.librados.ra.cci.JDOMRecord

Document requestXML = = buildRequest();
JDOMRecord input = new JDOMRecord();
input.setDocument(requestXML);

ed invocare l'operazione di business mediante il metodo executeBusinessMethod()

JDOMRecord response = (JDOMRecord)ic.executeBusinessMethod(methodName, input);
Document responseXML = response.getDocument();



Figura 6: Utilizzo di un Connettore JCA via IIOP mediante le API EICS di Librados

Rispetto quindi al tradizionale utilizzo dei RA con Librados non si devono sviluppare i componenti Enterprise per essere in grado di utilizzare i RA stessi. L'approccio di Librados è comunque incentrato su API proprietarie Java e quindi dipendenti dalle proprie librerie; quindi è un approccio meno standard rispetto all'utilizzo diretto di connettori JCA.
Esempio di utilizzo del RA Flat File.
Descritta l'architettura di Librados, vediamo un esempio di funzionamento del connettore Librados Flat File per la lettura di file ASCII.
L'installazione prevede il deploy dell'EICS sull'AS d'interesse selezionabile in fase di installazione.



Figura 7: Creazione dell'EAR EICS per l'AS JBoss


Dopo avere completato l'installazione, è possibile collegarsi alla console Web dell'EICS specificand l'opportuno URL (es: per JBoss è http://localhost:8080/eics, per weblogic è http://localhost:7001/eics, per WebSphere: http://localhost:9080/eics ecc…) per creare e configurare opportunamente il RA.



Figura 8: Creazione di un Integration Component

Nell'esempio proposto si indica che il Resource Adapter (utilizzato da un componente di nome MokaFF) dovrà leggere un file di tipo ASCII all'interno del quale ci saranno due campi (nome e cognome) di tipo String.



Figura 9: Configurazione del RA Flat File

Viene quindi generato automaticamente uno schema (MokaFF_prova_RQ.xsd) che verrà utilizzato per validare i file contenenti le richieste del client.



Figura 10: Schema della Request(RQ) e della Response(RS)

A questo punto è possibile creare un test per verificare che quanto fatto sia corretto.



Figura 11: Test e memorizzazione della richiesta XML (RQ)

Per verificare il funzionamento del RA dai diversi entry-point possibili (IIOP, JMS, WS), è possibile utilizzare dei programmi client sample che si aspettano di leggere i dati di input da un file di configurazione (il nome del componente d'interesse, il nome del metodo da invocare, il nome del file XML contenente la richiesta, il nome del file XML dove memorizzare la risposta, il Provider URL, il Context Factory relativi, l'eventuale destinazione JMS, ecc …).
E' così possibile accedere al RA MokaFF mediante IIOP (vedere figura 6), JMS (vedere figura 12) e SOAP (vedere figura 13).



Figura 12: Utilizzo del Connettore JCA via JMS



Figura 13: Utilizzo delConnettore JCA via SOAP

 

Conclusioni
In questo articolo si è presentato un esempio di utilizzo dell'Enterprise Integration Component Server, il runtime environment di Librados che permette l'utilizzo di connettori JCA.

 

Bibliografia e riferimenti
[MOKA_INT6] S.Rossini: Integrazione di applicazioni Enterprise (VI) Mokabyte N.83-Marzo 2004
[MOKA_INT7] S.Rossini-G.Morello: Integrazione di applicazioni Enterprise (parte VII): l'Integration Middleware -Mokabyte N.88 - Settembre 2004
[MOKABOOK2_JCA] S.Rossini-G.Morello: "Manuale pratico di Java: La piattafroma J2EE" (Capitolo 12: JCA), Ed.HOPS-2004 [http://www.mokabyte.it/manualejava2/download.htm]
[MOKA_JCA5_CICS] S. Rossini: JCA (VI): un Resource A-dapter per accedere a CICS - Mokabyte N.89 - Ottobre 2004
[MOKA_ESB] S. Rossini: Enterprise Service Bus (Seminario Sonic Sftware) - Mokabyte N.96 - Maggio 2005
[JB_LIBRA_GRTNR] JBoss, Librados Take Open Source to the Integration Market - http://www.librados.com/
[JBOSS_LIBRADOS] M. Singer: JBoss Adds Librados for 'Beyond J2EE' - http://www.interentnews.com/dev-news/article.php/2239311
[LIBRADOS] http://www.librados.com/index.php
[LIBWP] J. Campigli, N. Akhtar: The Critical Last Mile Of Application Integration: Librados JCA Plus Adapters - http://www.librados.com/wp.php
[OSISJ] Open Source Integration Solutions Written In Java:
http://www.manageability.org/blog/stuff/open-source-messaging-integration-transformation-routing-java/view