加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何在编译时指定资源注释的名称?

发布时间:2020-12-14 05:54:46 所属栏目:Java 来源:网络整理
导读:我们的代码有这样的: @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构
我们的代码有这样的:
@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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读