Ok, sono un po 'confuso qui. Sto cercando di selezionare una classe "DAO" utilizzando un'annotazione sul modello:Annotazione non trovata sull'oggetto con Ritenzione 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 {
[...]
}
Ecco l'defenition della nota:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DAOSelector {
Class<?> dao();
}
Io uso il seguente codice per restituire il DAO corretto" "classe:
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();
}
}
Tuttavia, quando ho mangimi un'annotazione DispatcherSet
oggetto è sempre nullo:
10: 33: 38.498 [INFO] [STDOUT] annotazione non presente per la classe model.DispatcherSet
Mi manca qualcosa qui?
edit:
OK, ho trovato qualcosa di interessante, sto correndo questo codice all'interno di un contenitore JBoss e quando stampo fuori tutte le annotazioni:
{{{
$Proxy76
$Proxy708
$Proxy77
}}}
Uno di questi dovrebbe essere un esempio Proxied dell'annotazione DAOSelector
Sto indovinando, quindi questo è probabilmente il motivo per cui getAnnotation(DAOSelector.class)
non funzionerà, verificandolo.
EDIT2:
No, non sono un caso di DAOSelector