2017-06-16 2 views
0

J'utilise WLS 12.1.3 et Oracle est 10.2.0, j'utilise datasource weblogic pour obtenir une connexion Ce code,De WLS - objet connexion Datasource Types.ARRAY ne fonctionne pas

CallableStatement cst = null; 
    try { 
     cst = conn 
       .prepareCall("{call myProc(?,?,?,?,?,?,?,?)}"); 
     final String typeTableName = "studentdetails"; 

     cst.setInt(1, student.getEmpid()); 
     cst.setInt(2, student.getOrgid()); 
     cst.setInt(3, student.getYearid()); 
     cst.setString(4, student.getClassType()); 
     cst.setInt(5, student.getStudentid()); 
     cst.registerOutParameter(6, Types.ARRAY, typeTableName); 
     cst.registerOutParameter(7, java.sql.Types.VARCHAR); 
     cst.registerOutParameter(8, java.sql.Types.VARCHAR); 
         long startTime=System.currentTimeMillis(); 
     cst.execute(); 
         String dat=cst.getString(7); 
         //Array arr = cst.getArray(6); 
         long endTime=System.currentTimeMillis(); 

     if (null != cst.getObject(6)) { 
      data = (Object[]) ((Array) cst.getObject(6)).getArray(); 
     } 

Ceci est l'objet de connexion et déclaration appelable obj

cst = (weblogic.jdbc.wrapper.CallableStatement_oracle_jdbc_driver_OracleCallableStatementWrapper) weblogic.jdbc.wrapper.Call[email protected]53 

conn = (weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_LogicalConnection) [weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_LogicalConnection-XMLJDBC_Data_Source-1-3, [email protected]] 

Si je datasource, je reçois cst.getObject (6) comme nulle, mais si on utilise une connexion normale jdbc je me fais l'objet. S'il vous plaît suggérer comment résoudre ce problème

Obtenir cette exception « ERREUR: get_item_uda_data: ORA-02089: COMMIT n'a pas le droit à une exception de la session subordonnée de la procédure »

+0

La source de données et le pilote utilisent-ils le même pilote (et la même version)? Est-ce qu'un mince et l'autre OCI, peut-être? (Je devine juste ...) –

+0

J'utilise ce nom de classe de pilote: oracle.jdbc.xa.client.OracleXADataSource dans le serveur Weblogic et essayant d'obtenir la connexion à partir de la source de données. Toutes les requêtes et procédures DML/DDL fonctionnent correctement, mais pas avec cst.registerOutParameter (6, Types.ARRAY, typeTableName); collection en tant que paramètre – user3428736

+0

ERROR: get_item_uda_data: ORA-02089: COMMIT n'est pas autorisé dans un subordonné exception de session de la procédure – user3428736

Répondre

0

Votre question est très probablement liée à la procédure " myProc "essayant d'appeler" commit "dans une transaction JTA active ayant la validation automatique activée.

Dans le contexte JDBC, il n'y aura pas de problème dans ce cas, car il n'est probablement pas auto-commit dans votre environnement.

Si mon hypothèse est correcte, il vous suffit de supprimer le "commit" dans votre "myProc". L'autre option consiste à appeler la procédure en dehors d'une transaction JTA (il suffit d'annoter votre bean avec "TransactionAttribute.NOT_SUPPORTED").

+0

J'ai ajouté conn.setAutoCommit (false) pour valider la transaction – user3428736

+0

Je viens de rechercher le problème en dehors de cette portée et je pense qu'il ne suffira pas de désactiver la validation automatique. Checkout cette autre question/réponse que je viens de trouver dans _the_stack_: https://stackoverflow.com/questions/29117201/error-with-jpa-transaction-when-calling-a-stored-procedure –