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