You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Davis Ford <da...@gmail.com> on 2009/01/08 18:35:41 UTC

questions on JPA component

Hi, regarding the @Consumed annotation

http://activemq.apache.org/camel/maven/camel-jpa/apidocs/org/apache/camel/component/jpa/Consumed.html

I'm a bit curious how this works.  If I have the following setup:

NodeA <----> OracleDB <----> NodeB

Where I have a JpaProducer on NodeA and a JpaConsumer on NodeB

And I have something like

@Entity
public class MyEntity {

    etc..

    @Consumed
    public void consumed() {
        System.out.println("Message was consumed");
    }
}

I tried this out in a single JVM test that hits an oracle database and
it works.  I get a callback on the @Consumed method.  But in a
distributed environment -- how does this work?  How would the producer
on NodeA know that the consumer on NodeB got the Exchange?

Follow up question:  The @Consumed annotation will come in really
handy for me if I can get it to work the way I want.  Here's what I am
attempting to do:

1. Producer sends message
2. Consumer gets message
3. Consumer has to do some operation that may fail
  3a. If it does fail I do not want the producer notified that the
message was consumed
  3b. If it does not fail, I want the producer notified so it can do
some local cleanup

Maybe the @Consumed is not what I want -- is there some way to insert
a hook on the consumer side to control when the producer would get
notified?

Thanks in advance,
Davis

-- 
Zeno Consulting, Inc.
http://www.zenoconsulting.biz
248.894.4922 phone
313.884.2977 fax

Re: questions on JPA component

Posted by James Strachan <ja...@gmail.com>.
2009/1/8 Davis Ford <da...@gmail.com>:
> Hi, regarding the @Consumed annotation
>
> http://activemq.apache.org/camel/maven/camel-jpa/apidocs/org/apache/camel/component/jpa/Consumed.html
>
> I'm a bit curious how this works.  If I have the following setup:
>
> NodeA <----> OracleDB <----> NodeB
>
> Where I have a JpaProducer on NodeA and a JpaConsumer on NodeB
>
> And I have something like
>
> @Entity
> public class MyEntity {
>
>    etc..
>
>    @Consumed
>    public void consumed() {
>        System.out.println("Message was consumed");
>    }
> }
>
> I tried this out in a single JVM test that hits an oracle database and
> it works.  I get a callback on the @Consumed method.  But in a
> distributed environment -- how does this work?  How would the producer
> on NodeA know that the consumer on NodeB got the Exchange?

The JVM that is processing an entity bean has the @Consumed method
invoked as a kinda lifecycle hook - as an alternative to the entity
bean just being deleted.


> Follow up question:  The @Consumed annotation will come in really
> handy for me if I can get it to work the way I want.  Here's what I am
> attempting to do:
>
> 1. Producer sends message
> 2. Consumer gets message
> 3. Consumer has to do some operation that may fail
>  3a. If it does fail I do not want the producer notified that the
> message was consumed
>  3b. If it does not fail, I want the producer notified so it can do
> some local cleanup

So either your producer could poll using a JPA query for entities
which are marked processed; or you could explicitly send a
notification message?

FWIW if the processing of the consumer fails, you might want to just
rollback the transaction and retry again later?


> Maybe the @Consumed is not what I want -- is there some way to insert
> a hook on the consumer side to control when the producer would get
> notified?

from("jpa:MyEntityBean").to("activemq:TheProducersQueue");


-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://fusesource.com/