Je voudrais réutiliser safetype enum dont j'ai déjà spécifié l'argument pour l'annotation @Resource qui nécessite une constante de temps de compilation String. Je n'ai trouvé aucune solution élégante façon de réutiliser DATASOURCE sauf ce que je joins:La propriété String d'Enum utilisée pour l'annotation
public enum DATASOURCE {
// Enum constants
DataSource1, DataSource2;
public final static String DataSource1_jndi = "java:/jdbc/DataSource1";
public final static String DataSource2_jndi = "java:/jdbc/DataSource2";
public String getJndiName() {
switch(this) {
case DataSource1:
return DataSource1_jndi;
case DataSource2:
return DataSource2_jndi;
default:
throw new RuntimeException("Not defined jndi name for DATASOURCE " + this);
}
}
}
Utilisation de ENUM se
public class DataSourceFactory {
/**
* @param ds Identifier of datasource
*/
public static DataSource getDataSource(DATASOURCE ds) {
// maybe some caching for datasource identified by constant
...
return (DataSource) new InitialContext().lookup(ds.getJndiName());
}
}
Mais maintenant, je voudrais utiliser la même constante DATASOURCE aussi dans SessionBeans avec l'annotation @Resource
@Stateless
public class SomeSessionBean {
// This is what I would love to use but
// annotation wants compile time constant :-(
// @Resource(mappedName=DATASOURCE.DataSource1.getJndiName());
@Resource(mappedName=DATASOURCE.DataSource1_jndi);
DataSource ds;
...
}
Une idée?
Ce n'est pas une grosse affaire, il n'y a rien de mal à la solution que vous avez maintenant. – irreputable