Ok, the only problem I see in the code is a missing DONE status when sending
an InOut mep.
Could you paste the stack trace of the exception that is being thrown please
?

On Tue, Apr 8, 2008 at 5:59 PM, <[EMAIL PROTECTED]> wrote:

> I am attaching the bean code. This includes some calls to a simple JDBC BC
> that I have developed..
>
>
> ------------------------------------------------------------------------------------------------
>
> public class BeanRouter implements MessageExchangeListener {
>    @Resource
>    DeliveryChannel channel;
>
>    @Resource
>    ComponentContext context;
>
>    public void setContext(ComponentContext context)
>    {
>        this.context=context;
>    }
>
>    public ComponentContext getContext()
>    {
>        return context;
>    }
>
>    // private static Map myMap = java.util.Collections.synchronizedMap(new
>    // HashMap());
>    // private static int key;
>    // private static final Log log = LogFactory.getLog(BeanRouter.class);
>    public void onMessageExchange(MessageExchange exchange)
>            throws MessagingException {
>        InOnly in = (InOnly) exchange;
>        if (in.getStatus() == ExchangeStatus.DONE) {
>            return;
>        } else if (in.getStatus() == ExchangeStatus.ERROR) {
>            return;
>        }
>        System.err.println(in.getService().getLocalPart() + " requested");
>        TransactionManager tm=null;
>        try {
>
>            NormalizedMessage message = exchange.getMessage("in");
>            Source content = message.getContent();
>            String inStr = getStringFromSource(content);
>
>            tm = (TransactionManager) getContext().getTransactionManager();
>            tm.begin();
>
>            // Camel Persist SU
>            String contentStr = DBLoggerTemplate.getDBXML("J20", "S20",
> true);
>            Source persistSource = new StreamSource(new
> java.io.StringReader(
>                    contentStr));
>            callEndpointInOnlyMEP(
>                    "http://servicemix.apache.org/samples/logging-sample";,
>                    "persist", persistSource);
>
>            // JDBC SP Call
>            String callSpInput = "<jdbc:input xmlns:jdbc='
> http://servicemix.apache.org/jdbc/1.0' "
>                    + "operationType='SimpleSP' "
>                    + "sql='call sp_audit(?,?,?,?)' "
>                    + "paramValues ='01,S02,2007-02-11,DONE' />";
>            Source spSource = new StreamSource(new java.io.StringReader(
>                    callSpInput));
>            callEndpointInOnlyMEP(
>                    "http://servicemix.apache.org/samples/logging-sample";,
>                    "jdbcService", spSource);
>
>            // JDBC Encoded Insert
>            String encodedObject = (String) Base64Util.encodeObject(inStr);
>            String callInsert = "<jdbc:input xmlns:jdbc='
> http://servicemix.apache.org/jdbc/1.0' "
>                    + "operationType='Insert' "
>                    + "sql='insert into ncoarequest values(?,?)' "
>                    + "paramValues ='ID01," + encodedObject + "' />";
>            Source insertSource = new StreamSource(new
> java.io.StringReader(
>                    callInsert));
>            callEndpointInOnlyMEP(
>                    "http://servicemix.apache.org/samples/logging-sample";,
>                    "jdbcService", insertSource);
>
>            // JDBC Decoded Query
>            String selectInput = "<jdbc:input xmlns:jdbc='
> http://servicemix.apache.org/jdbc/1.0' "
>                    + "operationType='SIMPLEQUERY' "
>                    + "sql='select reqXML from ncoarequest where id=?' "
>                    + "returnType='STRING' " + "paramValues ='ID01' />";
>            Source selectSource = new StreamSource(new
> java.io.StringReader(
>                    selectInput));
>            Source resultSource = callEndpointInOutMEP(
>                    "http://servicemix.apache.org/samples/logging-sample";,
>                    "jdbcService", selectSource);
>            String selectedString = getStringFromSource(resultSource);
>            String encodedXML = getXPathValue("//*/ResultSet/text()",
>                    selectedString);
>            String decodedString = (String) Base64Util
>                    .decodeToObject(encodedXML);
>            System.err.println("Output from jdbc call:" + decodedString);
>
>            // JDBC Delete
>            String callDelete = "<jdbc:input xmlns:jdbc='
> http://servicemix.apache.org/jdbc/1.0' "
>                    + "operationType='Delete' "
>                    + "sql='delete from ncoarequest where id=?' "
>                    + "paramValues ='ID01'/>";
>            Source deleteSource = new StreamSource(new
> java.io.StringReader(
>                    callDelete));
>            callEndpointInOnlyMEP(
>                    "http://servicemix.apache.org/samples/logging-sample";,
>                    "jdbcService", deleteSource);
>            exchange.setStatus(ExchangeStatus.DONE);
>            channel.send(exchange);
>            tm.commit();
>        } catch (Exception e) {
>            try
>            {
>                System.err.println("Rollbacking Transaction");
>                tm.rollback();
>            }catch(Exception ex)
>            {
>            }
>            exchange.setError(e);
>            channel.send(exchange);
>        }
>    }
>
> //Helper Method - In MEP call
>    private void callEndpointInOnlyMEP(String namespace, String
> serviceName,
>            Source source) throws Exception {
>        QName targetService = new QName(namespace, serviceName);
>        MessageExchangeFactory exchangeFact = channel
>                .createExchangeFactoryForService(targetService);
>        InOnly exchange = exchangeFact.createInOnlyExchange();
>        NormalizedMessage message = exchange.createMessage();
>        message.setContent(source);
>        exchange.setInMessage(message);
>        channel.sendSync(exchange);
>        if (exchange.getStatus() == ExchangeStatus.ERROR) {
>            Exception e = exchange.getError();
>            if (e == null) {
>                e = new JBIException("Unkown error");
>            }
>            throw e;
>        }
>    }
>
> //Helper Method -  In-Out MEP call
>
>    private Source callEndpointInOutMEP(String namespace, String
> serviceName,
>            Source source) throws Exception {
>        QName targetService = new QName(namespace, serviceName);
>        MessageExchangeFactory exchangeFact = channel
>                .createExchangeFactoryForService(targetService);
>        InOut exchange = exchangeFact.createInOutExchange();
>        NormalizedMessage message = exchange.createMessage();
>        message.setContent(source);
>        exchange.setInMessage(message);
>        channel.sendSync(exchange);
>        if (exchange.getStatus() == ExchangeStatus.ERROR) {
>            Exception e = exchange.getError();
>            if (e == null) {
>                e = new JBIException("Unkown error");
>            }
>            throw e;
>        }
>        return exchange.getMessage("out").getContent();
>    }
>
>  //Helper String from Source
>    private String getStringFromSource(Source source) throws Exception {
>        StringWriter stringWriter = new StringWriter();
>        Result result = new StreamResult(stringWriter);
>        TransformerFactory factory = TransformerFactory.newInstance();
>        Transformer transformer = factory.newTransformer();
>        transformer.transform(source, result);
>        return stringWriter.getBuffer().toString();
>    }
>
> //Helper to get xPath Value
>    private String getXPathValue(String xPath, String selectedString)
>            throws Exception {
>        DocumentBuilderFactory docFactory = DocumentBuilderFactory
>                .newInstance();
>        docFactory.setNamespaceAware(true); // never forget this!
>        DocumentBuilder builder = docFactory.newDocumentBuilder();
>        Document doc = builder.parse(new InputSource(new
> java.io.StringReader(
>                selectedString)));
>        XPathFactory factory = XPathFactory.newInstance();
>        XPath xpath = factory.newXPath();
>        XPathExpression expr = xpath.compile(xPath);
>        return (String) expr.evaluate(doc, XPathConstants.STRING);
>    }
> }
>
>
>
> ------------------------------------------------------------------------------------------------
>
> Regards,
> Rabi Mishra
> Wipro Technologies
> Hinjewadi, Pune
> Cell: +91(0)9765391877
> http://rabisblog.blogspot.com/
>
> ________________________________
>
> From: Guillaume Nodet [mailto:[EMAIL PROTECTED]
> Sent: Tue 4/8/2008 9:13 PM
> To: [email protected]
> Subject: Re: Transaction in a Bean SU
>
>
>
> Maybe you could create a junit test so that we can have a look at the code
> used ?
>
> On Tue, Apr 8, 2008 at 5:31 PM, <[EMAIL PROTECTED]> wrote:
>
> > oops... sorry about the typo..
> >
> > Yes, I could not control the transaction. I am calling these endpoints
> > using sendSync() as there is a particular sequence of calling these
> > endpoints, so I am calling them synchronously.....
> >
> > ________________________________
> >
> > From: Bruce Snyder [mailto:[EMAIL PROTECTED]
> > Sent: Tue 4/8/2008 8:57 PM
> > To: [email protected]
> > Subject: Re: Transaction in a Bean SU
> >
> >
> >
> > On Tue, Apr 8, 2008 at 2:32 PM,  <[EMAIL PROTECTED]> wrote:
> > > Thanx Bruce.. I could get the transaction manager this way.
> >
> > Great :-).
> >
> > >  But I could manage to control the transaction with multipe endpoints
> > >  with it.
> >
> > Do you mean that you *cannot* control the transaction?
> >
> > >  Is this because this is the transaction manager in the component
> > >  context?? Does JBI support transaction rollbacks with endpoints??
> >
> > From within the servicemix-bean POJO, to send messages to these other
> > endpoints, are you calling send() or sendSync()?
> >
> > Bruce
> > --
> > perl -e 'print
> > unpack("u30","D0G)[EMAIL PROTECTED]&5R\"F)R=6-E+G-N>61E<D\!G;6%I;\"YC;VT*"
> > );'
> >
> > Apache ActiveMQ - http://activemq.org/
> > Apache Camel - http://activemq.org/camel/
> > Apache ServiceMix - http://servicemix.org/
> > Apache Geronimo - http://geronimo.apache.org/
> >
> > Blog: http://bruceblog.org/
> >
> >
> >
> > The information contained in this electronic message and any attachments
> > to this message are intended for the exclusive use of the addressee(s)
> and
> > may contain proprietary, confidential or privileged information. If you
> are
> > not the intended recipient, you should not disseminate, distribute or
> copy
> > this e-mail. Please notify the sender immediately and destroy all copies
> of
> > this message and any attachments.
> >
> > WARNING: Computer viruses can be transmitted via email. The recipient
> > should check this email and any attachments for the presence of viruses.
> The
> > company accepts no liability for any damage caused by any virus
> transmitted
> > by this email.
> >
> > www.wipro.com
> >
> >
>
>
> --
> Cheers,
> Guillaume Nodet
> ------------------------
> Blog: http://gnodet.blogspot.com/
>
>
>
> The information contained in this electronic message and any attachments
> to this message are intended for the exclusive use of the addressee(s) and
> may contain proprietary, confidential or privileged information. If you are
> not the intended recipient, you should not disseminate, distribute or copy
> this e-mail. Please notify the sender immediately and destroy all copies of
> this message and any attachments.
>
> WARNING: Computer viruses can be transmitted via email. The recipient
> should check this email and any attachments for the presence of viruses. The
> company accepts no liability for any damage caused by any virus transmitted
> by this email.
>
> www.wipro.com
>
>


-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/

Reply via email to