2012-02-24 65 views
1

是否有人配置了Grails 2.x JMS插件来发送/接收消息到远程WebLogic JMS服务器?我已经试过resources.groovy配置这样没有运气:Grails JMS插件到WebLogic JMS服务器

jmsConnectionFactory(InitialContext, [ 
"INITIAL_CONTEXT_FACTORY": "weblogic.jndi.WLInitialContextFactory", 
"PROVIDER_URL": "t3://remote-host:7001", 
"SECURITY_PRINCIPAL": "weblogic", 
"SECURITY_CREDENTIALS": "weblogic"]) 
+0

你能否提供一些额外的细节?在启动或运行时失败,堆栈跟踪等? – proflux 2012-02-24 21:08:25

+0

我给出的配置是离开基地的,我从JMS插件得到一个关于无法找到jmsConnectionFactory的错误。我正在寻找任何有Grails连接到WebLogic JMS的例子。 – 2012-02-25 21:50:27

+0

如果你可以帮助[this](http://stackoverflow.com/questions/9436137/jms-job-queue-with-grails) – 2012-02-26 08:19:38

回答

0

没有太多资源,完整的答案都在网上有关发送/与远程Weblogic服务的Grails接收JMS,所以我想通了2 - 3年前一个工作解决方案,无需任何插件

  1. 确保至少Weblogic wlthint3client.jar是lib目录。在服务/ myListenerService.groovy

    // Weblogic's JMS setup on Grails 
    jndiTemplate(org.springframework.jndi.JndiTemplate) { 
        environment = [ 
          "java.naming.factory.initial"  : "weblogic.jndi.WLInitialContextFactory", 
          "java.naming.provider.url"  : "t3://host.name.mustbe.same.as.configured.on.server.side:port_number", 
          "java.naming.security.principal" : "wlsadmin", 
          "java.naming.security.credentials": "password" 
        ] 
    } 
    
    
    // 
    // listener 
    // 
    jmsListenerConnectionFactory(org.springframework.jndi.JndiObjectFactoryBean) { 
        jndiTemplate = ref(jndiTemplate) 
        jndiName  = "jms.checkonserver.QueueConnectionFactory" 
    } 
    
    jmsListenerDestinationResolver(org.springframework.jms.support.destination.JndiDestinationResolver) { 
        jndiTemplate = ref(jndiTemplate) 
        cache = false 
    } 
    
    userListenerCredentialsConnectionFactory(org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter){ 
        targetConnectionFactory = ref(jmsListenerConnectionFactory) 
    } 
    
    standardListenerJmsTemplate(org.springframework.jms.core.JmsTemplate) { 
        connectionFactory = ref(userListenerCredentialsConnectionFactory) 
        destinationResolver = ref(jmsListenerDestinationResolver) 
    } 
    
    jmsListenerMessageListener(org.springframework.jms.listener.adapter.MessageListenerAdapter, ref("myListenerService")) { 
        defaultListenerMethod = "onMessage" 
    } 
    
    standardListenerJmsListenerContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) { 
        connectionFactory = ref(jmsListenerConnectionFactory) 
        destinationResolver = ref(jmsListenerDestinationResolver) 
        messageListener = jmsListenerMessageListener 
        destinationName  = "jms.checkonserver.MessagesQueue" 
    } 
    
  2. package app 
    
    class MyListenerService { 
    
         static transactional = false 
         static scope = "prototype" 
    
    def onMessage(msg) { 
         log.info "JMS msg received." 
         try { 
          String txtmsg = new String(msg as String) 
          log.info txtmsg 
         } catch (e) { 
          log.error e 
         } 
        } 
    } 
    
  3. 设置JMS 听众

    • 中的conf

      /春/ resources.groovy

    • 设置JMS 发件人

      • 在CONF

        /弹簧/ resources.groovy:

         jmsSenderConnectionFactory(org.springframework.jndi.JndiObjectFactoryBean) { 
              jndiTemplate = ref(jndiTemplate) 
              jndiName  = "jms.checkonseerver.QueueConnectionFactory" 
             } 
        
             jmsSenderDestinationResolver(org.springframework.jms.support.destination.JndiDestinationResolver) { 
              jndiTemplate = ref(jndiTemplate) 
              cache = false 
             } 
        
             userSenderCredentialsConnectionFactory(org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter){ 
              targetConnectionFactory = ref(jmsSenderConnectionFactory) 
             } 
        
             standardSenderJmsTemplate(org.springframework.jms.core.JmsTemplate) { 
              connectionFactory = ref(userSenderCredentialsConnectionFactory) // 
              destinationResolver = ref(jmsSenderDestinationResolver) 
             } 
        
      • 在服务

        /myJmsSenderService.groovy:

        package app 
        
        import org.springframework.jms.core.MessageCreator 
        
        import javax.jms.JMSException 
        import javax.jms.Message 
        import javax.jms.Session 
        
        class MyJmsSenderService { 
        
            static transactional = false 
            static scope = "prototype" 
        
            def standardSenderJmsTemplate 
        
            def sendMessage(txt) { 
              MessageCreator messageCreator = new MessageCreator() { 
              public Message createMessage(Session session) throws 
              JMSException { 
               return session.createTextMessage(txt) 
              } 
              } 
        
             standardSenderJmsTemplate.send("jms.checkonserver.SendingQueue", messageCreator) 
        
             log.info "JMS message send: ${txt}" 
        
            } 
        }