Свойство Enum String используется для аннотации - PullRequest
4 голосов
/ 10 февраля 2011

Я хотел бы повторно использовать перечисление 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);
    }
  }
}

Использование самого enum

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());
  }
}

Но теперь я хотел бы использовать ту же самую константу DATASOURCEтакже в SessionBeans вместе с аннотацией @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;

  ... 
}

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2011

Вы можете просто немного перечислить:

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;
}
}
0 голосов
/ 10 февраля 2011

Ваше решение в порядке.

...