Hello List,

I try to do my first steps with EJB3 and set up a small example persisting a 
detatched pojo entity (which is generated in a client) through a stateless 
session bean. 

I´ll attach the code of the three components at the end of the message.
When I invoke the the method, that should persist the entity I get the 
following exception:

  | Exception in thread "main" javax.ejb.EJBException: 
javax.persistence.PersistenceException: 
org.hibernate.PersistentObjectException: detached entity passed to persist: 
com.toolsforjobs.j2ee.test.server.domain.Debtor
  |     at 
org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69)
  |     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
  |     at 
org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:225)
  |     at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
  |     at 
org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
  |     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:828)
  |     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:681)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:358)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:398)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:239)
  | 

But that is exactly what I´m wanting: Saving a detached entry ;-)
What I´m doing wrong?

Regards
---
Joachim

The Entity Bean

  | package com.toolsforjobs.j2ee.test.server.domain;
  | 
  | import java.io.Serializable;
  | 
  | import javax.persistence.CascadeType;
  | import javax.persistence.Entity;
  | import javax.persistence.GeneratedValue;
  | import javax.persistence.Id;
  | import javax.persistence.OneToOne;
  | import javax.persistence.Transient;
  | 
  | @Entity
  | public class Debtor implements Serializable{
  |     @Transient
  |     private static final long serialVersionUID = 3154162344396113561L;
  |     
  |     int id;
  |     String idAtCustomer;
  |     double balance;
  |     
  |     //Address address;
  |     
  |     /*
  |     @OneToOne(cascade={CascadeType.ALL})
  |     public Address getAddress() {
  |             return address;
  |     }
  |     */
  |     public double getBalance() {
  |             return balance;
  |     }
  | 
  |     @Id @GeneratedValue
  |     public int getId() {
  |             return id;
  |     }
  |     
  |     public String getIdAtCustomer() {
  |             return idAtCustomer;
  |     }
  |     /*
  |     public void setAddress(Address address) {
  |             this.address = address;
  |     }
  |     */
  |     public void setBalance(double balance) {
  |             this.balance = balance;
  |     }
  | 
  |     public void setId(int id) {
  |             this.id = id;
  |     }
  | 
  |     public void setIdAtCustomer(String idAtCustomer) {
  |             this.idAtCustomer = idAtCustomer;
  |     }
  | }
  | 

The Stateless Session Bean

  | package com.toolsforjobs.j2ee.test.server;
  | 
  | import javax.ejb.Stateless;
  | import javax.persistence.EntityManager;
  | import javax.persistence.PersistenceContext;
  | 
  | import com.toolsforjobs.j2ee.test.server.domain.Debtor;
  | 
  | @Stateless
  | public class DebtorAgentBean implements DebtorAgentRemote {
  | 
  |     @PersistenceContext(unitName="tfj-dbs") EntityManager manager;
  |     
  |     public Debtor findDebtor(int id) {
  |             return manager.find(Debtor.class, id);
  |     }
  | 
  |     public void saveDebtor(Debtor deb) {
  |             manager.persist(deb);
  |     }
  | 
  | }
  | 

And the calling client

  | package com.toolsforjobs.j2ee.test.client;
  | 
  | import javax.naming.Context;
  | import javax.rmi.PortableRemoteObject;
  | 
  | import com.toolsforjobs.j2ee.test.server.DebtorAgentRemote;
  | import com.toolsforjobs.j2ee.test.server.domain.Address;
  | import com.toolsforjobs.j2ee.test.server.domain.Debtor;
  | 
  | public class DebtorClient {
  |     public static void main(String[] args) {
  |             try {
  |                     Context jndiContext = getInitialContext();
  |                     Object ref = 
jndiContext.lookup("DebtorAgentBean/remote");
  |                     DebtorAgentRemote dao = (DebtorAgentRemote) 
PortableRemoteObject.narrow(ref, DebtorAgentRemote.class);
  |                     
  |                     Debtor deb1 = new Debtor();
  |                     deb1.setId(1);
  |                     deb1.setBalance(100.0d);
  |                     deb1.setIdAtCustomer("toolsforjobs");
  | 
  |                     dao.saveDebtor(deb1);
  |             } catch (javax.naming.NamingException ne) {
  |                     ne.printStackTrace();
  |             }
  |     }
  | 
  |     public static Context getInitialContext()  throws 
javax.naming.NamingException {
  |             return new javax.naming.InitialContext();
  |     }
  | }
  | 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3969771#3969771

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3969771

_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to