You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by ychawla <pr...@yahoo.com> on 2008/10/29 20:33:08 UTC
Connecting POJOs to Service Mix
Hello All,
I am a service mix newbie and am currently using version 3.2.2. I currently
have an HTTP endpoint is connected to a EIP recipient list. That list sends
the message out to a JMS queue, sends a transformed message to another JMS
and dumps it out to a folder. All done without writing any Java code.
Pretty cool!
I am at the next phase now and have two questions:
1) I want to take this message and send it off to a custom POJO which will
stash in a database. From what I read, I can use servicemix-cxf se,
servicemix-bean or other components. According to this FAQ:
http://servicemix.apache.org/should-i-create-my-own-jbi-components.html
I should not be creating a JBI component. That makes sense to me, but what
existing component should I use? I looked into servicemix-cxf-se but that
seemed to create a web service. So I figured servicemix-bean would be more
appropriate. I am confused which direction to go.
2) Now that I have message sitting on a JMS queue, I want to do something
with them. For example, I want to have a POJO that pops the latest message
off a queue and processes it. I don't want to listen to the queue and get
any new messages that appear, but retrieve message as consumers demand them.
Should I just write a java application in spring that listens to a queue?
Is there a better way to retrieve these message in servicemix?
Thanks,
Yogesh
--
View this message in context: http://www.nabble.com/Connecting-POJOs-to-Service-Mix-tp20234290p20234290.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: Connecting POJOs to Service Mix
Posted by ychawla <pr...@yahoo.com>.
I am in business now. I went with the servicemix-bean. Here are the steps
that I took:
1) Create servicemix service unit with Maven:
mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=servicemix-bean-service-unit -DarchetypeVersion=3.2.2
-DgroupId=org.apache.servicemix.samples.bridge -DartifactId=bridge-bean-su
2) Update xbean.xml generated service unit (it generates a handy MyBean
example for you) and my example below calls a custom bean I have set up
named 'Stash':
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:bean="http://servicemix.apache.org/bean/1.0"
xmlns:b="http://servicemix.apache.org/samples/bridge"
xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://servicemix.apache.org/bean/1.0
http://servicemix.apache.org/schema/servicemix-bean-3.2.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean:endpoint service="b:beanService" endpoint="endpoint"
bean="#myBean"/>
<bean id="myBean" class="org.apache.servicemix.samples.bridge.MyBean">
<property name="stashBean">
<ref local="stash"/>
</property>
</bean>
<bean id="stash" class="org.apache.servicemix.samples.bridge.Stash"/>
</beans>
3) Update the example bean that was generate by Maven:
public class MyBean implements MessageExchangeListener {
@Resource
private DeliveryChannel channel;
//inject some bean here to do my business logic
private Stash stashBean;
public Stash getStashBean() {
return stashBean;
}
public void setStashBean(Stash stashBean) {
this.stashBean = stashBean;
}
public void onMessageExchange(MessageExchange exchange) throws
MessagingException {
System.out.println("Received exchange: " + exchange);
//get the message out
NormalizedMessage message = exchange.getMessage("in");
Source content = message.getContent();
//process content according to your logic
//e.g. to access the message body as a String use
String body = null;
try {
body = (new SourceTransformer()).toString(content);
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//call my function that does something
stashBean.stashToRepository(body);
exchange.setStatus(ExchangeStatus.DONE);
channel.send(exchange);
}
}
4) Update the service assembly with my service unit:
<dependency>
<groupId>org.apache.servicemix.samples.bridge</groupId>
<artifactId>bridge-bean-su</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
5) Update my EIP service unit to call this, unnecessary routing removed for
brevity:
<?xml version="1.0"?>
<beans xmlns:eip="http://servicemix.apache.org/eip/1.0"
xmlns:b="http://servicemix.apache.org/samples/bridge"
>
<eip:static-recipient-list service="b:recipients" endpoint="endpoint">
<eip:recipients>
<eip:exchange-target service="b:beanService" />
</eip:recipients>
</eip:static-recipient-list>
</beans>
6) Write a simple java class for stash:
package org.apache.servicemix.samples.bridge;
public class Stash {
public void stashToRepository(String inputMessage)
{
System.out.println("I am going to stash some stuff right now");
System.out.println("Let me do something with this: " + inputMessage);
}
}
7) Run maven clean install at the project root
8) Run maven jbi:projectDeploy in the service assembly directory
It should also be noted that I have an http service unit set up that maps
incoming requests to the eip 'recipients' service. This was provided in the
bridge example.
Thanks for the assistance. The servicemix-bean component does the job.
--
View this message in context: http://www.nabble.com/Connecting-POJOs-to-Service-Mix-tp20234290p20274090.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: Connecting POJOs to Service Mix
Posted by Gert Vanthienen <ge...@skynet.be>.
L.S.,
You can do this with servicemix-camel and the Camel components. An example:
you could combine a camel-jaxb endpoint (to unmarshal the XML document into
a POJO) and a camel-jpa endpoint (to store the POJO in the DB). This way,
you would avoid having to do much coding yourself in cxf/bean, you could
simply leverage the Camel components' functionality.
For the second question, you could create a simple bean that retrieves a
single message from the queue using JMS and either use that bean with
servicemix-camel (to add e.g. marshalling to XML) or expose it to the NMR
directly using servicemix-bean/servicemix-cxfse.
Regards,
Gert
ychawla wrote:
>
> Hello All,
> I am a service mix newbie and am currently using version 3.2.2. I
> currently have an HTTP endpoint is connected to a EIP recipient list.
> That list sends the message out to a JMS queue, sends a transformed
> message to another JMS and dumps it out to a folder. All done without
> writing any Java code. Pretty cool!
>
> I am at the next phase now and have two questions:
>
> 1) I want to take this message and send it off to a custom POJO which will
> stash in a database. From what I read, I can use servicemix-cxf se,
> servicemix-bean or other components. According to this FAQ:
> http://servicemix.apache.org/should-i-create-my-own-jbi-components.html
>
> I should not be creating a JBI component. That makes sense to me, but
> what existing component should I use? I looked into servicemix-cxf-se but
> that seemed to create a web service. So I figured servicemix-bean would
> be more appropriate. I am confused which direction to go.
>
> 2) Now that I have message sitting on a JMS queue, I want to do something
> with them. For example, I want to have a POJO that pops the latest
> message off a queue and processes it. I don't want to listen to the queue
> and get any new messages that appear, but retrieve message as consumers
> demand them. Should I just write a java application in spring that
> listens to a queue? Is there a better way to retrieve these message in
> servicemix?
>
> Thanks,
> Yogesh
>
-----
---
Gert Vanthienen
http://gertvanthienen.blogspot.com
--
View this message in context: http://www.nabble.com/Connecting-POJOs-to-Service-Mix-tp20234290p20256640.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: Connecting POJOs to Service Mix
Posted by ychawla <pr...@yahoo.com>.
Hi Jean,
Thanks for the reply. I added the service unit and it autogenerated an
ExampleService. When I attempt to start service mix I get the following
message:
INFO: Creating Service
{http://example.com/exampleService}ExampleServiceService from class
org.apache.servicemix.samples.bridge.ExampleService
Oct 29, 2008 4:51:48 PM org.apache.cxf.configuration.spring.ConfigurerImpl
getBeanName
INFO: Could not determine bean name for instance of class
org.apache.cxf.transport.jbi.JBIDestination.
Oct 29, 2008 4:51:48 PM org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be
jbi://ID-165-189-102-106-11d45501dd3-39-3
Here is what the xbean.xml looks like:
<beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://servicemix.apache.org/cxfse/1.0
http://servicemix.apache.org/schema/servicemix-cxfse-3.2.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<cxfse:endpoint>
<cxfse:pojo>
<bean name="exampleServiceBean"
class="org.apache.servicemix.samples.bridge.ExampleService" />
</cxfse:pojo>
</cxfse:endpoint>
</beans>
Also, I am wondering in my eip configuration, how would I call this POJO.
Here is a simple static route list, I have set up:
<eip:static-recipient-list service="b:recipients" endpoint="endpoint">
<eip:recipients>
<eip:exchange-target service="b:jms" />
<eip:exchange-target service="b:file" />
<eip:exchange-target service="WHAT DO I PUT HERE TO CALL THE POJO?" />
</eip:recipients>
</eip:static-recipient-list>
Thanks for the assistance!
-Yogesh
--
View this message in context: http://www.nabble.com/Connecting-POJOs-to-Service-Mix-tp20234290p20236733.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
Re: Connecting POJOs to Service Mix
Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi Yogesh,
You can easily add a SU including your POJO using cxfse component.
To do it, first of all, you need a maven pom.xml for your SU containing :
[...]
<packaging>jbi-service-unit</packaging>
[...]
<dependency>
<groupId>org.apache.servicemix</groupId>
<artifactId>servicemix-cxf-se</artifactId>
<version>3.2.2</version>
</dependency>
You place your POJO code in src/main :
public class myPOJO {
public ResultObject myMethod(ArgObject arg) {
...
}
}
In the src/main/resources, you place the xbean.xml to use your POJO via cxf-se component :
<beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
xmlsns:myService="http://myservice">
<cxfse:endpoint>
<cxfse:pojo>
<bean class="myPOJO"/>
</cxfse:pojo>
</cxfse:endpoint>
</beans>
Regards
On Wednesday 29 October 2008 - 12:33, ychawla wrote:
>
> Hello All,
> I am a service mix newbie and am currently using version 3.2.2. I currently
> have an HTTP endpoint is connected to a EIP recipient list. That list sends
> the message out to a JMS queue, sends a transformed message to another JMS
> and dumps it out to a folder. All done without writing any Java code.
> Pretty cool!
>
> I am at the next phase now and have two questions:
>
> 1) I want to take this message and send it off to a custom POJO which will
> stash in a database. From what I read, I can use servicemix-cxf se,
> servicemix-bean or other components. According to this FAQ:
> http://servicemix.apache.org/should-i-create-my-own-jbi-components.html
>
> I should not be creating a JBI component. That makes sense to me, but what
> existing component should I use? I looked into servicemix-cxf-se but that
> seemed to create a web service. So I figured servicemix-bean would be more
> appropriate. I am confused which direction to go.
>
> 2) Now that I have message sitting on a JMS queue, I want to do something
> with them. For example, I want to have a POJO that pops the latest message
> off a queue and processes it. I don't want to listen to the queue and get
> any new messages that appear, but retrieve message as consumers demand them.
> Should I just write a java application in spring that listens to a queue?
> Is there a better way to retrieve these message in servicemix?
>
> Thanks,
> Yogesh
> --
> View this message in context: http://www.nabble.com/Connecting-POJOs-to-Service-Mix-tp20234290p20234290.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
--
Jean-Baptiste Onofré (Nanthrax)
BuildProcess/AutoDeploy Project Leader
http://buildprocess.sourceforge.net
jb@nanthrax.net
PGP : 17D4F086