String 컴파일 시간 상수가 필요한 @Resource 주석에 대한 인수를 이미 지정해야하는 safetype enum을 다시 사용하고 싶습니다. 나는 어떻게 둘러싸는이를 제외하고 데이터 소스를 재사용 할 수있는 우아한 해결책을 발견하지 않았습니다 : 열거 자체Annotation에 Enum의 String 속성이 사용되었습니다.
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());
}
}
의
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);
}
}
}
사용을하지만 지금은 SessionBeans에 같은 데이터 소스 상수를 사용하고 싶습니다 @Resource annotation과 함께
@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;
...
}
어떤 생각?
그것은 당신이 지금 가지고있는 솔루션으로 아무 문제가없는, 큰 문제가 아니다. – irreputable