2012-01-19 11 views
6

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

risposta

3

ho risolto il problema. era un problema di classpath. Ho un orecchio che contiene un barattolo e una guerra. Il modello era nel barattolo e l'annotazione era presente in entrambi.