You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Charles Moulliard <cm...@gmail.com> on 2009/12/07 14:00:59 UTC

Re: camel-example-etl & openJPA (If this is a new instance, make sure any version and/or auto-generated primary key fields are null/default when persisting)

I have understand why we have this error :

In fact, within the CustomerTransformer class, the method findCustomerByName
(which is called) uses 'template.persist(answer);' who will inform Spring to
insert in the DB a customerEntity object if it not find from the SQL query.
Next, the same object is send to the JPA endpoint who will detect that the
object has not been detached.

That means that attachment/detachment of objects does not occur in the same
way using Hibernate, JPA, ... as the code works for Hibernate

Does anybody knows what was the intend to use this code in the transform
class ?

**
* Finds a customer for the given username, or creates and inserts a new one
*/
protected CustomerEntity findCustomerByName(JpaTemplate template, String
user) {
List<CustomerEntity> list = CastUtils.cast(template.find("select x from " +
CustomerEntity.class.getName() + " x where x.userName = ?1", user));
if (list.isEmpty()) {
CustomerEntity answer = new CustomerEntity();
answer.setUserName(user);
template.persist(answer);
return answer;
} else {
return list.get(0);
}
}

Regards,

Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com
twitter : http://twitter.com/cmoulliard
Linkedlin : http://www.linkedin.com/in/charlesmoulliard

Apache Camel Group :
http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm


On Mon, Dec 7, 2009 at 1:11 PM, Charles Moulliard <cm...@gmail.com>wrote:

> When I try to use the example camel-example-etl with openJPA, here is the
> error that I receive
>
> [ Camel thread 0: FileComponent] Tracer                         INFO
> be7ae591-e2ea-4021-8179-d6bdd5f5398c >>> (route1)  -->
> jpa://org.apache.camel.ex
> ample.etl.CustomerEntity?consumeLockEntity=true <<< Pattern:InOnly,
> Headers:{CamelFileNameOnly=row2.xml,
> CamelFileAbsolutePath=D:\Dvlpt\Java\workspace
> \apache-camel-source\examples\camel-example-etl\src\data\row2.xml,
> CamelFileRelativePath=row2.xml, CamelFileName=row2.xml,
> CamelFilePath=src\data\row2
> .xml, CamelFileParent=src\data, CamelFileAbsolute=false,
> CamelFileLength=982, CamelFileLastModified=Tue Jul 14 10:37:40 CEST 2009},
> BodyType:org.apach
> e.camel.example.etl.PersonDocument, Body:<person
> user="hiram"><firstName>Hiram</firstName><lastName>Chirino</lastName><city>Tampa</city></person>
> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
> 12662763, conn 1634627> executing prepstmnt 585058
> SELECT t0.id, t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
>         t0.userName, t0.zip
>     FROM Customer t0
>     WHERE (t0.userName = ?)
> [params=(String) hiram]
> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
> 12662763, conn 1634627> [0 ms] spent
> [ Camel thread 0: FileComponent] CustomerTransformer            DEBUG
> Created customer: Customer[userName: hiram firstName: Hiram surname:
> Chirino]
> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
> 12662763, conn 21035203> executing prepstmnt 19041450
> SELECT t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
>         t0.userName, t0.zip
>     FROM Customer t0
>     WHERE t0.id = ?
> [params=(long) 0]
> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
> 12662763, conn 21035203> [0 ms] spent
> [ Camel thread 0: FileComponent] DefaultErrorHandler            DEBUG
> Failed delivery for exchangeId: be7ae591-e2ea-4021-8179-d6bdd5f5398c. On
> deliver
> y attempt: 0 caught:
> org.springframework.dao.DataIntegrityViolationException: Attempt to persist
> detached object "org.apache.camel.example.etl.Custome
> rEntity@8bfa09".  If this is a new instance, make sure any version and/or
> auto-generated primary key fields are null/default when persisting.; nested
> exception is <openjpa-1.3.0-SNAPSHOT-r422266:881892 nonfatal store error>
> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist det
> ached object "org.apache.camel.example.etl.CustomerEntity@8bfa09".  If
> this is a new instance, make sure any version and/or auto-generated primary
> key
>  fields are null/default when persisting.
>
> Anybody has an idea to avoid this ?
>
> Regards,
>
> Charles Moulliard
> Senior Enterprise Architect
> Apache Camel Committer
>
> *****************************
> blog : http://cmoulliard.blogspot.com
> twitter : http://twitter.com/cmoulliard
> Linkedlin : http://www.linkedin.com/in/charlesmoulliard
>
> Apache Camel Group :
> http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
>

Re: camel-example-etl & openJPA (If this is a new instance, make sure any version and/or auto-generated primary key fields are null/default when persisting)

Posted by Charles Moulliard <cm...@gmail.com>.
This line does not make sense as the instance CustomerEntity is send next to
the JPA endpoint (consuler) who will persist the information in the DB
through Spring Transaction handling and DB connection.

Regards,

Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com
twitter : http://twitter.com/cmoulliard
Linkedlin : http://www.linkedin.com/in/charlesmoulliard

Apache Camel Group :
http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm


On Tue, Dec 8, 2009 at 9:19 AM, Claus Ibsen <cl...@gmail.com> wrote:

> On Tue, Dec 8, 2009 at 9:11 AM, Charles Moulliard <cm...@gmail.com>
> wrote:
> > Hi Claus,
> >
> > By removing the line template.persist(answer), I have been able to solve
> the
> > issue and to run the project with openJPA.
> >
>
> Then it doesn't save the user into the database? Or how do you store
> users in the database?
> I thought there was some detach or the likes you could call after the
> persist so the enttiy can be used outside JPA.
>
>
> > Willem will now adapt the example and will provide different profiles to
> > allow to run etl with Hibernate, OpenJPA and Derby. By the way, we have
> also
> > test it on OSGI server.
> >
> > Regards,
> >
> > Charles Moulliard
> > Senior Enterprise Architect
> > Apache Camel Committer
> >
> > *****************************
> > blog : http://cmoulliard.blogspot.com
> > twitter : http://twitter.com/cmoulliard
> > Linkedlin : http://www.linkedin.com/in/charlesmoulliard
> >
> > Apache Camel Group :
> > http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
> >
> >
> > On Mon, Dec 7, 2009 at 8:20 PM, Claus Ibsen <cl...@gmail.com>
> wrote:
> >
> >> On Mon, Dec 7, 2009 at 2:00 PM, Charles Moulliard <cmoulliard@gmail.com
> >
> >> wrote:
> >> > I have understand why we have this error :
> >> >
> >> > In fact, within the CustomerTransformer class, the method
> >> findCustomerByName
> >> > (which is called) uses 'template.persist(answer);' who will inform
> Spring
> >> to
> >> > insert in the DB a customerEntity object if it not find from the SQL
> >> query.
> >> > Next, the same object is send to the JPA endpoint who will detect that
> >> the
> >> > object has not been detached.
> >> >
> >> > That means that attachment/detachment of objects does not occur in the
> >> same
> >> > way using Hibernate, JPA, ... as the code works for Hibernate
> >> >
> >> > Does anybody knows what was the intend to use this code in the
> transform
> >> > class ?
> >> >
> >>
> >> No I guess many of those "standards" are still problematic to use as
> >> some impl. do X and others do Y.
> >> I guess maybe some detach or whatever needs to be added when it
> >> inserts the customer.
> >>
> >> Can you not try looking into this as you are messing with it already?
> >>
> >>
> >> > **
> >> > * Finds a customer for the given username, or creates and inserts a
> new
> >> one
> >> > */
> >> > protected CustomerEntity findCustomerByName(JpaTemplate template,
> String
> >> > user) {
> >> > List<CustomerEntity> list = CastUtils.cast(template.find("select x
> from "
> >> +
> >> > CustomerEntity.class.getName() + " x where x.userName = ?1", user));
> >> > if (list.isEmpty()) {
> >> > CustomerEntity answer = new CustomerEntity();
> >> > answer.setUserName(user);
> >> > template.persist(answer);
> >> > return answer;
> >> > } else {
> >> > return list.get(0);
> >> > }
> >> > }
> >> >
> >> > Regards,
> >> >
> >> > Charles Moulliard
> >> > Senior Enterprise Architect
> >> > Apache Camel Committer
> >> >
> >> > *****************************
> >> > blog : http://cmoulliard.blogspot.com
> >> > twitter : http://twitter.com/cmoulliard
> >> > Linkedlin : http://www.linkedin.com/in/charlesmoulliard
> >> >
> >> > Apache Camel Group :
> >> > http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
> >> >
> >> >
> >> > On Mon, Dec 7, 2009 at 1:11 PM, Charles Moulliard <
> cmoulliard@gmail.com
> >> >wrote:
> >> >
> >> >> When I try to use the example camel-example-etl with openJPA, here is
> >> the
> >> >> error that I receive
> >> >>
> >> >> [ Camel thread 0: FileComponent] Tracer                         INFO
> >> >> be7ae591-e2ea-4021-8179-d6bdd5f5398c >>> (route1)  -->
> >> >> jpa://org.apache.camel.ex
> >> >> ample.etl.CustomerEntity?consumeLockEntity=true <<< Pattern:InOnly,
> >> >> Headers:{CamelFileNameOnly=row2.xml,
> >> >> CamelFileAbsolutePath=D:\Dvlpt\Java\workspace
> >> >> \apache-camel-source\examples\camel-example-etl\src\data\row2.xml,
> >> >> CamelFileRelativePath=row2.xml, CamelFileName=row2.xml,
> >> >> CamelFilePath=src\data\row2
> >> >> .xml, CamelFileParent=src\data, CamelFileAbsolute=false,
> >> >> CamelFileLength=982, CamelFileLastModified=Tue Jul 14 10:37:40 CEST
> >> 2009},
> >> >> BodyType:org.apach
> >> >> e.camel.example.etl.PersonDocument, Body:<person
> >> >>
> >>
> user="hiram"><firstName>Hiram</firstName><lastName>Chirino</lastName><city>Tampa</city></person>
> >> >> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL
> -
> >> <t
> >> >> 12662763, conn 1634627> executing prepstmnt 585058
> >> >> SELECT t0.id, t0.city, t0.firstName, t0.phone, t0.street,
> t0.surname,
> >> >>         t0.userName, t0.zip
> >> >>     FROM Customer t0
> >> >>     WHERE (t0.userName = ?)
> >> >> [params=(String) hiram]
> >> >> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL
> -
> >> <t
> >> >> 12662763, conn 1634627> [0 ms] spent
> >> >> [ Camel thread 0: FileComponent] CustomerTransformer            DEBUG
> >> >> Created customer: Customer[userName: hiram firstName: Hiram surname:
> >> >> Chirino]
> >> >> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL
> -
> >> <t
> >> >> 12662763, conn 21035203> executing prepstmnt 19041450
> >> >> SELECT t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
> >> >>         t0.userName, t0.zip
> >> >>     FROM Customer t0
> >> >>     WHERE t0.id = ?
> >> >> [params=(long) 0]
> >> >> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL
> -
> >> <t
> >> >> 12662763, conn 21035203> [0 ms] spent
> >> >> [ Camel thread 0: FileComponent] DefaultErrorHandler            DEBUG
> >> >> Failed delivery for exchangeId: be7ae591-e2ea-4021-8179-d6bdd5f5398c.
> On
> >> >> deliver
> >> >> y attempt: 0 caught:
> >> >> org.springframework.dao.DataIntegrityViolationException: Attempt to
> >> persist
> >> >> detached object "org.apache.camel.example.etl.Custome
> >> >> rEntity@8bfa09".  If this is a new instance, make sure any version
> >> and/or
> >> >> auto-generated primary key fields are null/default when persisting.;
> >> nested
> >> >> exception is <openjpa-1.3.0-SNAPSHOT-r422266:881892 nonfatal store
> >> error>
> >> >> org.apache.openjpa.persistence.EntityExistsException: Attempt to
> persist
> >> det
> >> >> ached object "org.apache.camel.example.etl.CustomerEntity@8bfa09".
>  If
> >> >> this is a new instance, make sure any version and/or auto-generated
> >> primary
> >> >> key
> >> >>  fields are null/default when persisting.
> >> >>
> >> >> Anybody has an idea to avoid this ?
> >> >>
> >> >> Regards,
> >> >>
> >> >> Charles Moulliard
> >> >> Senior Enterprise Architect
> >> >> Apache Camel Committer
> >> >>
> >> >> *****************************
> >> >> blog : http://cmoulliard.blogspot.com
> >> >> twitter : http://twitter.com/cmoulliard
> >> >> Linkedlin : http://www.linkedin.com/in/charlesmoulliard
> >> >>
> >> >> Apache Camel Group :
> >> >> http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
> >> >>
> >> >
> >>
> >>
> >>
> >> --
> >> Claus Ibsen
> >> Apache Camel Committer
> >>
> >> Author of Camel in Action: http://www.manning.com/ibsen/
> >> Open Source Integration: http://fusesource.com
> >> Blog: http://davsclaus.blogspot.com/
> >> Twitter: http://twitter.com/davsclaus
> >>
> >
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>

Re: camel-example-etl & openJPA (If this is a new instance, make sure any version and/or auto-generated primary key fields are null/default when persisting)

Posted by Claus Ibsen <cl...@gmail.com>.
On Tue, Dec 8, 2009 at 9:11 AM, Charles Moulliard <cm...@gmail.com> wrote:
> Hi Claus,
>
> By removing the line template.persist(answer), I have been able to solve the
> issue and to run the project with openJPA.
>

Then it doesn't save the user into the database? Or how do you store
users in the database?
I thought there was some detach or the likes you could call after the
persist so the enttiy can be used outside JPA.


> Willem will now adapt the example and will provide different profiles to
> allow to run etl with Hibernate, OpenJPA and Derby. By the way, we have also
> test it on OSGI server.
>
> Regards,
>
> Charles Moulliard
> Senior Enterprise Architect
> Apache Camel Committer
>
> *****************************
> blog : http://cmoulliard.blogspot.com
> twitter : http://twitter.com/cmoulliard
> Linkedlin : http://www.linkedin.com/in/charlesmoulliard
>
> Apache Camel Group :
> http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
>
>
> On Mon, Dec 7, 2009 at 8:20 PM, Claus Ibsen <cl...@gmail.com> wrote:
>
>> On Mon, Dec 7, 2009 at 2:00 PM, Charles Moulliard <cm...@gmail.com>
>> wrote:
>> > I have understand why we have this error :
>> >
>> > In fact, within the CustomerTransformer class, the method
>> findCustomerByName
>> > (which is called) uses 'template.persist(answer);' who will inform Spring
>> to
>> > insert in the DB a customerEntity object if it not find from the SQL
>> query.
>> > Next, the same object is send to the JPA endpoint who will detect that
>> the
>> > object has not been detached.
>> >
>> > That means that attachment/detachment of objects does not occur in the
>> same
>> > way using Hibernate, JPA, ... as the code works for Hibernate
>> >
>> > Does anybody knows what was the intend to use this code in the transform
>> > class ?
>> >
>>
>> No I guess many of those "standards" are still problematic to use as
>> some impl. do X and others do Y.
>> I guess maybe some detach or whatever needs to be added when it
>> inserts the customer.
>>
>> Can you not try looking into this as you are messing with it already?
>>
>>
>> > **
>> > * Finds a customer for the given username, or creates and inserts a new
>> one
>> > */
>> > protected CustomerEntity findCustomerByName(JpaTemplate template, String
>> > user) {
>> > List<CustomerEntity> list = CastUtils.cast(template.find("select x from "
>> +
>> > CustomerEntity.class.getName() + " x where x.userName = ?1", user));
>> > if (list.isEmpty()) {
>> > CustomerEntity answer = new CustomerEntity();
>> > answer.setUserName(user);
>> > template.persist(answer);
>> > return answer;
>> > } else {
>> > return list.get(0);
>> > }
>> > }
>> >
>> > Regards,
>> >
>> > Charles Moulliard
>> > Senior Enterprise Architect
>> > Apache Camel Committer
>> >
>> > *****************************
>> > blog : http://cmoulliard.blogspot.com
>> > twitter : http://twitter.com/cmoulliard
>> > Linkedlin : http://www.linkedin.com/in/charlesmoulliard
>> >
>> > Apache Camel Group :
>> > http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
>> >
>> >
>> > On Mon, Dec 7, 2009 at 1:11 PM, Charles Moulliard <cmoulliard@gmail.com
>> >wrote:
>> >
>> >> When I try to use the example camel-example-etl with openJPA, here is
>> the
>> >> error that I receive
>> >>
>> >> [ Camel thread 0: FileComponent] Tracer                         INFO
>> >> be7ae591-e2ea-4021-8179-d6bdd5f5398c >>> (route1)  -->
>> >> jpa://org.apache.camel.ex
>> >> ample.etl.CustomerEntity?consumeLockEntity=true <<< Pattern:InOnly,
>> >> Headers:{CamelFileNameOnly=row2.xml,
>> >> CamelFileAbsolutePath=D:\Dvlpt\Java\workspace
>> >> \apache-camel-source\examples\camel-example-etl\src\data\row2.xml,
>> >> CamelFileRelativePath=row2.xml, CamelFileName=row2.xml,
>> >> CamelFilePath=src\data\row2
>> >> .xml, CamelFileParent=src\data, CamelFileAbsolute=false,
>> >> CamelFileLength=982, CamelFileLastModified=Tue Jul 14 10:37:40 CEST
>> 2009},
>> >> BodyType:org.apach
>> >> e.camel.example.etl.PersonDocument, Body:<person
>> >>
>> user="hiram"><firstName>Hiram</firstName><lastName>Chirino</lastName><city>Tampa</city></person>
>> >> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
>> <t
>> >> 12662763, conn 1634627> executing prepstmnt 585058
>> >> SELECT t0.id, t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
>> >>         t0.userName, t0.zip
>> >>     FROM Customer t0
>> >>     WHERE (t0.userName = ?)
>> >> [params=(String) hiram]
>> >> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
>> <t
>> >> 12662763, conn 1634627> [0 ms] spent
>> >> [ Camel thread 0: FileComponent] CustomerTransformer            DEBUG
>> >> Created customer: Customer[userName: hiram firstName: Hiram surname:
>> >> Chirino]
>> >> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
>> <t
>> >> 12662763, conn 21035203> executing prepstmnt 19041450
>> >> SELECT t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
>> >>         t0.userName, t0.zip
>> >>     FROM Customer t0
>> >>     WHERE t0.id = ?
>> >> [params=(long) 0]
>> >> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
>> <t
>> >> 12662763, conn 21035203> [0 ms] spent
>> >> [ Camel thread 0: FileComponent] DefaultErrorHandler            DEBUG
>> >> Failed delivery for exchangeId: be7ae591-e2ea-4021-8179-d6bdd5f5398c. On
>> >> deliver
>> >> y attempt: 0 caught:
>> >> org.springframework.dao.DataIntegrityViolationException: Attempt to
>> persist
>> >> detached object "org.apache.camel.example.etl.Custome
>> >> rEntity@8bfa09".  If this is a new instance, make sure any version
>> and/or
>> >> auto-generated primary key fields are null/default when persisting.;
>> nested
>> >> exception is <openjpa-1.3.0-SNAPSHOT-r422266:881892 nonfatal store
>> error>
>> >> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist
>> det
>> >> ached object "org.apache.camel.example.etl.CustomerEntity@8bfa09".  If
>> >> this is a new instance, make sure any version and/or auto-generated
>> primary
>> >> key
>> >>  fields are null/default when persisting.
>> >>
>> >> Anybody has an idea to avoid this ?
>> >>
>> >> Regards,
>> >>
>> >> Charles Moulliard
>> >> Senior Enterprise Architect
>> >> Apache Camel Committer
>> >>
>> >> *****************************
>> >> blog : http://cmoulliard.blogspot.com
>> >> twitter : http://twitter.com/cmoulliard
>> >> Linkedlin : http://www.linkedin.com/in/charlesmoulliard
>> >>
>> >> Apache Camel Group :
>> >> http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
>> >>
>> >
>>
>>
>>
>> --
>> Claus Ibsen
>> Apache Camel Committer
>>
>> Author of Camel in Action: http://www.manning.com/ibsen/
>> Open Source Integration: http://fusesource.com
>> Blog: http://davsclaus.blogspot.com/
>> Twitter: http://twitter.com/davsclaus
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus

Re: camel-example-etl & openJPA (If this is a new instance, make sure any version and/or auto-generated primary key fields are null/default when persisting)

Posted by Charles Moulliard <cm...@gmail.com>.
Hi Claus,

By removing the line template.persist(answer), I have been able to solve the
issue and to run the project with openJPA.

Willem will now adapt the example and will provide different profiles to
allow to run etl with Hibernate, OpenJPA and Derby. By the way, we have also
test it on OSGI server.

Regards,

Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com
twitter : http://twitter.com/cmoulliard
Linkedlin : http://www.linkedin.com/in/charlesmoulliard

Apache Camel Group :
http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm


On Mon, Dec 7, 2009 at 8:20 PM, Claus Ibsen <cl...@gmail.com> wrote:

> On Mon, Dec 7, 2009 at 2:00 PM, Charles Moulliard <cm...@gmail.com>
> wrote:
> > I have understand why we have this error :
> >
> > In fact, within the CustomerTransformer class, the method
> findCustomerByName
> > (which is called) uses 'template.persist(answer);' who will inform Spring
> to
> > insert in the DB a customerEntity object if it not find from the SQL
> query.
> > Next, the same object is send to the JPA endpoint who will detect that
> the
> > object has not been detached.
> >
> > That means that attachment/detachment of objects does not occur in the
> same
> > way using Hibernate, JPA, ... as the code works for Hibernate
> >
> > Does anybody knows what was the intend to use this code in the transform
> > class ?
> >
>
> No I guess many of those "standards" are still problematic to use as
> some impl. do X and others do Y.
> I guess maybe some detach or whatever needs to be added when it
> inserts the customer.
>
> Can you not try looking into this as you are messing with it already?
>
>
> > **
> > * Finds a customer for the given username, or creates and inserts a new
> one
> > */
> > protected CustomerEntity findCustomerByName(JpaTemplate template, String
> > user) {
> > List<CustomerEntity> list = CastUtils.cast(template.find("select x from "
> +
> > CustomerEntity.class.getName() + " x where x.userName = ?1", user));
> > if (list.isEmpty()) {
> > CustomerEntity answer = new CustomerEntity();
> > answer.setUserName(user);
> > template.persist(answer);
> > return answer;
> > } else {
> > return list.get(0);
> > }
> > }
> >
> > Regards,
> >
> > Charles Moulliard
> > Senior Enterprise Architect
> > Apache Camel Committer
> >
> > *****************************
> > blog : http://cmoulliard.blogspot.com
> > twitter : http://twitter.com/cmoulliard
> > Linkedlin : http://www.linkedin.com/in/charlesmoulliard
> >
> > Apache Camel Group :
> > http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
> >
> >
> > On Mon, Dec 7, 2009 at 1:11 PM, Charles Moulliard <cmoulliard@gmail.com
> >wrote:
> >
> >> When I try to use the example camel-example-etl with openJPA, here is
> the
> >> error that I receive
> >>
> >> [ Camel thread 0: FileComponent] Tracer                         INFO
> >> be7ae591-e2ea-4021-8179-d6bdd5f5398c >>> (route1)  -->
> >> jpa://org.apache.camel.ex
> >> ample.etl.CustomerEntity?consumeLockEntity=true <<< Pattern:InOnly,
> >> Headers:{CamelFileNameOnly=row2.xml,
> >> CamelFileAbsolutePath=D:\Dvlpt\Java\workspace
> >> \apache-camel-source\examples\camel-example-etl\src\data\row2.xml,
> >> CamelFileRelativePath=row2.xml, CamelFileName=row2.xml,
> >> CamelFilePath=src\data\row2
> >> .xml, CamelFileParent=src\data, CamelFileAbsolute=false,
> >> CamelFileLength=982, CamelFileLastModified=Tue Jul 14 10:37:40 CEST
> 2009},
> >> BodyType:org.apach
> >> e.camel.example.etl.PersonDocument, Body:<person
> >>
> user="hiram"><firstName>Hiram</firstName><lastName>Chirino</lastName><city>Tampa</city></person>
> >> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
> <t
> >> 12662763, conn 1634627> executing prepstmnt 585058
> >> SELECT t0.id, t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
> >>         t0.userName, t0.zip
> >>     FROM Customer t0
> >>     WHERE (t0.userName = ?)
> >> [params=(String) hiram]
> >> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
> <t
> >> 12662763, conn 1634627> [0 ms] spent
> >> [ Camel thread 0: FileComponent] CustomerTransformer            DEBUG
> >> Created customer: Customer[userName: hiram firstName: Hiram surname:
> >> Chirino]
> >> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
> <t
> >> 12662763, conn 21035203> executing prepstmnt 19041450
> >> SELECT t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
> >>         t0.userName, t0.zip
> >>     FROM Customer t0
> >>     WHERE t0.id = ?
> >> [params=(long) 0]
> >> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL -
> <t
> >> 12662763, conn 21035203> [0 ms] spent
> >> [ Camel thread 0: FileComponent] DefaultErrorHandler            DEBUG
> >> Failed delivery for exchangeId: be7ae591-e2ea-4021-8179-d6bdd5f5398c. On
> >> deliver
> >> y attempt: 0 caught:
> >> org.springframework.dao.DataIntegrityViolationException: Attempt to
> persist
> >> detached object "org.apache.camel.example.etl.Custome
> >> rEntity@8bfa09".  If this is a new instance, make sure any version
> and/or
> >> auto-generated primary key fields are null/default when persisting.;
> nested
> >> exception is <openjpa-1.3.0-SNAPSHOT-r422266:881892 nonfatal store
> error>
> >> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist
> det
> >> ached object "org.apache.camel.example.etl.CustomerEntity@8bfa09".  If
> >> this is a new instance, make sure any version and/or auto-generated
> primary
> >> key
> >>  fields are null/default when persisting.
> >>
> >> Anybody has an idea to avoid this ?
> >>
> >> Regards,
> >>
> >> Charles Moulliard
> >> Senior Enterprise Architect
> >> Apache Camel Committer
> >>
> >> *****************************
> >> blog : http://cmoulliard.blogspot.com
> >> twitter : http://twitter.com/cmoulliard
> >> Linkedlin : http://www.linkedin.com/in/charlesmoulliard
> >>
> >> Apache Camel Group :
> >> http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
> >>
> >
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Author of Camel in Action: http://www.manning.com/ibsen/
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>

Re: camel-example-etl & openJPA (If this is a new instance, make sure any version and/or auto-generated primary key fields are null/default when persisting)

Posted by Claus Ibsen <cl...@gmail.com>.
On Mon, Dec 7, 2009 at 2:00 PM, Charles Moulliard <cm...@gmail.com> wrote:
> I have understand why we have this error :
>
> In fact, within the CustomerTransformer class, the method findCustomerByName
> (which is called) uses 'template.persist(answer);' who will inform Spring to
> insert in the DB a customerEntity object if it not find from the SQL query.
> Next, the same object is send to the JPA endpoint who will detect that the
> object has not been detached.
>
> That means that attachment/detachment of objects does not occur in the same
> way using Hibernate, JPA, ... as the code works for Hibernate
>
> Does anybody knows what was the intend to use this code in the transform
> class ?
>

No I guess many of those "standards" are still problematic to use as
some impl. do X and others do Y.
I guess maybe some detach or whatever needs to be added when it
inserts the customer.

Can you not try looking into this as you are messing with it already?


> **
> * Finds a customer for the given username, or creates and inserts a new one
> */
> protected CustomerEntity findCustomerByName(JpaTemplate template, String
> user) {
> List<CustomerEntity> list = CastUtils.cast(template.find("select x from " +
> CustomerEntity.class.getName() + " x where x.userName = ?1", user));
> if (list.isEmpty()) {
> CustomerEntity answer = new CustomerEntity();
> answer.setUserName(user);
> template.persist(answer);
> return answer;
> } else {
> return list.get(0);
> }
> }
>
> Regards,
>
> Charles Moulliard
> Senior Enterprise Architect
> Apache Camel Committer
>
> *****************************
> blog : http://cmoulliard.blogspot.com
> twitter : http://twitter.com/cmoulliard
> Linkedlin : http://www.linkedin.com/in/charlesmoulliard
>
> Apache Camel Group :
> http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
>
>
> On Mon, Dec 7, 2009 at 1:11 PM, Charles Moulliard <cm...@gmail.com>wrote:
>
>> When I try to use the example camel-example-etl with openJPA, here is the
>> error that I receive
>>
>> [ Camel thread 0: FileComponent] Tracer                         INFO
>> be7ae591-e2ea-4021-8179-d6bdd5f5398c >>> (route1)  -->
>> jpa://org.apache.camel.ex
>> ample.etl.CustomerEntity?consumeLockEntity=true <<< Pattern:InOnly,
>> Headers:{CamelFileNameOnly=row2.xml,
>> CamelFileAbsolutePath=D:\Dvlpt\Java\workspace
>> \apache-camel-source\examples\camel-example-etl\src\data\row2.xml,
>> CamelFileRelativePath=row2.xml, CamelFileName=row2.xml,
>> CamelFilePath=src\data\row2
>> .xml, CamelFileParent=src\data, CamelFileAbsolute=false,
>> CamelFileLength=982, CamelFileLastModified=Tue Jul 14 10:37:40 CEST 2009},
>> BodyType:org.apach
>> e.camel.example.etl.PersonDocument, Body:<person
>> user="hiram"><firstName>Hiram</firstName><lastName>Chirino</lastName><city>Tampa</city></person>
>> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
>> 12662763, conn 1634627> executing prepstmnt 585058
>> SELECT t0.id, t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
>>         t0.userName, t0.zip
>>     FROM Customer t0
>>     WHERE (t0.userName = ?)
>> [params=(String) hiram]
>> 16094  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
>> 12662763, conn 1634627> [0 ms] spent
>> [ Camel thread 0: FileComponent] CustomerTransformer            DEBUG
>> Created customer: Customer[userName: hiram firstName: Hiram surname:
>> Chirino]
>> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
>> 12662763, conn 21035203> executing prepstmnt 19041450
>> SELECT t0.city, t0.firstName, t0.phone, t0.street, t0.surname,
>>         t0.userName, t0.zip
>>     FROM Customer t0
>>     WHERE t0.id = ?
>> [params=(long) 0]
>> 16110  camel  TRACE  [Camel thread 0: FileComponent] openjpa.jdbc.SQL - <t
>> 12662763, conn 21035203> [0 ms] spent
>> [ Camel thread 0: FileComponent] DefaultErrorHandler            DEBUG
>> Failed delivery for exchangeId: be7ae591-e2ea-4021-8179-d6bdd5f5398c. On
>> deliver
>> y attempt: 0 caught:
>> org.springframework.dao.DataIntegrityViolationException: Attempt to persist
>> detached object "org.apache.camel.example.etl.Custome
>> rEntity@8bfa09".  If this is a new instance, make sure any version and/or
>> auto-generated primary key fields are null/default when persisting.; nested
>> exception is <openjpa-1.3.0-SNAPSHOT-r422266:881892 nonfatal store error>
>> org.apache.openjpa.persistence.EntityExistsException: Attempt to persist det
>> ached object "org.apache.camel.example.etl.CustomerEntity@8bfa09".  If
>> this is a new instance, make sure any version and/or auto-generated primary
>> key
>>  fields are null/default when persisting.
>>
>> Anybody has an idea to avoid this ?
>>
>> Regards,
>>
>> Charles Moulliard
>> Senior Enterprise Architect
>> Apache Camel Committer
>>
>> *****************************
>> blog : http://cmoulliard.blogspot.com
>> twitter : http://twitter.com/cmoulliard
>> Linkedlin : http://www.linkedin.com/in/charlesmoulliard
>>
>> Apache Camel Group :
>> http://www.linkedin.com/groups?home=&gid=2447439&trk=anet_ug_hm
>>
>



-- 
Claus Ibsen
Apache Camel Committer

Author of Camel in Action: http://www.manning.com/ibsen/
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus