Java EJB:用环境变量替换 JNDI

问题描述

我有以下使用 JNDI 并托管在 Weblogic 中的 MDB。我想用环境变量替换 JNDI 查找值,以便我可以外部化这些值并在 TomEE plus 中部署应用程序。

注意:此应用程序也使用 Spring。

@MessageDriven(
    name = "MyMDB",activationConfig = {
        @ActivationConfigProperty(
            propertyName = "destinationType",propertyValue = "javax.jms.Queue"),@ActivationConfigProperty(
            propertyName = "connectionFactoryJndiName",propertyValue = "jms/myConnectionFactoryJndiName"),@ActivationConfigProperty(
            propertyName = "destinationJndiName",propertyValue = "jms/myDestinationJndiName")
    }
)
@Interceptors(SpringBeanAutowiringInterceptor.class)
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.required)
public class MyMDB implements MessageListener
{
    @Resource 
    private MessageDrivenContext ctx;
    
    /** The exception conn factory. */
    @Resource(name = "jms/myConnectionFactoryExceptionJndiName")
    private ConnectionFactory exceptionConnFactory;

    /** The exception queue. */
    @Resource(name = "jms/myDestinationExceptionJndiName")
    private Queue exceptionQueue;

    @Autowired
    private MessageProcessorService messageProcessorService;
    
    @Autowired
    private MessageSenderService messageSenderService;
    
    @Autowired
    private AppConfig appConfig;
   
    @Override
    public void onMessage(Message message) {
        log.debug("START onMessage");
        
    }

    private void publishexceptionQueueMessage(String textMessage) {
        jmstemplate jmstemplate = new jmstemplate(getExceptionConnFactory());
        jmstemplate.convertAndSend(getExceptionQueue(),textMessage);
        log.info("Message has been published to exception queue");
    }
    
    ....
}

在这种情况下,我会将 jms/myConnectionFactoryJndiNamejms/myDestinationJndiNamejms/myConnectionFactoryExceptionJndiNamejms/myDestinationExceptionJndiName 替换为环境变量。

更新:到目前为止,我已经尝试更新下面提到的 MessageDriven 部分

@MessageDriven(activationConfig = { 
    @ActivationConfigProperty(
      propertyName = "destination",propertyValue = "tutorialQueue"),@ActivationConfigProperty(
      propertyName = "destinationType",propertyValue = "javax.jms.Queue")
})

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...