在mule中配置JMS connectionfactory

时间:2014-12-28 15:03:53

标签: jms mule

有人可以建议我如何使用connectionFactory-ref 在mule中配置connectionfactory

 我正在尝试使用connectionFactory-ref在mule中配置connectionfactory [这是我关注的url ::: http://www.mulesoft.org/documentation-3.2/display/32X/JMS+Transport+Reference]

在上述文件中 - 提及 - 配置ConnectionFactory

最重要的一个属性是connectionFactory-ref。这是对ConnectionFactory对象的引用,该对象为JMS提供程序创建新连接。该对象必须实现接口javax.jms.ConnectionFactory。

的ConnectionFactory

所以实现以上是我的mule配置xml

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:smtps="http://www.mulesoft.org/schema/mule/smtps"
xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting" xmlns:https="http://www.mulesoft.org/schema/mule/https"
xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:jms="http://www.mulesoft.org/schema/mule/jms" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.5.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mulesoft.org/schema/mule/smtps http://www.mulesoft.org/schema/mule/smtps/current/mule-smtps.xsd
http://www.mulesoft.org/schema/mule/https http://www.mulesoft.org/schema/mule/https/current/mule-https.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd">

<spring:bean name="connectionFactory" class="com.ers.connections.ConnectionFactoryImpl"/>
<jms:activemq-connector name="Active_MQForApex" connectionFactory-ref="connectionFactory"  validateConnections="true" doc:name="Active MQ"/>  
<flow name="apexwritequeueFlow1" doc:name="apexwritequeueFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="niviTest" doc:name="HTTP"/>
<logger message="Payload ::: #[payload]" level="INFO" doc:name="Logger"/>             
<jms:outbound-endpoint queue="ANS.RecOps.Incoming" connector-ref="Active_MQForApex"  doc:name="JMS"/> 
</flow>
</mule>

java class

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ConnectionFactoryImpl implements javax.jms.ConnectionFactory {

@Override
public Connection createConnection() throws JMSException {      
// Create a ConnectionFactory
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("21233", "123", "ssl://xxxx.autonet-yyy.com:443");  
return connectionFactory.createConnection();
}

@Override
public Connection createConnection(String arg0, String arg1)
throws JMSException {
// TODO Auto-generated method stub
return null;
}

}



但是我收到此错误

。 Root Exception是:不支持的ConnectionFactory类型:com.ers.connections.ConnectionFactoryImpl。键入:class java.lang.IllegalArgumentException ERROR 2014-12-28 11:53:26,141 [main] org.mule.module.launcher.application.DefaultMuleApplication:null java.lang.IllegalArgumentException:不支持的ConnectionFactory类型:com.ers.connections.ConnectionFactoryImpl

先感谢您。 任何建议最受赞赏。 谢谢你,问候 NIVI

3 个答案:

答案 0 :(得分:1)

如果你没有任何理由,你没有在帖子中显示,要编写自己的ConenctionFactory实现,你应该直接使用JMS提供者提供的实现。

所以你应该使用像这样的bean定义

<spring:bean id="connectionFactory" 
            class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="tcp://localhost:61616"/>
</spring:bean>

答案 1 :(得分:1)

您正在使用 ActiveMQ 连接器,并且它需要一个类型为 org.apache.activemq.ActiveMQConnectionFactory 的工厂类。如果您真的需要自定义工厂, ConnectionFactoryImpl 类应该扩展activemq工厂:

import org.apache.activemq.ActiveMQConnectionFactory;

public class ConnectionFactoryImpl extends ActiveMQConnectionFactory {

    // Override the methods you need

}

然后您可以在连接器的 connectionFactory-ref 属性中引用它。

答案 2 :(得分:1)

您的实施可能不提供任何特殊功能,如果是这种情况,请使用默认连接器:

<jms:activemq-connector name="JmsConnector" specification="1.1" />

但是,如果您要使用某些特殊行为,使用activemq连接器,您只需要一个实现org.apache.activemq.ActiveMQConnectionFactory的连接工厂,这是因为these two lines。然后只需使用以下内容:

  <spring:beans>
      <spring:bean name="myActiveMqConnectionFactory"
                 class="org.apache.activemq.spring.MyActiveMQConnectionFactory"
                 p:brokerURL="vm://esb-amq-broker" <--- Just some example property />
  </spring:beans>

  <jms:activemq-connector name="myJmsConnector"
                          specification="1.1"
                          connectionFactory-ref="AmqConnectionFactory"
                          persistentDelivery="true" />

但是请两次关于这样做的需要,原始的activemq连接器可能提供连接缓存的几乎任何你需要的东西。如果这是您所需要的,请考虑使用this