IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Glassfish et Payara Java Discussion :

Problème d'accès, sous Glassfish, à des classes d'accès au SGBD générées par Oracle JPublisher


Sujet :

Glassfish et Payara Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut Problème d'accès, sous Glassfish, à des classes d'accès au SGBD générées par Oracle JPublisher
    Bonjour à tous.

    Je tourne un peu en rond avec ce problème, au cas où quelqu'un y verrait plus clair, je me décide à vous soumettre le bidule.
    Ce que j'essaye de faire : faire tourner sous glassfish V3 une appli qui tournait sous Oracle Application Server 10.1.2, afin de refactorer avec des standards un peu plus récents... Dans cette appli, on a des procédures stockées et des classes de niveau DAO générées par une moulinette Oracle : JPublisher.

    Je teste, j'obtiens la page de login, puis j'obtiens quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.lang.IllegalArgumentException: SQLJ programs translated with the option -codegen=oracle must be run under Oracle JDBC 9.0.0 or higher.  If the Oracle JDBC driver is wrapped, then the wrapper must implement all of the oracle.jdbc.OracleXxxx interfaces. Alternatively, you can translate SQLJ programs either with -codegen=iso or with -codegen=jdbc.
        at sqlj.runtime.ref.ConnectionContextImpl.getOracleConnection(ConnectionContextImpl.java:153)
        at sqlj.runtime.ExecutionContext$OracleContext.prepareOracleCall(ExecutionContext.java:1513)
        at com.xx.yy.zz.UtilisateurServicePlSql.authentifier(UtilisateurServicePlSql.java:59)
    Bon. Je finis par reprendre le script Ant qui appelle JPublisher pour lancer, en gros : sqlj.tools.Sqlj -compile=false -codegen=iso

    Après relance du serveur et test, j'obtiens ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    org.springframework.jdbc.UncategorizedSQLException: ConnectionCallback; uncategorized SQLException for SQL []; SQL state [null]; error code [17004]; Type de colonne non valide; nested exception is java.sql.SQLException: Type de colonne non valide
    Caused by: java.sql.SQLException: Type de colonne non valide
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:226)
        at oracle.jdbc.driver.OracleStatement.get_internal_type(OracleStatement.java:3162)
        at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:120)
        at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:261)
        at oracle.jdbc.driver.OracleCallableStatement.registerOutParameter(OracleCallableStatement.java:341)
        at com.sun.gjc.spi.base.CallableStatementWrapper.registerOutParameter(CallableStatementWrapper.java:92)
        at sqlj.runtime.profile.ref.RTStatementJDBCCallable.registerOutParameter(RTStatementJDBCCallable.java:141)
        at sqlj.runtime.profile.ref.ParamRegProfile$ParamRegCachedStatement.registerParameters(ParamRegProfile.java:144)
        at sqlj.runtime.profile.ref.ParamRegProfile$ParamRegCachedStatement.getStatement(ParamRegProfile.java:101)
        at sqlj.runtime.profile.ref.CachedStatementProfileWrapper.getStatement(CachedStatementProfileWrapper.java:134)
        at sqlj.runtime.ExecutionContext$StatementStack.setStatement(ExecutionContext.java:1099)
        at sqlj.runtime.ExecutionContext.registerStatement(ExecutionContext.java:621)
        at com.xx.yy.zz.serviceoracle.UtilisateurServicePlSql.authentifier(UtilisateurServicePlSql.java:60)
    Il y a peut-être d'autres options de génération mais je ne connais pas...
    Mais bon, j'essaie encore avec -codegen=jdbc.
    Et là le code généré ne compile pas (du java.sql.CallableStatement sur lequel est appelé getORAData / setORAData, forcément...)


    Bref, je tourne en rond (et en bourrique)...
    Pour plus d'infos je suis en jdk 1.6.0_19 ; Le pool de connexion dans Glassfish est paramétré en spécifiant un oracle.jdbc.driver.OracleDriver, mais j'avais essayé d'autres paramétrages.

    Si vous avez la moindre idée de ce qui coince, ou de ce que je pourrais essayer, je suis preneur...

    Désolé si je n'ai pas posté au bon endroit ou si le message n'est pas assez clair.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Bon, tout n'est pas encore rose au royaume du Danemark mais j'y vois un chouilla plus clair...

    La partie importante du message d'erreur initial était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If the Oracle JDBC driver is wrapped, then the wrapper must implement all of the oracle.jdbc.OracleXxxx interfaces.
    (On reste donc dans le cas -codegen=oracle.)

    Je maîtrise mal les aspects admin serveur et les specs récentes, mais il semble qu'en effet Glassfish englobe systématiquement les connexions JDBC dans une classe wrapper.
    Ici, au lieu d'avoir un objet oracle.jdbc.driver.T4CConnection, on a un objet com.sun.gjc.spi.jbbc40.ConnectionWrapper40.

    Je n'ai pas encore le détail afin de savoir pourquoi le code généré initialise mal, du coup, l'un de ses objets, mais j'ai quand même tenté un truc sans trop y croire : dans l'admin glassfish, j'ai décoché l'option "wrap JDBC objects" de l'onglet "avancé" de la page de mon pool de connexion. Même s'il ne s'agit pas là de "déwrapper" la connexion mais seulement les statements, resultsets, etc. ...

    Eh bien ça marche déjà mieux !!
    Je n'ai plus les erreurs ci-dessus.
    (Mais il y en d'autres... )

    Merci en tout cas à ceux qui auront pris le temps de lire ce message.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/08/2008, 15h20
  2. Gestion des droit d'acces sous windows
    Par MSM_007 dans le forum Windows XP
    Réponses: 1
    Dernier message: 18/10/2007, 08h40
  3. Gestion des droits d'accès sous Oracle
    Par ginkas31 dans le forum Administration
    Réponses: 3
    Dernier message: 02/07/2007, 19h44
  4. table répertoire des chemins d'accées sous access
    Par marc_calagac dans le forum VBA Access
    Réponses: 3
    Dernier message: 19/06/2007, 11h09
  5. [JAXB][XSD] Problème lors de la génération des classes
    Par charlot44 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 22/06/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo