Got a problem thats doing my head in if anyone can explain whats going on.  
Spent too much time trying to figure this and getting nowhere.  Any HELP 
greatfully received.

I have a simple ejb3 stateless EAR application.  it consists of an ejb jar for 
my entity classes, and an enterprise object access wrapper (EJB equiv of 
generic DAO pattern for old hibernate - tried this based on EJB3 in action 
book).

the app is simple - it has a node entity and link entity, and you link nodes to 
links backwards and forwards (at java level its a bit like a doubly linked list.

I have set transitive persistence for persist and merge actions 

essentially i have an external test app that creates some nodes and links them. 
 I use the nodeEAO to persist the 3 nodes and two links in the DB (mysql).  
This works okay, and the entities are persisted.


  | client app code outside the conatiner  ...
  |                     ctx = getInitialContext();
  | 
  |                     aNode = new Node();
  |                     bNode = new Node ();
  |                     cNode = new Node ();
  |                     uNode = new Node (); // empty
  |                     zNode = new Node (); // empty
  |                     
  | 
  |                     aNode.setNodeName("William");
  |                     bNode.setNodeName("10 South Close");
  |                     cNode.setNodeName("G01 B32");
  | 
  |                     try
  |                     {
  |                     UserTransaction ut = 
(UserTransaction)ctx.lookup("UserTransaction");
  |                     ut.begin();
  |                     Link aLink = aNode.addLinkTo(bNode);
  |                     aNode.addLinkTo(cNode);
  |                     //update uNode to persisted value 
  |                     uNode = nodeEAO.save(aNode);
  | 
  |                     ut.commit();
  |                     } catch (Exception e)
  |                     {e.printStackTrace();
  |                     System.exit(0);} 
  | 
  | ...
  | 
  | then later i call the following 
  | 
  |                     if (nodeEAO.removeLink(uNode, zNode))
  |                     {
  | 
  |                             System.out.println ("deleted link  : \n");
  |                     }
  | 
  | 

The code in the EJB in the container for this looks like 


  | EJB nodeEAO code  ...
  | 
  | 
  | @Stateless
  | public class NodeEAOBean extends EAOBean<Node, Long> implements NodeEAO, 
NodeEAOLocal, NodeEAORemote
  | {
  |     @Resource
  |     private SessionContext sc;
  |     
  |     static final long serialVersionUID =1;
  | ...
  | 
  |     @TransactionAttribute (TransactionAttributeType.REQUIRED)
  |     public boolean removeLink (Node fromNode, Node remoteNode)
  |     {
  |             
  |             List<Link> qres;
  |             Logger log = Logger.getLogger("NodeEAOBean");
  |             log.setLevel(org.apache.log4j.Level.DEBUG);
  | 
  |             if (fromNode == null || remoteNode == null)
  |             {
  |                     log.error("was passed a null reference");
  |                     return false;
  |             }
  | 
  |             fromNode = em.merge(fromNode); 
  |             remoteNode = em.merge(remoteNode); 
  |             Query q = em.createNamedQuery("findLinksBetweenNodes");
  |             q.setParameter("toNode", remoteNode);
  |             q.setParameter("fromNode", fromNode);
  |             
  |             log.debug("to node details " + remoteNode.getNodeName() + "\n");
  |             
  |             qres = (List<Link>)q.getResultList();
  |             if (qres != null && qres.size () == 1)
  |             {
  |                     Link link =  qres.get(0);
  |                     remoteNode.deleteLinkFrom(link);
  |                     fromNode.deleteLinkTo(link);
  |                     em.remove(link);
  |                     return true;
  |             }
  |             else
  |                     {return false;}
  | 
  |     }
  | 

when i get to the removeLink call in the client this works and the database is 
updated and one of my links is deleted.

Next I query for remaining links seen from the first node  this calls 


  | 
  | ...
  |                     List<Node> nodeList2 = 
nodeEAO.getConnectedToNodes(uNode);
  |                     if (nodeList2 != null)
  |                     {
  |                             for (Node n : nodeList )
  |                             {
  |                                     System.out.println ("got connected node 
: " + n.getNodeName() + "/n");
  |                             }
  |                     }
  |     
  | 

on the the ejb server this runs a query to get the result .


  | 
  |     @TransactionAttribute (TransactionAttributeType.REQUIRED)
  |     public List<Node> getConnectedToNodes (Node fromNode)
  |     {
  |             Logger log = Logger.getLogger("NodeEAOBean");
  |             log.setLevel(org.apache.log4j.Level.DEBUG);
  | 
  |             if (fromNode == null )
  |             {
  |                     log.error("was passed a null reference");
  |                     return null;
  |             }
  | 
  |             fromNode = em.merge(fromNode);
  |             Query q = em.createNamedQuery("getLinkedNodes");
  |             q.setParameter("fromNode", fromNode);
  |             
  |             return (List<Node>)q.getResultList();
  | 
  |     }
  | 

however when i run this i get the foillowing error 

anonymous wrote : 
  | 
  | 
  | Exception in thread "main" javax.ejb.EJBException: 
javax.persistence.OptimisticLockException        at 
org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63)
  |     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
  |     at 
org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
  |     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:77)
  |     at 
org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
  |     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:304)
  |     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:769)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
  | Caused by: javax.persistence.OptimisticLockException
  |     at 
org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:642)
      at 
org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:599)
  |     at 
org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:236)
  |     at 
org.jboss.ejb3.entity.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:188)
  |     at 
org.softwood.neilsapp.eao.NodeEAOBean.getConnectedToNodes(NodeEAOBean.java:135)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  |     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  |     at java.lang.reflect.Method.invoke(Unknown Source)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
  |     at 
org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
  |     at 
org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
  |     at 
org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
  |     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:77)
  |     at 
org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
  |     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:304)
  |     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:769)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
  |     at 
org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:163)
  |     at org.jboss.remoting.Client.invoke(Client.java:1634)
  |     at org.jboss.remoting.Client.invoke(Client.java:548)
  |     at 
org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
  |     at $Proxy0.getConnectedToNodes(Unknown Source)
  |     at org.EAOtest.main(EAOtest.java:121)
  |     at 
org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
  |     at $Proxy0.getConnectedToNodes(Unknown Source)
  |     at org.EAOtest.main(EAOtest.java:121)
  | Caused by: org.hibernate.StaleObjectStateException: Row was updated or 
deleted by another transaction (or unsaved-value mapping was incorrect): 
[org.softwood.neilsapp.model.node.Node#1]   at 
org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:261)
  |     at 
org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:120)
  |     at 
org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:53)
  |     at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:677)
  |     at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:661)
  |     at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:665)
  |     at 
org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:227)
  |     at 
org.jboss.ejb3.entity.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:188)
  |     at 
org.softwood.neilsapp.eao.NodeEAOBean.getConnectedToNodes(NodeEAOBean.java:135)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  |     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  |     at java.lang.reflect.Method.invoke(Unknown Source)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
  |     at 
org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
  |     at 
org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
  |     at 
org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
  |     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:77)
  |     at 
org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
  |     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:304)
  |     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:769)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
  | 
  | 


WHat is wrong here - each method in the bean is defined as tranasctional - so 
when the delete action is run doesnt the persistence context flushed?. 

 If so when i run the next query method - which passes the original node as 
base of the search and merge that inside a new transaction do I get this 
optimistic error.

if i try to debug this from eclipse i get another error from the server which 
says a transaction isnt active !  bizarre as its got the required annotation 
for the method 

HELP please anyone who can understand whats wrong.

anonymous wrote : 
  | 
  | Exception in thread "main" java.lang.IllegalStateException: 
[com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] 
[com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] The transaction 
is not active!      at 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1379)
  |     at 
com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
  |     at 
com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87)
  |     at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:175)
  |     at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
  |     at 
org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
  |     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:77)
  |     at 
org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
  |     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:304)
  |     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:769)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:573)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
  |     at 
org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
  |     at 
org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:163)
  |     at org.jboss.remoting.Client.invoke(Client.java:1634)
  |     at org.jboss.remoting.Client.invoke(Client.java:548)
  |     at 
org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
  |     at $Proxy0.removeLink(Unknown Source)
  |     at org.EAOtest.main(EAOtest.java:115)
  |     at 
org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:67)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:74)
  |     at 
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
  |     at 
org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:107)
  |     at $Proxy0.removeLink(Unknown Source)
  |     at org.EAOtest.main(EAOtest.java:115)
  | 
  | 
  | 


the code for the query is defined with the entity. 


  | @Entity
  | @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
  | @DiscriminatorColumn
  | (name="nodeType",
  |  discriminatorType=DiscriminatorType.STRING)
  | @DiscriminatorValue ("generic node")
  | 
  | @NamedQueries ({
  |     @NamedQuery(
  |             name = "findLinksBetweenNodes",
  |             query = "SELECT l FROM Link l " +
  |                             "WHERE (l.fromNode = :fromNode " +
  |                             "AND l.toNode = :toNode)"
  |                             ),
  |     @NamedQuery(
  |             name = "getLinkedNodes",
  |             query = "SELECT l.toNode FROM Link l " +
  |                             "WHERE (l.fromNode = :fromNode) "
  |                             )       
  |     }) 
  | public class Node implements Serializable
  | {
  |     static final long serialVersionUID = 1;
  |     
  |     @Id @GeneratedValue
  |     @Column(name="nodeID")
  |     private Long nodeID;
  | 
  |     @Version
  |     private long version;
  |     
  |     //enable transitive persistence from owning node to links
  |     @OneToMany (mappedBy="fromNode", cascade={CascadeType.PERSIST, 
CascadeType.MERGE })
  |     
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
  |     protected Set<Link> fromLinks;
  |     
  |     @OneToMany (mappedBy="toNode", cascade={CascadeType.PERSIST, 
CascadeType.MERGE })
  |     
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
  |     protected Set<Link> toLinks;
  |     
  |     // not required and errors on load @Temporal (TemporalType.TIMESTAMP)
  |     private Timestamp lastUpdated;
  |     
  |     @Column(length=255, nullable=false) @NotNull
  |     private String nodeName;
  | 
  |     @Column(length=255)
  |     private String aliasName;
  |     
  |     //calculated: how important is this node
  |     private int weight;
  |     
  |     //as set by a user: how important is this node
  |     private int importance;
  |     
  |     public Long getID () {return nodeID;}
  |             
  |     public Node ()
  |     {
  |             //initialise the links
  |             toLinks = new HashSet<Link>();
  |             fromLinks = new HashSet<Link>();
  |     
  |             DateFormat fmt = DateFormat.getDateTimeInstance();
  |             nodeName = "generic node: " + fmt.format(new Date());
  |     }
  |     
  |     public Node (String name)
  |     {
  |             if (name != null)
  |                     this.nodeName = name;
  |             else nodeName = "null";
  |     }
  |     
  |     public long getVersion() {return version;}
  |     public String getNodeName () {return nodeName;}
  |     public void setNodeName (String name) {this.nodeName = name;}
  | 
  |     public String getAliasName () {return aliasName;}
  |     public void setAliasName (String name) {this.aliasName = name;}
  | 
  |     public int getImportance () {return importance;}
  |     public void setImportance (int imp) {this.importance = imp;}
  |     public void incrementImportance () {this.importance++;}
  |     public void decrementImportance () {this.importance--;}
  | 
  |     public void calculateWeight ()
  |     {/*TODO*/};
  |     
  |     protected void setLastUpdated()
  |     {
  |             Date now = new Date();
  |             lastUpdated = new Timestamp (now.getTime());
  |     }
  |     
  |     @TransactionAttribute (TransactionAttributeType.REQUIRED)
  |     public Link addLinkTo (Node remoteNode)
  |     {
  |             Link aLink = new Link ();
  |             aLink.setName("link from " + this.getNodeName() + " to " + 
remoteNode.getNodeName());
  |             //set the link relationships
  |             aLink.setToNode(remoteNode);
  |             aLink.setFromNode(this);
  |             //set the node relationships to the joining link
  |             this.setLinkTo(aLink);
  |             remoteNode.setLinkFrom(aLink);
  |             
  |             //return the new link
  |             return aLink;
  |     }
  |     
  |     public Set<Link> getLinkTo ()
  |     {
  |             return toLinks;
  |     }
  | 
  |     public void setLinkTo (Link link)
  |     {
  |             toLinks.add(link);
  |     }
  |     
  |     public void deleteLinkTo (Link link)
  |     {
  |             toLinks.remove(link);
  |     }
  |     
  |     public Set<Link> getLinkFrom ()
  |     {
  |             return fromLinks;
  |     }
  |     
  |     public void setLinkFrom (Link link)
  |     {
  |             fromLinks.add(link);
  |     }
  |     
  |     public void deleteLinkFrom (Link link)
  |     {
  |             fromLinks.remove(link);
  |     }
  | }
  | 



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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4119440
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to