2012-01-19 7 views
6

Ok, estoy un poco confundido aquí. Estoy tratando de seleccionar una clase "DAO" mediante el uso de una anotación en el modelo:Anotación no encontrada en el objeto con retención Runtime

@Entity 
@Table(name="dispatcher") 
// use the Kamailio Base DAO for code that supports this annotation 
@DAOSelector(dao = DAOBaseKamailio.class) 
public class DispatcherSet extends Model { 
    [...] 
} 

Aquí está el Defenition anotación:

@Target({ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface DAOSelector { 
     Class<?> dao(); 
} 

utilizo el siguiente código para devolver el DAO adecuada" "clase:

public static DAOInterface getCorrectDAO(final Object object) throws Exception { 
    final DAOSelector annotation = 
    object.getClass().getAnnotation(DAOSelector.class); 

    if(annotation != null) { 
    System.out.println("Annotation present: " + 
     annotation.dao().getName() + " for class " + object.getClass().getName()); 

    final Object dao = annotation.dao().newInstance(); 
    if(!(dao instanceof DAOInterface)) { 
     throw new Exception("Invalid Base DAO in annotation for entity " + 
     object.getClass().getName()); 
    } 
    return (DAOInterface) dao; 
    } 
    else { 
    System.out.println("Annotation not present for class " + 
     object.getClass().getName()); 
    return new DAOBase(); 
    } 
} 

Sin embargo, cuando me alimento una anotación de DispatcherSet objeto es siempre nulo:

10: 33: 38,498 [INFO] [STDOUT] anotación no está presente para la clase model.DispatcherSet

Me estoy perdiendo algo aquí?

edición:

bien, encontré algo interesante, estoy corriendo este código dentro de un contenedor de JBoss y cuando imprimo todas las anotaciones:

{{{ 
$Proxy76 
$Proxy708 
$Proxy77 
}}} 

Uno de estos debe ser una instancia de proxy de la anotación DAOSelector estoy adivinando, por lo que es probable que getAnnotation(DAOSelector.class) no funcione, checándolo.

Edit2:

No, ellos no son una instancia de DAOSelector

Respuesta

3

He arreglado el problema. fue un problema de classpath. Tengo una oreja que contiene una jarra y guerra. El modelo estaba en el contenedor y la anotación estaba presente en ambos.

Cuestiones relacionadas