You need to make sure that your jms sender activates a JBI
endpoint with a QName of "{http://servicemix.org/example/}sender".
This can be done using the following code in your constructor:
setService(new QName("http://servicemix.org/example/", "sender");
for you jms sender. You can also set the service property on the
jms sender to this QName in spring.
On 10/3/06, bhuvi <[EMAIL PROTECTED]> wrote:
hi all,
i tried jms example with my own configuration xml.The client sends to
the topic "demo.org.servicemix.source"
the jms component receives it.But the problem is with transferring this
message to another JmsSenderComponent.
As given in the servicemix.xml for JMS-Binding , i dont want to use the
activationspec tag
<sm:activationSpec componentName="inputReceiver"
service="my:inputReceiver"
destinationService="my:outputSender">
which would directly say the destination service.Is there any other way to
mention the destination service.
My xml would list all the components in this way and here is my complete
xml.
<beans>
<!-- the JBI container -->
<!-- the JBI container -->
<bean id="jbi"
class="org.apache.servicemix.jbi.container.SpringJBIContainer">
<property name="embedded" value="true" />
<property name="componentNames">
<list>
<value>outputSender</value>
<value>inputReceiver</value>
</list>
</property>
</bean>
<!-- components within the JBI container -->
<!-- outputSender -->
<bean id="outputSender"
class="src.com.jeffhanson.esb.servicemix.JmsSenderComponent">
<property name="template">
<bean class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref local="jmsFactory" />
</property>
<property name="defaultDestinationName" value="demo.org.servicemix.result"
/>
<property name="pubSubDomain" value="true" />
</bean>
</property>
</bean>
<!-- END outputSender -->
<!-- inputReceiver -->
<bean id="inputReceiver"
class="src.com.jeffhanson.esb.servicemix.JmsInUsingJCABinding">
<property name="jcaContainer" ref="jencks" />
<property name="activationSpec">
<bean id="ActiveMQActivationSpec"
class="org.apache.activemq.ra.ActiveMQActivationSpec">
<property name="destination" value="demo.org.servicemix.source" />
<property name="destinationType" value="javax.jms.Topic" />
</bean>
</property>
</bean>
<!-- END inputReceiver -->
<!-- jencks -->
<bean id="jencks" class="org.jencks.JCAContainer" singleton="true">
<property name="bootstrapContext">
<bean class="org.jencks.factory.BootstrapContextFactoryBean">
<property name="threadPoolSize" value="25" />
</bean>
</property>
<property name="resourceAdapter">
<bean id="activeMQResourceAdapter"
class="org.apache.activemq.ra.ActiveMQResourceAdapter" singleton="true">
<property name="serverUrl" value="tcp://localhost:61616" />
</bean>
</property>
</bean>
<!-- END jencks -->
<!--jms factory-->
<bean id="jmsFactory"
class="org.apache.activemq.pool.PooledConnectionFactory">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://localhost:61616</value>
</property>
</bean>
</property>
</bean>
<!--END jms factory-->
<!-- broker
<bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
<property name="config" value="classpath:activemq.xml" />
<property name="start" value="true" />
</bean>-->
<bean id="transactionContextManager"
class="org.jencks.factory.TransactionContextManagerFactoryBean" />
<bean id="transactionManager"
class="org.jencks.factory.GeronimoTransactionManagerFactoryBean" />
<!--added
<bean id="aspec"
class="org.apache.servicemix.jbi.container.ActivationSpec">
<property name="id" value="receiver"/>
<property name="service" ref="receiverServiceName"/>
<property name="endpoint" value="receiver"/>
<property name="component">
<bean
class="src.com.jeffhanson.esb.servicemix.JmsReceiverComponent"/>
</property>
</bean> -->
<!--end
<bean id="receiver"
class="src.com.jeffhanson.esb.servicemix.JmsReceiverComponent" /> -->
</beans>
and inside my JmsInbinding class onMessage() method i have the following
code.
public void onMessage(Message jmsMessage) {
try {
System.out.println("Received: " + jmsMessage);
ComponentContext ctx= getContext();
InOnly messageExchange =
ctx.getDeliveryChannel().createExchangeFactory().createInOnlyExchange();
NormalizedMessage inMessage = messageExchange.createMessage();
SourceTransformer st= new SourceTransformer();
try {
marshaler.toNMS(inMessage, jmsMessage);
System.out.println("marshaled to nm");
System.out.println("set nm");
//added now
resolver = new ServiceNameEndpointResolver( new
QName("http://servicemix.org/example/", "sender"));
ServiceEndpoint destination = null;
System.out.println("Assigned Resolver:"+resolver);
if (resolver != null)
{ System.out.println("resolver----++>"+resolver);
destination =
resolver.resolveEndpoint(getContext(),messageExchange,NullEndpointFilter.getInstance());
System.out.println("resolver----++>"+resolver);
}
if (destination != null)
{
System.out.println("Assigned Destination:"+destination);
messageExchange.setEndpoint(destination);
}
}
catch (JMSException e) {
messageExchange.setError(e);
messageExchange.setStatus(ExchangeStatus.ERROR);
}
}
catch (JBIException e) {
throw new RuntimeJBIException(e);
}
}
i get the following exception
11:26:23,872 ERROR [ActiveMQSession] error dispatching message:
org.apache.servicemix.jbi.RuntimeJBIException:
org.apache.servicemix.jbi.NoServiceAvailableException: Cannot find an
instance of the service: {http://servicemix.org/example/}sender
at
src.com.jeffhanson.esb.servicemix.JmsInBinding.onMessage(JmsInBinding.java:141)
at
org.jencks.LocalTransactionEndpoint.onMessage(LocalTransactionEndpoint.java:68)
at
org.apache.activemq.ra.MessageEndpointProxy$MessageEndpointAlive.onMessage(MessageEndpointProxy.java:120)
at
org.apache.activemq.ra.MessageEndpointProxy.onMessage(MessageEndpointProxy.java:60)
at org.apache.activemq.ActiveMQSession.run(ActiveMQSession.java:692)
at
org.apache.activemq.ra.ServerSessionImpl.run(ServerSessionImpl.java:163)
at
org.apache.geronimo.connector.work.WorkerContext.run(WorkerContext.java:291)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown
Source)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.apache.servicemix.jbi.NoServiceAvailableException: Cannot
find an instance of the service: {http://servicemix.org/example/}sender
at
org.apache.servicemix.jbi.resolver.ServiceNameEndpointResolver.createServiceUnavailableException(ServiceNameEndpointResolver.java:60)
at
org.apache.servicemix.jbi.resolver.EndpointResolverSupport.resolveEndpoint(EndpointResolverSupport.java:39)
at
src.com.jeffhanson.esb.servicemix.JmsInBinding.onMessage(JmsInBinding.java:119)
... 8 more
I think the problem is with registering the JmsSenderComponent.Could anyone
suggest me a solution for this pls...
thanks in advance.
--
View this message in context:
http://www.nabble.com/Jms-component-tf2374227.html#a6614706
Sent from the ServiceMix - User mailing list archive at Nabble.com.
--
Cheers,
Guillaume Nodet