Creazione di bean Java J2C mediante script Ant

È possibile utilizzare script Ant per richiamare componenti J2C, richiamando tali script dal workbench o dalla riga comandi.

Ci sono alcune situazioni in cui è possibile che si desideri ricreare i beanJava J2C e/o i bean di binding di dati (ad esempio, se il quaderno COBOL aggiunge un nuovo campo). Questo può essere effettuato utilizzando il file di definizione Ant che emula l'interazione tra l'utente e i componenti J2C sottostanti.

Le procedure guidate J2C consentono di creare velocemente un file di configurazione Ant catturando le selezioni ed i valori immessi. Poiché un file di configurazione Ant è essenzialmente un file XML, può essere modificato o generato interamente a mano.

Un file di configurazione Ant consiste in un albero di destinazione in cui vengono eseguite diverse attività. Le attività in una destinazione vengono elaborate in modo sequenziale. Ciascuna attività viene eseguita tramite un oggetto che implementa una particolare interfaccia dell'attività. Quando viene richiamato un file di configurazione Ant, le proprietà corrispondenti a ciascuna attività vengono caricate negli oggetti attività di implementazione. Una volta caricate le informazioni, viene richiamato l'oggetto attività.

Attività di rilevamento dati

In genere, un ciclo di rilevamento è suddiviso in due fasi, ognuna delle quali viene effettuata da un componente diverso:
  • • Gli agenti di rilevamento effettuano l'importazione effettiva dei dati (vedere attività performImport nello script di esempio) per produrre metadati proprietari denominati risultato importazione
  • • Le utilità di scrittura risorse utilizzano il risultato dell'importazione (vedere attività writeToWorkspace nello script di esempio) per produrre risorse dell'applicazione appropriate.
Durante le fasi di importazione e generazione, l'agente di rilevamento e l'utilità di scrittura risorse richiedono l'inserimento di una serie di input da parte dell'utente. Ad esempio, nella fase di Query, ogni agente di rilevamento avrà una diversa serie di parametri utilizzati per definire una query sul repository di metadati corrispondente. L'agente di rilevamento e l'utilità di scrittura risorse possono essere collegati in vari modi per importare e generare la risorsa desiderata. Questi vengono identificati dal loro nome (QName). Ad esempio, l'agente di rilevamento Cobol può essere identificato dal seguente nome: {com/ibm/adapter}CobolDiscoveryAgent
Il seguente script di esempio illustra la procedura per la generazione dell'interfaccia java J2C, l'implementazione java J2C nonché le classi di binding dati in base al file COBOL taderc99.cbl e all'importazione di ECIResourceAdapter versione 6.0.2.
<adapter:discover>
	<adapter:performImport agent="{com/ibm/adapter}CobolDiscoveryAgent">
		<adapter:importResource>
			<adapter:propertyGroup name="CobolFileGroup">
				<adapter:propertyElement name="CobolFile" value="/${project}/taderc99.ccp"/>
			</adapter:propertyGroup>
		</adapter:importResource>
		<adapter:queryProperties>
			<adapter:propertyGroup name="ImportProperties">
				<adapter:propertyElement name="Platform" value="Win32"/>
			</adapter:propertyGroup>
		</adapter:queryProperties>
		<adapter:queryResult>
			<adapter:selectElement name="DFHCOMMAREA"/>
		</adapter:queryResult>
	</adapter:performImport>
	<adapter:writeToWorkspace writer="{com/ibm/adapter/cobol/writer}JAVA_WRITER">
		<adapter:propertyGroup name="COBOLToJavaResourceWriter">
			<adapter:propertyElement name="GenerationStyle" value="0"/>
			<adapter:propertyGroup name="Java Type Name">
				<adapter:propertyElement name="Overwrite existing class" value="true"/>
				<adapter:propertyElement name="Project Name" value="${project}"/>
				<adapter:propertyElement name="Package Name" value="com.ibm.test"/>
				<adapter:propertyElement name="Class Name" value="Taderc99"/>
			</adapter:propertyGroup>
			</adapter:propertyGroup>
	</adapter:writeToWorkspace>
</adapter:discover>
  1. La sezione di importazione dello script Ant è simile alla seguente:
    <discoveryAgent type="DiscoveryAgentName">
    		<importResource name="PropertyName" value="PropertyValue"/>
    		<importProperties>
    			<propertyElement name="PropetyName" value="PropertyValue"/>
    		</importProperties>
    		<searchParameters>
    			<propertyElement name="ParameterName"/>
    		</searchParameters>
    </discoveryAgent>
    Dove:
    • discoveryAgent è il nome dell'agente di rilevamento da utilizzare per l'importazione.
    • importResource è la risorsa da importare
    • queryProperties è un elenco di parametri che rappresentano le informazioni richieste per formare una query rispetto al repository di metadati
    • searchParameters sono i nodi selezionati sull'albero dei risultati che si desidera importare come risorse dell'applicazione
    • propertyElement è un elenco (coppie di nome proprietà-valore proprietà)
  2. Per generare la risorsa dell'applicazione, viene richiamata un'utilità di scrittura risorse che è in grado di sfruttare il risultato importato. Ad esempio, dopo l'importazione di tipo COBOL, può essere impiegata solo un'utilità di scrittura in grado di utilizzare il risultato dell'importazione di tipo COBOL. La sezione di scrittura dello script Ant è simile alla seguente:
    	<adapter:writeToWorkspace writer="{com/ibm/adapter/cobol/writer}JAVA_WRITER">
    		<adapter:propertyGroup name="COBOLToJavaResourceWriter">
    			<adapter:propertyGroup name="Java Type Name">
    <adapter:propertyElement name="Project Name" value="${project1}"/>
    <adapter:propertyElement name="Package Name" value="sample.cics"/>
    <adapter:propertyElement name="Class Name" value="DFHCOMMAREA"/>
    			</adapter:propertyGroup>
    			</adapter:propertyGroup>
    </adapter:writeToWorkspace>
    Dove:
    • workspaceResourceWriter è il nome dell'utilità di scrittura utilizzata per generare le risorse dell'applicazione
    • propertyElement è un elenco (coppie di nome proprietà-valore proprietà) usato dall'utilità di scrittura per la generazione
  3. Nel caso speciale dell'importazione della lingua (COBOL, C e PL/I) c'è un'altra procedura che è la generazione del binding. La sezione di binding dello script Ant è simile alla seguente:
    <createBinding package="PackageName" class="ClassName">
        <methodElement>
            <name value="MethodName"/>
            <input value="Input"/>
            <output value="Output"/>
            <interactioSpec>
                <propertyElement name="PropertyName" value="PropetyValue"/>
            </interactioSpec>
        </methodElement>
        <connectionSpec>
            <propertyElement name="PropertyName" value="PropertyValue"/>
        </connectionSpec>
        <resourceAdapter project="ResourceAdapterProjectName"/>
    </createBinding>
  4. resourceAdapter può essere definito anche come segue:
    <resourceAdapter>
         <propertyElement name="displayName" value="PropertyValue"/>
         <propertyElement name="version" value="PropertyValue"/>
         <propertyElement name="vendorName" value="PropertyValue"/>
    </resourceAdapter>
    Dove:
    • createBinding definisce il nome classe di binding dell'interfaccia e del pacchetto
    • methodElement è il metodo Java per l'accesso all'EIS
      • name è il nome del metodo
      • input è il tipo di input
      • output è il tipo di output
      • interactioSpec è un elenco di proprietà di interazione
    • connectionSpec è un elenco di proprietà di connessione
    • resourceAdapter è l'adattatore risorse utilizzato specificando il nome progetto o un elenco di proprietà
  5. Impostate le proprietà, viene eseguito un comando che richiama l'API sottostante per attivare l'importazione o la generazione delle risorse.
Nota: Quando si utilizzano script Ant, tenere presenti le seguenti linee guida:
  • Richiamando un adattatore risorse in uno script Ant, l'adattatore risorse deve essere importato nell'area di lavoro prima di chiaramente lo script Ant.
  • Qualunque risorsa utilizzata deve avere un percorso file che punta all'area di lavoro e al progetto, o a un percorso completo del file system.
  • Gli agenti di rilevamento e il programma di utilità di scrittura dell'area di lavoro sono indicati dai rispettivi nomi (QName) che sono identificati in maniera univoca. Per trovare tutti gli agenti di rilevamento registrati, i programmi di utilità di scrittura risorse dell'area di lavoro e le configurazioni di importazione, utilizzare lo script displayAll.xml che si trova nella directory degli script.
  • Alcuni elementi hanno una coppia attributi nome e valore. Il nome è una proprietà definita internamente dall'agente di rilevamento o dall'utilità di scrittura risorse, e viene utilizzato per il passaggio del valore. È importante che il nome sia corretto. Se il nome non viene riconosciuto dal componente, il valore non verrà impostato. In tutti i casi tali attributi fanno parte della tag propertyElement che ha una molteplicità uno-vari. La stessa molteplicità si applica anche alla tag methodElement.
Il seguente script di esempio genera un binding dati basato sul file COBOL specificato (taderc99.ccp). È possibile trovare lo script nel plug-in com.ibm.adapter.command, nella directory degli script.
<?xml version="1.0" encoding="UTF-8" ?> 
  <project xmlns:adapter="http://com.ibm.adapter" default="DataBinding1" name="/Taderc99/CustomerInfo.xml">
    <property name="debug" value="true" /> 
    <property name="project1" value="Taderc99" /> 
    <target name="DataBinding1">
  <adapter:createProject projectName="${project1}" projectType="Java" /> 
    <adapter:discover>
    	<adapter:performImport agent="{com/ibm/adapter}CobolDiscoveryAgent">
    		<adapter:importResource>
    			<adapter:propertyGroup name="CobolFileGroup">
  <adapter:propertyElement name="CobolFile" value="C:\Samples\CICS\taderc99\taderc99.cbl" /> 
  			</adapter:propertyGroup>
  		</adapter:importResource>
    		<adapter:queryProperties>
    			<adapter:propertyGroup name="ImportProperties">
  <adapter:propertyElement name="Platform" value="Win32" /> 
  <adapter:propertyElement name="Codepage" value="ISO-8859-1" /> 
  <adapter:propertyElement name="Numproc" value="PFD" /> 
  <adapter:propertyElement name="FloatingPointFormat" value="IEEE 754" /> 
    <adapter:propertyGroup name="ExternalDecimalSignGroup">
  <adapter:propertyElement name="ExternalDecimalSign" value="ASCII" /> 
  			</adapter:propertyGroup>
    <adapter:propertyGroup name="EndianGroup">
  <adapter:propertyElement name="Endian" value="Little" /> 
  <adapter:propertyElement name="RemoteEndian" value="Little" /> 
  			</adapter:propertyGroup>
    <adapter:propertyGroup name="CompileOptions">
  <adapter:propertyElement name="Quote" value="DOUBLE" /> 
  <adapter:propertyElement name="Trunc" value="STD" /> 
  <adapter:propertyElement name="Nsymbol" value="DBCS" /> 
  			</adapter:propertyGroup>
  			</adapter:propertyGroup>
  		</adapter:queryProperties>
    		<adapter:queryResult>
  <adapter:selectElement name="DFHCOMMAREA" /> 
  		</adapter:queryResult>
  	</adapter:performImport>
    	<adapter:writeToWorkspace writer="{com/ibm/adapter/cobol/writer}JAVA_WRITER">
    		<adapter:propertyGroup name="COBOLToJavaResourceWriter">
  <adapter:propertyElement name="GenerationStyle" value="Default" /> 
    			<adapter:propertyGroup name="Java Type Name">
  <adapter:propertyElement name="Project Name" value="${project1}" /> 
  <adapter:propertyElement name="Package Name" value="sample.cics" /> 
  <adapter:propertyElement name="Class Name" value="CustomerInfo" /> 
  <adapter:propertyElement name="Overwrite existing class" value="true" /> 
  			</adapter:propertyGroup>
  			</adapter:propertyGroup>
  </adapter:writeToWorkspace>
  </adapter:discover>
  <eclipse.refreshLocal depth="infinite" resource="${project1}" /> 
  <eclipse.incrementalBuild project="${project1}" /> 
  </target>
  </project> 
Dove:
  • • importResource definisce la risorsa da importare
  • • queryProperties sono i parametri che rappresentano le informazioni richieste per formare una query per il repository di metadati
  • managedConnectionFactory definisce le proprietà del factory di connessione
  • • queryResult sono i nodi selezionati sull'albero dei risultati che si desidera importare come risorse dell'applicazione
  • • propertyGroup è la struttura contenente le proprietà e i relativi valori.

Attività di generazione servizio

Nel caso particolare dell'importazione di linguaggio (COBOL, C e PL/1), vi è una fase ulteriore: la generazione di binding interfaccia. Il seguente esempio descrive la sezione di rilevamento dati dello script Ant utilizzata per la generazione del bean J2C:

<j2c:generateService>
	<j2c:buildService package="com.ibm.test" class="Taderc99Interface">
		<j2c:method>
			<j2c:methodName value="gettaderc99"/>
			<j2c:methodInput value="${project}/com/ibm/test/Taderc99.java">
				<j2c:argumentBinding property="commareaLength" propertyType="InteractionSpec" name="length" type="int"/>
			</j2c:methodInput>
			<j2c:methodOutput value="${project}/com/ibm/test/Taderc99.java"/>
			<j2c:interactionSpec class="com.ibm.connector2.cics.ECIInteractionSpec">
				<adapter:propertyGroup name="InteractionSpec property group">
					<adapter:propertyElement name="functionName" value="TADERC99"/>
				</adapter:propertyGroup>
			</j2c:interactionSpec>
		</j2c:method>
		<j2c:managedConnectionFactory class="com.ibm.connector2.cics.ECIManagedConnectionFactory" target="myJNDIName">
			<adapter:propertyGroup name="Managed connection property group">
				<adapter:propertyGroup name="Server">
					<adapter:propertyElement name="ConnectionURL" value="rubicon.torolab.ibm.com"/>
					<adapter:propertyElement name="ServerName" value="rubicon"/>
				</adapter:propertyGroup>
				<adapter:propertyGroup name="UserVerification">
					<adapter:propertyElement name="UserName" value="sysad"/>
					<adapter:propertyElement name="Password" value="sysad"/>
				</adapter:propertyGroup>
			</adapter:propertyGroup>
		</j2c:managedConnectionFactory>
		<j2c:connectionSpec class="com.ibm.connector2.cics.ECIConnectionSpec"/>
		<j2c:resourceAdapter project="CICS ECI"/>
	</j2c:buildService>
	<adapter:writeToWorkspace writer="com/ibm/adapter/j2c/codegen:J2CAnnotationWriter">
		<adapter:propertyGroup name="J2C Writer Properties">
			<adapter:propertyElement name="Project" value="${project}"/>
			<adapter:propertyElement name="InterfaceName" value="Taderc99Interface"/>
			<adapter:propertyElement name="BindingName" value="Taderc99Binding"/>
			<adapter:propertyElement name="PackageName" value="com.ibm.test"/>
			<adapter:propertyGroup name="CommandBean">
				<adapter:propertyGroup name="gettaderc99">
					<adapter:propertyElement name="EnableGenerate" value="true"/>
					<adapter:propertyElement name="CommandBeanName" value="Taderc99CICSECIServiceProxy"/>
					<adapter:propertyElement name="Input" value="Taderc99Part"/>
					<adapter:propertyElement name="Output" value="Taderc99Part"/>
				</adapter:propertyGroup>
			</adapter:propertyGroup>
			</adapter:propertyGroup>
    </adapter:writeToWorkspace>
</j2c:generateService>
Dove:
  • buildService definisce il nome classe del binding interfaccia e del pacchetto
  • metodo è il metodo Java™ per accedere all'EIS
    • methodName è il nome del metodo
    • methodInput è il tipo di input
    • methodOutput è il tipo di output
    • interactionSpec è un elenco di proprietà di interazione
  • managedConnectionFactory definisce le proprietà del factory di connessione
  • connectionSpec è la classe di connessione utilizzata
  • resourceAdapter è l'adattatore risorse utilizzato specificando il nome progetto o un elenco di proprietà

Ulteriori attività

Di seguito vengono indicate attività di utilità ma non obbligatorie per la generazione di risorse.

L'attività createProject può essere utilizzata per creare un progetto dell'area di lavoro.
<adapter:createProject 
		projectName="taderc99Project" 
		projectType="Web" 
		runtimeName="J2EE Runtime Library"
		addToEAR="yes"
		EARProjectName="TestEAR"/>
Dove:
  • projectName è il nome del progetto
  • projectType è il tipo, che può essere Java, Web ed EJB, senza differenza tra maiuscole e minuscole
  • runtimeName (facoltativo) è il nome runtime come definito in Finestra->Preferenze->Server->Runtime installati
  • addToEAR (facoltativo) i valori validi sono
    • yes
    • no
    • true
    • false
  • EARProjectName (facoltativo) è
  • (facoltativo) è il nome progetto EAR
L'attività importResourceAdapter può essere utilizzata per creare un progetto del connettore.
<j2c:importResourceAdapter 
		connectorModule="cicseci602"
		connectorFile="D:\IBM\SDP70\ResourceAdapters\cics15\cicseci602.rar" 
		targetRuntime="J2EE Runtime Library"
		addToEAR="yes"
		EARProjectName="TestEAR"/>
Dove:

Definizione delle proprietà

Gli agenti di rilevamento e il programma di scrittura dell'area di lavoro sono indicati dai rispettivi nomi (QName) che sono identificati in maniera univoca. Per trovare tutti gli agenti di rilevamento registrati, i programmi di utilità di scrittura risorse dell'area di lavoro e le configurazioni di importazione, utilizzare lo script displayAll.xml che si trova nella directory degli esempi.

Come osservato negli script di esempio, i valori passati agli agenti di rilevamento o alle utilità di scrittura risorse vengono definiti da tag propertyGroup e propertyElement. Un gruppo di proprietà definisce un raggruppamento logico di proprietà in una struttura nidificata. Il layout della struttura, il gruppo contenuto e i nomi proprietà devono essere descritti nella documentazione dell'agente di rilevamento e dell'utilità di scrittura risorse.

Le proprietà vengono definite da una coppia di attributi nome-valore. Il nome è effettivamente una proprietà definita internamente dall'agente di rilevamento o dall'utilità di scrittura risorse, e viene utilizzato per il passaggio del valore. È importante che il nome sia corretto. Se il nome non viene riconosciuto dal componente, il valore non verrà impostato.


Feedback