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
|