/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.cmp2.cmr.ejb; import java.util.Collection; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.EntityBean; import javax.ejb.EntityContext; import org.jboss.test.cmp2.cmr.interfaces.CMRBugEJBLocal; /** * class <code>CMRBugBean</code> demonstrates bug 523627. CMR fields may get changed * in ejbPostCreate, so newly created entities must be marked as needing ejbSave. * Currently this is done by putting them in GlobalTxEntityMap. * * @author <a href="mailto:MNewcomb@tacintel.com">Michael Newcomb</a> * @author <a href="mailto:d_jencks@users.sourceforge.net">David Jencks</a> * @version 1.0 * * @ejb:bean name="CMRBugEJB" * local-jndi-name="LocalReadOnly" * view-type="local" * type="CMP" * cmp-version="2.x" * primkey-field="id" * reentrant="true" * schema="CMRBug" * @ejb:pk class="java.lang.String" * @ejb:finder signature="java.util.Collection findAll()" * query="select object(cmr_bug) from CMRBug as cmr_bug" * @jboss:create-table create="true" * @jboss:remove-table remove="true" */ public abstract class CMRBugBean implements EntityBean { private EntityContext context; /** * Describe <code>getId</code> method here. * * @return a <code>String</code> value * @ejb:persistent-field * @ejb:interface-method */ public abstract String getId(); /** * Describe <code>setId</code> method here. * * @param id a <code>String</code> value * @ejb:interface-method */ public abstract void setId(String id); /** * Describe <code>getDescription</code> method here. * * @return a <code>String</code> value * @ejb:persistent-field * @ejb:interface-method */ public abstract String getDescription(); /** * Describe <code>setDescription</code> method here. * * @param description a <code>String</code> value * @ejb:interface-method */ public abstract void setDescription(String description); /** * Describe <code>getParent</code> method here. * * @return a <code>CMRBugEJBLocal</code> value * @ejb:interface-method * @ejb:relation name="CMRBug-CMRBug" * role-name="parent" * cascade-delete="yes" * @jboss:auto-key-fields */ public abstract CMRBugEJBLocal getParent(); /** * Describe <code>setParent</code> method here. * * @param parent a <code>CMRBugEJBLocal</code> value * @ejb:interface-method */ public abstract void setParent(CMRBugEJBLocal parent); /** * Describe <code>getChildren</code> method here. * * @return a <code>Collection</code> value * @ejb:interface-method * @ejb:relation name="CMRBug-CMRBug" * role-name="children" * multiple="yes" * @jboss:auto-key-fields */ public abstract Collection getChildren(); /** * Describe <code>setChildren</code> method here. * * @param children a <code>Collection</code> value * @ejb:interface-method */ public abstract void setChildren(Collection children); /** * Describe <code>addChild</code> method here. * * @param child a <code>CMRBugEJBLocal</code> value * @return a <code>boolean</code> value * @ejb:interface-method */ public boolean addChild(CMRBugEJBLocal child) { try { Collection children = getChildren(); return children.add(child); } catch(Exception e) { throw new EJBException(e); } } /** * Describe <code>removeChild</code> method here. * * @param child a <code>CMRBugEJBLocal</code> value * @return a <code>boolean</code> value * @ejb:interface-method */ public boolean removeChild(CMRBugEJBLocal child) { try { Collection children = getChildren(); return children.remove(child); } catch(Exception e) { throw new EJBException(e); } } // // The following is the linked list implementation. It is implemented with unidirectional CMRs. // These are used to test correct foreign key state initialization when the foreign key // loaded is not a valid value, i.e. the relationship was already changed in the tx. // /** * @ejb:interface-method view-type="local" * @ejb:relation * name="viewcomponent-prevnode" * role-name="one-viewcomponent-has-one-previous-node" * target-role-name="one-prev-belogs-to-one-viewcomponent" * target-ejb="CMRBugEJB" * target-multiple="no" * @jboss:relation * related-pk-field="id" * fk-column="prev_id_fk" */ public abstract CMRBugEJBLocal getPrevNode(); /** * @ejb:interface-method view-type="local" */ public abstract void setPrevNode(CMRBugEJBLocal a_ViewComponent); /** * @ejb:interface-method view-type="local" * @ejb:relation * name="viewcomponent-nextnode" * role-name="one-viewcomponent-has-one-following-node" * target-role-name="one-following-node-belogs-to-one-viewcomponent" * target-ejb="CMRBugEJB" * target-multiple="no" * @jboss:relation * related-pk-field="id" * fk-column="next_id_fk" */ public abstract CMRBugEJBLocal getNextNode(); /** * @ejb:interface-method view-type="local" */ public abstract void setNextNode(CMRBugEJBLocal a_ViewComponent); // -------------------------------------------------------------------------- // EntityBean methods // /** * Describe <code>ejbCreate</code> method here. * * @param id a <code>String</code> value * @param description a <code>String</code> value * @param parent a <code>CMRBugEJBLocal</code> value * @return an <code>Integer</code> value * @exception CreateException if an error occurs * @ejb:create-method */ public String ejbCreate(String id, String description, CMRBugEJBLocal parent) throws CreateException { setId(id); setDescription(description); // CMP beans return null for this method // return null; } /** * Describe <code>ejbPostCreate</code> method here. * * @param id a <code>String</code> value * @param description a <code>String</code> value * @param parent a <code>CMRBugEJBLocal</code> value * @exception CreateException if an error occurs */ public void ejbPostCreate(String id, String description, CMRBugEJBLocal parent) throws CreateException { // must set the CMR fields in the post create // setParent(parent); } public void setEntityContext(EntityContext context) { this.context = context; } public void unsetEntityContext() { context = null; } public void ejbRemove() { } public void ejbLoad() { } public void ejbStore() { } public void ejbActivate() { } public void ejbPassivate() { } }