我想重用safetype枚举,该枚举我已经必须为@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;

  ...
}

任何想法?

最佳答案

您的解决方案很好。

09-30 14:39
查看更多