【问题标题】:Grails JMS Plugin to WebLogic JMS ServerGrails JMS 插件到 WebLogic JMS 服务器
【发布时间】:2012-02-24 20:54:19
【问题描述】:

是否有人将 Grails 2.x JMS 插件配置为向远程 WebLogic JMS 服务器发送/接收消息?我尝试过这样的 resources.groovy 配置,但没有成功:

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

【问题讨论】:

  • 你能提供一些额外的细节吗?在启动或运行时失败、堆栈跟踪等?
  • 我给的配置太离谱了,我从 JMS 插件中得到一个关于无法找到 jmsConnectionFactory 的错误。我正在寻找任何有将 Grails 连接到 WebLogic JMS 的示例。
  • 如果你可以帮助this

标签: grails jms weblogic


【解决方案1】:

关于在 Grails 中使用远程 Weblogic 服务器发送/接收 JMS 的完整答案资源并不多,所以我在 2-3 年前想出了一个工作解决方案,不需要任何插件

  1. 确保至少Weblogic wlthint3client.jar 在lib 目录中。

  2. 设置 JMS 监听器

    • 在 conf/spring/resources.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"
      }
      
    • 在服务/myListenerService.groovy 中:

      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/spring/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}"
      
           } 
       }
      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2020-02-15
    • 2018-07-26
    • 2011-05-21
    • 2016-07-17
    • 2014-04-17
    • 2016-08-02
    相关资源
    最近更新 更多