JDBCWriterPattern

Le masque JDBCWriterPattern est utilisé pour inscrire des données sur une base de données à l'aide d'une connexion JDBC.

Classes prises en charge

  • JDBCWriter
  • LocalJDBCWriter

Propriétés requises

Les propriétés suivantes sont requises pour le masque.
Tableau 1. Propriétés requises. Ce tableau contient le nom et la valeur de chaque propriété requise pour le masque.
Nom de la propriété Valeur LocalJDBCWriter JDBCWriter
PATTERN_IMPL_CLASS Classe implémentant l'interface JDBCWriterPattern Applicable Applicable
ds_jndi_name Nom JNDI de la source de données Applicable Non applicable
jdbc_url Adresse URL JDBC. Par exemple, jdbc:derby:C:\\mysample\\CREDITREPORT. Applicable Non applicable
jdbc_driver Pilote JDBC. Par exemple, org.apache.derby.jdbc.EmbeddedDriver Applicable Non applicable
id_util ID utilisateur de la base de données. Par exemple, Myid Applicable Non applicable
pswd Mot de passe utilisateur. Par exemple, mypwd. LocalJDBCReader uniquement. Applicable Non applicable

Propriétés facultatives

Les propriétés suivantes sont optionnelles pour le masque.
Tableau 2. Propriétés facultatives. Ce tableau contient le nom, la valeur et la description de chaque propriété facultative pour le masque.
Nom de la propriété Valeur Description LocalJDBCReader JDBCWriter
debug true ou false (la valeur par défaut est false) Active le traçage détaillé sur ce flux de données par lots. Applicable Applicable
EnablePerformanceMeasurement true ou false (la valeur par défaut est false) Calcule le temps écoulé dans les flux de données par lots et la méthode processRecord, si vous utilisez GenericXDBatchStep. Applicable Applicable
EnableDetailedPerformanceMeasurement true ou false (la valeur par défaut est false) Fournit un arrêt plus détaillé du temps écoulé dans chaque méthode des flux de données par lots. Applicable Applicable
batch_interval La valeur par défaut est 20. Cette valeur doit être inférieure à l'intervalle de point de contrôle pour l'utilisation de point de contrôle basée sur des enregistrements. Désigne le nombre de mises à jour SQL à traiter par lots avant validation. Applicable Applicable

Définition de l'interface

public interface JDBCWriterPattern {

	public void initialize(Properties props);
	
	/**
	 * This is typically an Update query used to write data into the DB
	 * @return
	 */
	public String getSQLQuery();
	
	/**
	 * The parent class BDSJDBCWriter creates a new preparedstatement and
	 * passes it to this method. This method populates the preparedstatement
	 * with appropriate values and returns it to the parent class for execution
	 * @param pstmt
	 * @param record
	 * @return
	 */
	public PreparedStatement writeRecord(PreparedStatement pstmt, Object record);
}

Exemple JDBCWriter xJCL

<batch-data-streams>
<bds>
<logical-name>outputStream</logical-name>
<props>
<prop name="PATTERN_IMPL_CLASS" value="com.ibm.websphere.batch.samples.tests.bds.EchoWriter"/>
<prop name="ds_jndi_name" value="jdbc/fvtdb"/>
<prop name="debug" value="true"/>
</props>
<impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.JDBCWriter</impl-class>
</bds>
</batch-data-streams> 

Exemple LocalJDCBWriter xJCL

<batch-data-streams>
<bds>
<logical-name>outputStream</logical-name>
<props>
<prop name="PATTERN_IMPL_CLASS" value="com.ibm.websphere.batch.samples.tests.bds.EchoWriter"/>
<prop name="jdbc_url" value="jdbc:derby:C:\\mysample\\CREDITREPORT"/>
<prop name="jdbc_driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<prop name="user_id" value="myuserid"/>
<prop name="pswd" value="mypswd"/>
<prop name="debug" value="true"/>
</props>
<impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.LocalJDBCWriter</impl-class>
</bds>
</batch-data-streams> 

Traitement de non prise en compte d'enregistrements avec JDBCWriterPattern

JDBCWriter/LocalJDBCWriter présente un cas spécifique lors de l'utilisation du traitement de non prise en compte d'enregistrements. Le rédacteur fonctionne en regroupant par lots une séquence d'instructions SQL et les exécutant toutes en même temps sur une base de données, qui émet une exception unique BatchUpdateException en cas de problème lors de l'exécution. Pour s'adapter à la granularité du traitement de non prise en compte d'enregistrements général, une tentative est effectuée pour analyser une seule exception BatchUpdateException afin de déterminer les exécutions d'instructions qui ont échoué avec d'autres exceptions, ainsi que les enregistrements individuels et correspondants qui ont été transmis aux rédacteurs.

Par exemple, s'il existe un lot de dix enregistrements, pour l'enregistrement #2, le JDBCWriterPattern de l'utilisateur produit une instruction SQL entraînant une java.sql.SQLIntegrityConstraintViolationException, et pour l'enregistrement #9, les instructions SQL correspondantes entraînent une java.sql.DataTruncation.

Pour fournir le mappage le plus proche du traitement de non prise en compte d'enregistrements pour les rédacteurs hors lots :
  • Appelez la méthode de gestionnaire de non prise en compte onSkippedWrite(Object o, Throwable t) après la transmission de l'enregistrement #2, et l'instance SQLIntegrityConstraintViolationException.
  • Appelez la méthode de gestionnaire de non prise en compte onSkippedWrite(Object o, Throwable t) une seconde fois à la transmission de l'enregistrement #9, et l'instance DataTruncation.
  • Incrémentez le nombre de non prise en compte de deux (supposons que les deux exceptions font explicitement ou implicitement partie de la liste d'inclusion).

Le processus d'analyse de BatchUpdateException pour extraire les SQLExceptions chaînées pour les instructions comprises n'est pas standardisé parmi les configurations et pilotes JDBC. En outre, certains pilotes s'interrompent lors du premier échec sans exécuter le lot complet.

Notez si la configuration de votre pilote (certains pilotes se comportent différemment dans cette zone selon les configurations) effectue un style d'exécution par lots atomique ou non atomique. En général, pour le style atomique, l'exécution par lots s'interrompt lors du premier échec, alors que si le style est non atomique, le reste du lot est exécuté.

Si le style est atomique, l'exécution interrompt la boucle d'exécution d'étape (émet une exception en annulant la transaction en cours). Dans cette instance, il n'y a pas d'exception applicable à associer avec les enregistrements des instructions non exécutées. Comme elles ne sont jamais exécutées, elles ne sont pas ignorées.

Si le style est non atomique, une exécution heuristique est utilisée pour BatchUpdateException, avec la ou les exceptions SQLException(s) chaînée(s). L'opération tente de déterminer les instructions de l'exécution par lots qui ont entraîné des erreurs et les compare avec l'enregistrement correspondant, en appelant le programme d'écoute de non prise en compte avec l'enregistrement correspondant et la SQLException chaînée correspondante. Elle incrémente également le nombre de non prise en compte d'un par enregistrement, ce qui entraîne une exception dans le lot, mais pas une seule fois pour tout le lot.

Si ce mappage ne peut pas être effectué, (pour le style non atomique), et qu'un programme d'écoute de non prise en compte a été configuré, l'exécution appelle le programme d'écoute de non prise en compte une fois par enregistrement de problème, en passant le niveau supérieur BatchUpdateException. Si le mappage ne peut pas être effectué et qu'aucun programme d'écoute de non prise en compte n'a été configuré,, l'exécution interrompt la boucle d'exécution d'étape en émettant une exception.


Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rgrid_btchpttrn2
Nom du fichier : rgrid_btchpttrn2.html