Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Issues with remove jta, eclipselink with a relational object..

Two questions:

1) What getObjects(UserRole.class, exp) doing? Can you provide source code for this call?
2) Why are you doing getEntityManager().merge(urole)? Why not use entityManager variable and why you are merging entity before removing it do you expect it to be detached?

Rodion

On Wed, Jul 11, 2012 at 2:50 PM, vaidya nathan <vaidyaatdst@xxxxxxxxx> wrote:
Sorry to repost but anyone having a solution for this problem .. ? I
am totally struck ..

On Tue, Jul 10, 2012 at 1:05 PM, vaidya nathan <vaidyaatdst@xxxxxxxxx> wrote:
> Greetings,
>
> I am having issues with delete on a table which connects two entities
> but otherwise is independant(No cascade,etc).  I keep getting
> Caused by: java.lang.IllegalArgumentException: Entity must be managed
> to call remove: UserRole@595, try merging the detached and try the
> remove again.
>
> Following is my model.I have a class UserRole which is defined as follows
>
> @Entity
> @Table(name="USER_ROLE",
> uniqueConstraints={@UniqueConstraint(columnNames={"USER_ID",
> "ROLE_ID"})})
> public class UserRole extends PersistableObject implements
> Effectivity<EffectivePeriodWithEnable>
> {
>     @OneToOne(fetch=FetchType.EAGER)
>     @JoinColumn(name="USER_ID", nullable=false)
>     private User user ;
>     @OneToOne(fetch=FetchType.EAGER)
>     @JoinColumn(name="ROLE_ID", nullable=false)
>     private Role role ;
>     @Column(name="DEFAULT_ROLE", nullable=false)
>     private Boolean defaultRole ;
>     @Embedded
>     private EffectivePeriodWithEnable span ;
> }
> which basically is a relation between User and Role with some
> attributes defined in the relation like the defaultRole and a span
> when the relation would be active/inactive.
>
>
> User is like this
> public class User extends PersistableObject
> {
>         @Column(name="LOGIN", nullable=false, unique=true, length=20)
>         private String loginName;
>     @Column(name="FIRST_NM", nullable=false, length=35)
>     private String firstName;
>     @Column(name="MID_NM", nullable=true, length=25)
>     private String middleName;
>      ...etc...etc(Not relevant to this discussion)
> }
>
> @Entity
> @Table(name="ROLE")
> public class Role extends PersistableObject
> {
>     @Column(name="NAME", nullable=false, unique=true, length=50)
>         private String name;
>
>     @Column(name="DESCRIPTION", nullable=true, length=255)
>         private String description;
> ....etc...etc(Not relevant to this discussion)
> }
>
>  I have a method defined in the DAO something like this
>
> public void setRoles(User user, List<Role> roles,
> EffectivePeriodWithEnable p) throws DAOException
>     {
>         try
>         {
>             ExpressionBuilder eb = new ExpressionBuilder(UserRole.class) ;
>             _expression_ exp = eb.get("user").equal(user) ;
>             List<UserRole> uroles = (List<UserRole>)
> getObjects(UserRole.class, exp);
>             EntityManager entityManager = getEntityManager() ;
>
>             if (uroles != null)
>             {
>                 for (UserRole urole: uroles)
>                 {
>                     // I have tried this with and without merge . I
> dont think that i should do a merge since the getobjects (which
> internally uses ReadAllQuery to fetch
>                     // the object is just got here in this method..
>                     getEntityManager().remove(getEntityManager().merge(urole));
>                 }
>              }
>             }
>         }
>
> I am running in a jta container and these methods are called within an
> ejb method call . When it runs and tries to remove , following is what
> i get
>
>
> Caused by: java.lang.IllegalArgumentException: Entity must be managed
> to call remove: com.abc.hps.vvv.security.bom.helpers.UserRole@595, try
> merging the detached and try the remove again.
>         at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.performRemove(UnitOfWorkImpl.java:3559)
>         at org.eclipse.persistence.internal.jpa.EntityManagerImpl.remove(EntityManagerImpl.java:518)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365)
>         at $Proxy640.remove(Unknown Source)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
>         at $Proxy640.remove(Unknown Source)
>         at com.abc.hps.vvv.common.dao.eclipselink.EclipseLinkDAO.deleteObject(EclipseLinkDAO.java:179)
>         at com.abc.hps.vvv.dao.eclipselink.EclipseLinkSecurityDAO.setRoles(EclipseLinkSecurityDAO.java:212)
>         at com.abc.hps.vvv.security.impls.vvvSecurityImpl.setRoles(vvvSecurityImpl.java:401)
>         at com.abc.hps.vvv.security.impls.vvvSecurityImpl.setRoles(vvvSecurityImpl.java:412)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
>         at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
>         at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
>         at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
>         at sun.reflect.GeneratedMethodAccessor369.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
>         at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_1937287906.invoke(InvocationContextInterceptor_z_fillMethod_1937287906.java)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
>         at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1937287906.invoke(InvocationContextInterceptor_z_setup_1937287906.java)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
>         at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
>         ... 96 more
> 12:51:28,665 INFO  [STDOUT]:152 12:51:28,664 TRACE
> [ClassPathXmlApplicationContext]:301 Publishing event in
> ApplicationContext 'vvvWebBeanFactory':
> org.springframework.security.access.event.PublicInvocationEvent[source=FilterInvocation:
> URL: /abcrw/js/abc/assets/set2/delete_16.png]
>
> We are using eclipselink 2.4.0 and are running in a jboss 5.1.0.GA
> container.  Please help !!! I just dont understand why it is not able
> to remove .. May be i am missing something
>
> Cheers
> Vaidya
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users


Back to the top