java - 用于注释的枚举的字符串属性

标签 java annotations ejb

我想重用 safetype 枚举,我已经必须为需要字符串编译时间常量的 @Resource 注释指定参数。 我还没有找到任何优雅的解决方案来重用 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;

  ... 
}

有什么想法吗?

最佳答案

您的解决方案就这样很好。

关于java - 用于注释的枚举的字符串属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4960840/

相关文章:

java - 在 Recyclerview Adapter (Android) 中操作数据的位置

java - 如果列名不同,则一对多 hibernate 连接

java - 带有自定义注释的 Spring AOP 不起作用

java - Glassfish - 在节点之间共享 EJB Web 应用程序

java - Junit 未获取 persistance.xml EJB3

java - Gradle下载源失败

java - 无法提取从 Java 创建的 zip 文件

java - Android 中的 Groovy、Scala、Clojure 等脚本

eclipse - 删除文本编辑器注释类型

hibernate - 帮助我了解 SEAM 和 Hibernate?