Подключение к очереди EMS JMS с использованием Spring3 + JNDI - PullRequest
3 голосов
/ 20 июля 2011

У меня возникли проблемы с установлением соединения с очередью JMS Tibco EMS и чтением из нее.

<beans>
    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">com.tibco.tibjms.naming.TibjmsInitialContextFactory</prop>
                <prop key="java.naming.provider.url">tcp://ems-dit-am-uat-1.app.xxx.net:30055</prop>
            </props>
        </property>
    </bean>

    <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate" /> <property name="jndiName"
        value="DRDRFIQueueConnectionFactory" /> </bean>

    <bean id="jmsDestinationResolver"
        class="org.springframework.jms.support.destination.JndiDestinationResolver">
        <property name="jndiTemplate" ref="jndiTemplate" />
        <property name="cache" value="true" />
    </bean>

    <bean id="destination" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate" />
        <property name="jndiName" value="Q.NY.DERIV.DRD.RFI" />
    </bean>

    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsConnectionFactory" />
        <property name="destinationResolver" ref="jmsDestinationResolver" />
        <property name="defaultDestination" ref="destination" />
    </bean>


    <bean id="jmsReceiver" class="com.csfb.fao.rds.rfi.application.DRDReceiverTst">
        <property name="jmsTemplate">
            <ref bean="jmsTemplate" />
        </property>
    </bean>

</beans>

Исключение, которое я получаю:

javax.naming.AuthenticationException: не разрешено: неверное имя или пароль [Исключением корня является javax.jms.JMSSecurityException: недействительно имя или пароль] в com.tibco.tibjms.naming.TibjmsContext.lookup (TibjmsContext.java:668) в com.tibco.tibjms.naming.TibjmsContext.lookup (TibjmsContext.java:489) в javax.naming.InitialContext.lookup (InitialContext.java:392) в org.springframework.jndi.JndiTemplate $ 1.doInContext (JndiTemplate.java:154) в org.springframework.jndi.JndiTemplate.execute (JndiTemplate.java:87) в org.springframework.jndi.JndiTemplate.lookup (JndiTemplate.java:152) в org.springframework.jndi.JndiTemplate.lookup (JndiTemplate.java:178) в org.springframework.jndi.JndiLocatorSupport.lookup (JndiLocatorSupport.java:95) в org.springframework.jndi.JndiObjectLocator.lookup (JndiObjectLocator.java:105) в org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback (JndiObjectFactoryBean.java:201) в org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet (JndiObjectFactoryBean.java:187) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1477) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1417) ... еще 12

Единственный пользователь / пароль, который мне дали, относится к самой очереди JMS - где я могу это установить?

Спасибо Chris

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Понял - нужно обернуть фабрику соединений в UserCredentialsConnectionFactory:

<bean id="authenticationConnectionFactory"
    class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="jmsConnectionFactory" />
    <property name="username" value="yyyyy" />
    <property name="password" value="xxxx" />
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="authenticationConnectionFactory" />
    <property name="destinationResolver" ref="jmsDestinationResolver" />
    <property name="defaultDestination" ref="destination" />
2 голосов
/ 30 сентября 2013

У меня была похожая проблема, решение было добавить (помимо решения из этого вопроса)

<prop key="java.naming.security.principal">username</prop>
<prop key="java.naming.security.credentials">password</prop>

до jndiTemplate конфигурация бина

1 голос
/ 20 июля 2011

У меня нет опыта работы с EMS, но пользователь и пароль обычно задаются на фабрике соединений, поэтому вы можете настроить их для объекта, предоставляемого JNDI.

...