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