簡體   English   中英

如何在編譯時指定資源注釋的名稱?

[英]How to specify name for resource annotations in compile time?

我們的代碼有這樣的:

@Resource(name = "java:comp/resource/foo/bar/ONE_QUEUE")
private Queue queue;

但是,在一個部署方案中,隊列注釋應如下所示:

@Resource(name = "java:comp/resource/foo/bar/SECOND_QUEUE")
private Queue queue;

我想選擇與Maven構建配置文件一起使用的名稱。

我有什么選擇?

這不是正確的做事方式。 應將資源添加到各個EJB的本地jndi名稱中。 這是為了將bean代碼中使用的jndi名稱與bean部署者設置的全局jndi綁定分開。 可以通過ejb-jar.xml和特定於appserver的部署描述符來處理bean 本地jndi綁定全局綁定的映射。

因此,您應該聲明您的@Resource (相當於指示資源引用名稱和類型的<resource-ref>元素),如下所示:

@Resource(name = "jms/queue/aQueue")
private Queue queue;

然后,在特定於appserver的部署描述符中(對於GlassFish,它是sun-ejb-jar.xml ,對於JBoss,它是jboss.xml ,對於WebLogic,它是weblogic-ejb-jar.xml等),聲明一個<resource-ref>元素通過<jndi-name>元素指示資源引用名稱和全局jndi綁定。

<resource-ref>
  <res-ref-name>jms/queue/aQueue</res-ref-name>
  <jndi-name>resource/foo/bar/ONE_QUEUE</jndi-name>
</resource-ref>

一旦你完成整個工作,就可以很容易地使用Maven對這個特定於appserver的部署描述符進行變形,以適應具有配置文件和過濾的不同環境。 只需使用屬性,激活資源過濾,並在配置文件中設置不同的值。 像這樣的東西:

<resource-ref>
  <res-ref-name>jms/queue/aQueue</res-ref-name>
  <jndi-name>${my.jndi.name}</jndi-name>
</resource-ref>

我認為你可以使用maven過濾,雖然它會感覺很奇怪。

是一篇關於這種方法的文章。

如果您不想進行per-bean配置,可以使用JBoss Seam功能(請參閱Seam參考文檔 )。 我不知道這是否是Java依賴注入規范(JSR-299)的一部分(如果您擔心供應商獨立性)。

編輯:顯然它是JSR-299的一部分,請參見樹脂關於JSR-299的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM