[英]Enum's String property used for Annotation
我想重用safetype enum,我已經為@Resource注釋指定了需要String編譯時常量的參數。 我沒有找到任何優雅的解決方案如何重用DATASOURCE,除了我附上的內容:
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);
}
}
}
枚舉本身的用法
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());
}
}
但是現在我想在SessionBeans中使用相同的DATASOURCE常量以及@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;
...
}
任何想法?
你的解決方案很好。
你可以簡單地說一下你的枚舉:
public enum DATASOURCE {
Datasource1("java:/jdbc/DataSource1"), Datasource2("java:/jdbc/DataSource2");
private String jndiReference;
private DATASOURCE(String jndiReference) {
this.jndiReference = jndiReference;
}
public String getJndiName() {
return this.jndiReference;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.