JBoss base de données du pool de connexions comportement auto-commit
Nous sommes à l'aide de JBoss 4 et Oracle avec une datasource JNDI configuré à l'aide de JBoss source de données fichier XML.
Récemment réalisé que toutes les connexions acquis à partir de la source de données par défaut est le mode auto-commit propriété est définie sur true. Cependant, nous nous appuyons sur des procédures stockées Oracle et que vous souhaitez contrôler les changements dans les procédures stockées.
Nous utilisons plaine appels JDBC ainsi que le Printemps StoredProcedure wrapper pour appeler des procédures stockées à partir de JBoss. En essayant de définir le mode auto-commit de JBoss source de données XML ne fonctionne pas vraiment.
Je ne peux voir que pour chaque connexion, nous obtenons à partir de la source de données, nous pouvons définir l'auto-commit valeur false à la propriété, mais quelqu'un sait comment on peut configurer cela dans un seul endroit?
Edit: je suis l'ajout de la source de données de configuration, nous utilisons:
<local-tx-datasource>
<jndi-name>some name</jndi-name>
<connection-url>jdbc:oracle:thin:@(description=(address_list=(address=(protocol=tcp)(port=1521)(host=xxx))(address=(protocol=tcp)(port=1521)(host=xxx)))(load_balance = yes)(connect_data=(SERVICE_NAME=xxx)(SERVER=DEDICATED)))</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>xxxr</user-name>
<password>xxx</password>
<!-- Checks the Oracle error codes and messages for fatal errors -->
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-class-name>
<min-pool-size>5</min-pool-size>
<max-pool-size>25</max-pool-size>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml -->
<metadata>
<type-mapping>Oracle10g</type-mapping>
</metadata>
</local-tx-datasource>
Nous avons également utilisé , mais pas de changement...
OriginalL'auteur Erdem | 2010-08-07
Vous devez vous connecter pour publier un commentaire.
Il existe trois principaux types de source de données:
Communauté JBoss ConfigDataSources
Votre deploy/oracle-ds.xml le fichier doit utiliser <local-tx-datasource> ou <xa-datasource> pour obtenir des connexions avec auto-commit est à false.
Voir la réponse de Scott Stark dans ce post: Comment définir de façon Déclarative de validation automatique de faux ou J2EETM Connecteur Spécification de l'Architecture de la Version 1.5 section 15.5.3.1 pour la source d'origine.
Vous avez dit: "en Essayant de définir le mode auto-commit de JBoss source de données XML ne fonctionne pas vraiment." Pourriez-vous nous en dire un peu plus sur ce qui ne fonctionne pas? Aussi, est-il possible pour vous pour poster votre configuration de source de données? JBoss 4.x et Oracle 9/10 ont toujours fonctionné correctement pour moi, donc je soupçonne que c'est quelque chose dans la configuration.
Une dernière chose, si vous émettez des commandes DDL votre connexion, vous pourriez avoir des problèmes, car elles ne fonctionnent pas bien avec le standard SQL commandes émises à l'intérieur de transactions.
Nous appeler une procédure stockée qui insère des enregistrements dans une table dans le contexte de la connexion JDBC. Idéalement, nous ne voulons pas question d'une base de données de s'engager pour chaque insertion, mais c'est ce qui se produit en raison de JDBC autocommit.
Pouvez-vous voir la validation des déclarations émises par le conteneur après chaque instruction? Si vous êtes à la déduction de la validation automatique des comportements à partir de l'observation qu'une validation a eu lieu lorsqu'une exception a été levée, alors vous pourriez vouloir vérifier que vous intercepter des exceptions et l'utilisation de la setRollbackOnly() la méthode sur votre objet de Contexte. Application (vérifié) exceptions ne pas forcer un retour en arrière, de sorte qu'il est très facile de se faire prendre de cette façon. Voir gestion des Exceptions
OriginalL'auteur richj
Vous pouvez créer votre propre source de données, qui est sous-classé de celui que vous utilisez. La stocker dans JNDI. La seule méthode que vous auriez besoin de les remplacer est getConnection(), ce qui ferait:
OriginalL'auteur Romain Hippeau
Dans mon cas, j'ai été à l'aide de Jboss EAP 6 (AS7), et la solution pour moi a été de faire un wrapper de la classe WrapperDataSource et ajouter l'instruction:
dans le getConnection méthodes, afin de définir l'auto-commit connexion à faux lors de ma demande d'obtenir une connexion à partir de JDBC piscine.
Ce lien explique comment faire
http://antuansoft.blogspot.com.es/2017/01/jboss-datasources-set-autocommit-example.html
L'espoir d'aider toute personne
OriginalL'auteur AntuanSoft