2013-12-16 2 views
0

안녕하십니까 StackOverflow 커뮤니티,JNDI를 사용하여 Websphere MQ에 연결할 수 없습니다

현재 대기열에 연결하는 데 Spring을 사용하고 있습니다. 나는 우리의 테스트 대 UAT 환경에서 연결할 수있는 공급자를 구성 할 수 있기를 원합니다. UAT에서는 IBM WMQ 7을 사용합니다. Test에서는 ActiveMQ를 사용하고 있습니다.

우리는 또한 두 경우 모두 SSL 연결을 사용하고 있습니다.

<bean id="jmsFactory" name="jmsFactory" class="com.ibm.mq.jms.MQConnectionFactory"> 
    <property name="queueManager" value="${UM_MQ_QM}" /> 
    <property name="hostName" value="${UM_MQ_HOST}" /> 
    <property name="channel" value="${UM_MQ_CHANNEL}" /> 
    <property name="port" value="${UM_MQ_PORT}" /> 
    <property name="transportType" value="1" /> 
    <property name="SSLCipherSuite" value="${SSL_CIPHER_SUITE}" /> 
</bean> 

JNDI를 사용하여, 내가 ActiveMQ를 연결할 수 있어요 :

현재, 우리는 WMQ 7에 연결하기 위해 작동하는 다음과 같은 구성을 가지고있다. 그러나 공급자 클래스를 전환 할 때 다음 예외가 발생합니다.

봄 JNDI 구성 :

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

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
    <property name="environment"> 
    <props> 
     <prop key="java.naming.factory.initial">com.ibm.mq.jms.context.WMQInitialContextFactory</prop> 
     <prop key="java.naming.provider.url">${UM_MQ_HOST}:${UM_MQ_PORT}/${UM_MQ_CHANNEL}</prop> 
    </props> 
    </property> 
</bean> 

예외 :

  1. 우리는 명시 적으로 권한을 설정하지 않습니다 :이 중 2 가지로 인해 의심

    Caused by: javax.naming.NamingException: Caught an Exception trying to create the admin queue. Exception was: com.ibm.mq.pcf.PCFException: MQJE001: Completion Code '2', Reason '2035'. [Root exception is com.ibm.mq.pcf.PCFException: MQJE001: Completion Code '2', Reason '2035'.] 
        at com.ibm.mq.jms.context.MQContext.<init>(MQContext.java:294) 
        at com.ibm.mq.jms.context.WMQInitialContextFactory.getInitialContext(WMQInitialContextFactory.java:29) 
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667) 
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 
        at javax.naming.InitialContext.init(InitialContext.java:223) 
        at javax.naming.InitialContext.<init>(InitialContext.java:197) 
        at org.springframework.jndi.JndiTemplate.createInitialContext(JndiTemplate.java:136) 
        at org.springframework.jndi.JndiTemplate.getContext(JndiTemplate.java:103) 
        at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:85) 
        at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) 
        at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178) 
        at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) 
        at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) 
        at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:201) 
        at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:187) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483) 
        ... 109 more 
    Caused by: com.ibm.mq.pcf.PCFException: MQJE001: Completion Code '2', Reason '2035'. 
        at com.ibm.mq.pcf.PCFMessageAgent.send(PCFMessageAgent.java:241) 
        at com.ibm.mq.jms.context.MQContext.<init>(MQContext.java:273) 
        ... 125 more 
    

    위에서 설명한 JMS 관리 대기열

  2. 암호 설정이에서 작동하지 않습니다. 봄 구성

어떤 지침을 제공 할 수 있습니까? 이전에이 문제에 직면 한 경우 해결책은 무엇입니까?

나는

호세

+0

나는 이걸 보았다고 믿는다. http://stackoverflow.com/questions/12889953/unable-to-connect-to-queue-manager-in-websphere-mq-7-1 – Ashish

답변

0

당신은 WMQInitialContextFactory을 사용하지 않으려는, 대답은 그냥 내 눈에 약간의 안개 :

감사가, 바로 내 얼굴 쳐다보고 확신합니다. 파일 기반 JNDI 또는 실제 JNDI 레지스트리를 사용하십시오.

WMQInitialContextFactory는 IBM 직원이 개발을위한 간단한 도구로 작성한 SupportPac ME01에서 나왔습니다. SupportPac ME01은 간단한 개발 이상의 용도로 권장되지 않습니다. 대부분의 IBM MQ 사람들은 결코 그것을 사용하지 않는다고 말합니다. 또한 WMQInitialContextFactory는 IBM에서 지원하지 않습니다.

WMQInitialContextFactory를 사용하라고 말한 사람은 IBM MQ 모범 사례에서 스스로 새로 고침해야합니다.

+0

설명해 주셔서 감사합니다. WMQInitialContextFactory의 사용을 방해하는 IBM 링크 또는 일부 설명서가 있습니까? 이것은 내 이해를위한 것입니다. –

+1

이 사용법에서는 사용하지 말고 사용법에 대해서는 말하지 않았습니다. 제발 불완전한 대답을하지 말아주세요 – shaILU

0

본격적인 배포를 위해 LDAP 백업 JNDI 컨텍스트를 사용하는 것이 좋습니다. 파일 시스템 컨텍스트는 Oracle에서 제공되며 AFAIK는 프로덕션 환경에서도 지원되지 않습니다.

이동하여 간단한 파일 시스템 컨텍스트를 사용하십시오. 메시징을 위해 QM에 정상적으로 연결되어 있습니까? MQ에 보호되거나 정상적으로 연결되는 WMQ Admin 대기열입니까? 문제 (추상)

그렇지는 WebSphere MQ 응용 프로그램 또는 채널에 공인 2035 MQRC을 얻고있다 :

+0

당신이 무슨 말을하는지 모르겠군요. IBM의 MQ Best Practices는 (1) 파일 기반 JNDI 또는 (2) LDAP JNDI를 사용하는 것입니다. MQ 보안에 관한 한, 큐 관리자의 OAM이 사용자 ID/그룹별로 MQ 객체에 대한 권한 부여를 처리합니다. 자세한 내용은 setmqaut/dspmqaut 명령을 참조하십시오. – Roger

1

당신은 의미 2035의 MQ 이유 코드를 받고 있습니다. 이 실패의 원인을 이해해야합니다.

2,035

0x000007f3 MQRC_NOT_AUTHORIZED

사용자가 시도하는 기능을 수행 할 권한이없는 경우 원인 MQRC 2,035 (MQRC_NOT_AUTHORIZED)가 리턴된다.

문제 해결 사용자에게 기능 수행 권한이 부여되지 않은 경우 MQRC 2035 (MQRC_NOT_AUTHORIZED)가 리턴됩니다. 사용자가 액세스 할 수없는 개체를 결정하고 개체에 대한 사용자 액세스를 제공하십시오.

디버깅 기술 : dspmqaut (표시 권한 명령)를 사용하여 사용자가 원하는 개체에 액세스 할 권한이 있는지 확인하십시오.

그러나 JNDI에 관한 다른 사람들의 이야기를 듣고, 그들은 그들이 말하는 것을 알고 있습니다.

관련 문제