有人可以建议我如何使用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
答案 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。