2009-12-28 3 views
2

J'ai un objet ResultSet que je dois transformer en un OracleResultSet pour que je puisse appeler la méthode getOPAQUE (String). J'utilise c3p0 comme ma piscine de connexion. Le problème est que c3p0 encapsule ResultSets dans les objets NewProxyResultSet.c3p0 ResultSet.unwrap lève une AbstractMethodError

Cela ne devrait pas être un problème parce que je devrais être en mesure d'appeler Déballer sur le ResultSet comme ceci:

rs.unwrap(OracleResultSet.class) 

Cependant, cela ne fonctionne pas. Il jette en fait un AbstractMethodError:

java.lang.AbstractMethodError: com.mchange.v2.c3p0.impl.NewProxyResultSet.unwrap(Ljava/lang/Class;)Ljava/lang/Object; 

Il comprend une trace de la pile, mais ce n'est pas utile, car la première ligne de la trace de la pile juste des points à la ligne exacte à laquelle j'appelle la méthode unwrap. Cela semble indiquer que NewProxyResultSet lui-même n'a pas déplié implémenté.

Quoi de neuf? Comment puis-je prendre un NewProxyResultSet et en obtenir un OracleResultSet?

Répondre

4

J'ai trouvé un moyen d'obtenir la valeur intérieure! C'est un hack, mais ça marche. Si quelqu'un connaît un moyen plus portable d'obtenir la valeur interne (comme faire fonctionner la méthode de déballage) alors j'aimerais faire cela à la place. Mais, il s'avère que la variable "interne" du NewProxyResultSet est déclarée protégée. Je viens donc de faire une classe dans le même paquet que NewProxyResultSet et l'utiliser pour obtenir la valeur intérieure comme ceci:

package com.mchange.v2.c3p0.impl; 

import java.sql.ResultSet; 

/** 
* This is a sneaky way to get at the inner ResultSet of NewProxyResultSet. It marks the  variable as protected, 
* so here I just make a class in the same package and get the value out. 
* 
*/ 
public class C3P0ResultSetPeeker 
{ 
public static ResultSet getInnerFrom(NewProxyResultSet rs) { 
    return rs.inner; 
} 
} 
+0

BTW, j'ai eu des problèmes avec c3p0 aussi. Il n'a pas fait les transactions correctement. Voir http://stackoverflow.com/questions/1977366/spring-transactional-cpool-which-one-do-i-use/2002505#2002505 pour des instructions complètes sur la façon dont je l'ai fait. – HappyEngineer

Questions connexes