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
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
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.
- 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.