Guillaume VIEL :: java jee tomcat linux

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 1 septembre 2010

Activation des traces du driver JDBC Oracle

Il est parfois utile de comprendre ce que fait le driver JDBC Oracle que les développeurs connaissent sous le nom de ojdbc14.jar. Il existe en fait un autre driver destiné au debug : ojdbc14_g.jar pour lequel il suffit d'ajouter ceci dans les JAVA_OPTS pour activer les traces

JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.config.file=OracleLog.properties -Doracle.jdbc.Trace=true"

Ensuite, un fichier OracleLog.properties doit être placé avec le jar pour configurer les traces souhaitées. Il est conseillé de le modifier sinon vous allez avoir beaucoup de traces...

jeudi 1 avril 2010

Oracle native JDBC connection extractor

L'utilisation d'API Oracle Java, comme par exemple la SDO API (sdoapi.jar) ou Oracle Network Modeling (sdonm.jar) pour gérer les graphes, nécessite d'avoir une connexion native Oracle. Or les applications sont souvent configurées avec un pool de connexions gérées par le conteneur JEE. Ceci pose alors problème pour les opérations spécifiques qui nécessitent d'avoir une connexion de type oracle.jdbc.OracleConnection et non une connexion de type java.sql.Connection. Cette dernière ne pourra en effet pas être utilisée avec les méthodes des API Oracle en Java.

Il faut alors extraire la connexion native sous-jacente à la connexion du pool de connexions.

Lire la suite...

mardi 30 mars 2010

ORA-04061 ô désespoir, ô variable ennemie

Que signifie l'exception ORACLE ORA-04061 ?

Souhaitant rationaliser un projet de plusieurs milliers de lignes de PL/SQL, j'ai rencontré cette exception lorsque nous avons mis en package les procédures et fonctions. L'exception se présente comme suit :

ORA-04061: existing state of package "SCHEMA_REF.MON_PACKAGE" has been invalidated
ORA-04065: not executed, altered or dropped package "SCHEMA_REF.MON_PACKAGE"
ORA-06508: PL/SQL: could not find program unit being called: "SCHEMA_REF.MON_PACKAGE"
ORA-04088: error during execution of trigger 'MON_SCHEMA.MON_TRIGGER'

L'erreur est déroutante au premier abord car le package MON_PACKAGE, une fois compilé, est tout à fait valide et il n 'y a a priori aucune erreur à la compilation d'après ORACLE. Ce n'est qu'à la deuxième exécution (par un tiers) que les problèmes surviennent. Alors que se passe-t-il exactement?

Lire la suite...

mercredi 10 juin 2009

Hibernate sans modèle de données avec du SQL natif et la méthode aliasToBean

Chez un client, je découvre dans un bean des getters / setters en doublon : getMaVariable() et getMAVARIABLE(). Quelle horreur!

Le client m'explique que l'équipe de développement a eu des problèmes avec les noms de colonne Oracle lors de la transformation vers un Bean avec la méthode aliasToBean d'Hibernate, car Oracle renvoit systématiquemen des noms de colonne en majuscule... Les getters / setters ne sont alors pas trouvés.
J'ai finalement trouvé comment remédier au problème et je vous fais profiter de la solution.

String q = "SELECT axe, num_route AS numRoute, pr AS prStart, prfin AS prEnd FROM GRAPHE_AXE WHERE id_ech = :idEch";
SQLQuery hq = session.createSQLQuery(q).addScalar("axe").addScalar("numRoute").addScalar("prStart",Hibernate.DOUBLE).addScalar("prEnd",Hibernate.DOUBLE);
List<AxeRange> axeRanges = (List<AxeRange>) hq.setLong("idEch", idEch).setResultTransformer(Transformers.aliasToBean(AxeRange.class)).list();


La réponse est dans ce post : http://www.mail-archive.com/hibernate-dev@lists.jboss.org/msg01043.html
C'est plus un pb lié à la base de données qu'Hibernate

a) mettre les alias portant le même nom que les membres du bean dans la requête SQL
b) utiliser addScalar sur la SQLQuery initiale avec le même nom d'alias mais en case sensitive (correspondant aux membres du bean résultat): de cette façon un mapping sera fait entre le nom donné dans addScalar et l'alias majuscule renvoyé par Oracle
c) éventuellement forcer aussi les types dans addScalar (pour éviter de récupérer des BigDecimal sur des valeurs entières!)
d) utiliser aliasBean comme d'habitude

Sources : pour l'utilisation des query natives dans Hibernate cf. http://docs.jboss.org/hibernate/stable/core/reference/fr/html/querysql.html