That all worked very well (source attached).
Later I just wanted to copy that bean into another project. When I now run XDoclet on that new project, I get a local interface method referencing the ejb package instead of the interfaces package. Inside the old project, everyting works well. So I thought I must have made some mistakes configuring XDoclet, but I can't find them.
Any hints?
Alexander
/* * Created on 19.08.2004 * * TODO Implement this! * */ package de.sbow.Tree.ejb;
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.EntityBean; import javax.ejb.EntityContext; import javax.ejb.RemoveException; import de.sbow.Tree.interfaces.*; import de.sbow.Tree.value.LeafValue; /** * @author Alexander * * TODO Implement this! * */ /** * XDoclet-based CMP entity bean. This class must be declared * <code>public abstract</code> because the concrete class will * be implemented by the CMP provider's tooling.<br> * * To generate code: * <br> * <ul> * <li> Add Standard EJB module to XDoclet project properties * <li> Customize XDoclet configuration * <li> Run XDoclet * </ul> * <br> * Please see the included XDoclet Overview * and the XDoclet Reference in the help system for details * * @ejb.bean name = "Leaf" * type = "CMP" * cmp-version = "2.x" * display-name = "LeafBean" * description = "LeafBean EJB" * view-type = "local" * jndi-name = "ejb/LeafHome" * local-jndi-name = "ejb/LeafLocalHome" * primkey-field = "id" * schema = "Tree" * * @ejb.persistence table-name = "Categories" * @jboss.persistence table-name = "Categories" * create-table = "true" * remove-table = "false" * * @ejb.finder signature = "java.util.Collection findAll()" * query = "select Object(l) from Tree as l" * * @ejb.finder signature = "java.util.Collection findByName(java.lang.String name)" * query = "select Object(l) from Tree as l where l.name = ?1" * * @ejb.finder signature = "de.sbow.Tree.interfaces.LeafLocal findById(java.lang.String id)" * query = "select Object(l) from Tree as l where l.id = ?1" * * @ejb.finder signature = "java.util.Collection findByLevel(long level)" * query = "select Object(l) from Tree as l where l.level = ?1" * * @ejb.value-object * * @ejb.value-object name = "LeafSimple" * match = "simple" * * @ejb.util generate="physical" * */ public abstract class LeafBean implements EntityBean { /** The EntityContext */ private EntityContext context; /** * There are zero or more ejbCreate<METHOD>(...) methods, whose signatures match * the signatures of the create<METHOD>(...) methods of the entity bean’s home interface. * The container invokes an ejbCreate<METHOD>(...) method on an entity bean instance * when a client invokes a matching create<METHOD>(...) method on the entity bean’s * home interface.<br> * * The entity bean provider’s responsibility is to initialize the instance in the ejbCreate< * METHOD>(...) methods from the input arguments, using the get and set accessor * methods, such that when the ejbCreate<METHOD>(...) method returns, the persistent * representation of the instance can be created. <br> * * The entity bean provider must not attempt to modify the values of cmr-fields in an ejbCreate< * METHOD(...) method; this should be done in the ejbPostCreate<METHOD(...) method instead.<br> * * The entity object created by the ejbCreate<METHOD> method must have a unique primary * key. This means that the primary key must be different from the primary keys of all the existing * entity objects within the same home. However, it is legal to reuse the primary key of a previously * removed entity object. The implementation of the bean provider’s ejbCreate< * METHOD>(...) methods should be coded to return a null.<br> * * An ejbCreate<METHOD>(...) method executes in the transaction context determined by * the transaction attribute of the matching create<METHOD>(...) method. * The database insert operations are performed by the container within the same * transaction context after the Bean Provider’s ejbCreate<METHOD>(...) method completes. * * @throws CreateException Thrown if the instance could not perform * the function requested by the container because of an system-level error. * * @ejb.create-method */ public String ejbCreate() throws CreateException { this.setId(LeafUtil.generateGUID(this)); this.setLevel(1); return null; } /** * @ejb.create-method * @param name * @param description * @return */ public String ejbCreate(String name, String description) throws CreateException { this.setName(name); this.setDescription(description); this.setId(LeafUtil.generateGUID(this)); this.setLevel(1); return null; } /** * For each ejbCreate<METHOD>(...) method, there is a matching ejbPostCreate< * METHOD>(...) method that has the same input parameters but whose return type is * void. The container invokes the matching ejbPostCreate<METHOD>(...) method on * an instance after it invokes the ejbCreate<METHOD>(...) method with the same arguments. * The instance can discover the primary key by calling getPrimaryKey() on its * entity context object. <br> * * The entity object identity is available during the ejbPostCreate<METHOD>(...) * method. The instance may, for example, obtain the component interface of the associated entity * object and pass it to another enterprise bean as a method argument.<br> * * The entity Bean Provider may use the ejbPostCreate<METHOD>(...) to set the values * of cmr-fields to complete the initialization of the entity bean instance. * An ejbPostCreate<METHOD>(...) method executes in the same transaction context as * the previous ejbCreate<METHOD>(...) method. * * @throws CreateException Thrown if the instance could not perform * the function requested by the container because of an system-level error. */ public void ejbPostCreate() throws CreateException { } /** * The container invokes this method on the instance when the container picks the instance from * the pool and assigns it to a specific entity object identity. The ejbActivate() method gives * the entity bean instance the chance to acquire additional resources that it needs while it is in the * ready state.<br> * * This method executes with an unspecified transaction context. The entity bean must not * attempt to access its persistent state or relationships using the accessor methods during this * method.<br> * * The instance can obtain the identity of the entity object via the getPrimaryKey(), getEJBLocalObject(), * or getEJBObject() method on the entity context. The instance * can rely on the fact that the primary key and entity object identity will remain associated with * the instance until the completion of ejbPassivate() or ejbRemove(). * * @throws EJBException Thrown if the instance could not perform * the function requested by the container because of an system-level error. */ public void ejbActivate() throws EJBException { } /** * The container invokes this method on an instance when the container decides to disassociate * the instance from an entity object identity, and to put the instance back into the pool of available * instances. The ejbPassivate() method gives the instance the chance to release any * resources that should not be held while the instance is in the pool. (These resources typically * had been allocated during the ejbActivate() method.) <br> * * This method executes with an unspecified transaction context. The entity bean must not * attempt to access its persistent state or relationships using the accessor methods during this * method.<br> * * The instance can still obtain the identity of the entity object via the getPrimaryKey(), * getEJBLocalObject(), or getEJBObject() method of the EntityContext interface. * * @throws EJBException Thrown if the instance could not perform * the function requested by the container because of an system-level error. */ public void ejbPassivate() throws EJBException { } /** * When the container needs to synchronize the state of an enterprise bean instance with the * entity object’s persistent state, the container calls the ejbLoad() method.<br> * * The entity Bean Provider can assume that the instance’s persistent state has been loaded just * before the ejbLoad() method is invoked. It is the responsibility of the Bean Provider to use * the ejbLoad() method to recompute or initialize the values of any instance variables that * depend on the entity bean’s persistent state. In general, any transient state that depends on the * persistent state of an entity bean should be recalculated using the ejbLoad() method. The * entity bean can use the ejbLoad() method, for instance, to perform some computation on * the values returned by the accessor methods (for example, uncompressing text fields).<br> * * This method executes in the transaction context determined by the transaction attribute of the * business method that triggered the ejbLoad method. <br> * * @throws EJBException Thrown if the instance could not perform * the function requested by the container because of an system-level error. */ public void ejbLoad() throws EJBException { } /** * When the container needs to synchronize the state of the entity object’s persistent state with the * state of the enterprise bean instance, the container first calls the ejbStore() method on the * instance.<br> * * The entity Bean Provider should use the ejbStore() method to update the instance using * the accessor methods before its persistent state is synchronized. For example, the ejb- * Store() method may perform compression of text before the text is stored in the database. * The Bean Provider can assume that after the ejbStore() method returns, the persistent state * of the instance is synchronized.<br> * * This method executes in the same transaction context as the previous ejbLoad or ejbCreate * method invoked on the instance. All business methods invoked between the previous * ejbLoad or ejbCreate<METHOD> method and this ejbStore method are also invoked * in the same transaction context. * * @throws EJBException Thrown if the instance could not perform * the function requested by the container because of an system-level error. */ public void ejbStore() throws EJBException { } /** * The container invokes the ejbRemove() method on an entity bean instance in response to a * client-invoked remove operation on the entity bean’s home or component interface or as the * result of a cascade-delete operation. The instance is in the ready state when ejbRemove() is * invoked and it will be entered into the pool when the method completes.<br> * * The entity bean provider can use the ejbRemove method to implement any actions that must * be done before the entity object’s persistent representation is removed. * The container synchronizes the instance’s state before it invokes the ejbRemove method. * This means that the state of the instance at the beginning of the ejbRemove method is the * same as it would be at the beginning of a business method. * This method and the database delete operation(s) execute in the transaction context determined * by the transaction attribute of the remove method that triggered the ejbRemove method. * The instance can still obtain the identity of the entity object via the getPrimaryKey(), * getEJBLocalObject(), or getEJBObject() method of the EntityContext interface.<br> * * After the entity Bean Provider’s ejbRemove returns, and in the same transaction context, the * Container removes the entity bean from all relationships in which it participates before removing * the entity object’s persistent representation. <br> * Since the instance will be entered into the pool, the state of the instance at the end of this * method must be equivalent to the state of a passivated instance. This means that the instance * must release any resource that it would normally release in the ejbPassivate() method. * * @throws EJBException Thrown if the instance could not perform * the function requested by the container because of an system-level error. * * @throws RemoveException Thrown if the enterprise bean does not allow destruction of the object. */ public void ejbRemove() throws EJBException, RemoveException { } /** * Set the associated entity context. The container calls this method * after the instance creation. The entity bean must not attempt to * access its persistent state and relationships using the accessor * methods during this method. <br> * * The enterprise bean instance should store the reference to the context * object in an instance variable. <br> * * This method is called with no transaction context. * * @throws EJBException Thrown if the instance could not perform * the function requested by the container because of an system-level error. */ public void setEntityContext(EntityContext newContext) throws EJBException { context = newContext; } /** * Unset the associated entity context. A container invokes this method * before terminating the life of the instance. The entity bean must not * attempt to access its persistent state and relationships using the * accessor methods during this method. <br> * * This method is called with no transaction context. * * @throws EJBException Thrown if the instance could not perform * the function requested by the container because of an system-level error. */ public void unsetEntityContext() throws EJBException { context = null; } /** * primary key * @ejb.interface-method view-type = "local" * @ejb.persistence column-name = "category_id" * @ejb.pk-field * @ejb.value-object match = "simple" * @return */ public abstract String getId(); public abstract void setId(String id); /** * name * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "name" * @ejb.value-object match = "simple" * @return */ public abstract String getName(); /** * @ejb.interface-method view-type = "both" * @param name */ public abstract void setName(String name); /** * description * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "description" * @return */ public abstract String getDescription(); /** * @ejb.interface-method view-type = "both" * @param name */ public abstract void setDescription(String description); /** * the leaf's level in the tree (root = 0) * * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "level" * @return */ public abstract long getLevel(); /** * @ejb.interface-method view-type = "both" * @param level * @return */ public abstract void setLevel(long level); /** * @ejb.interface-method view-type = "both" * @ejb.relation name = "Leaf-Children" * role-name = "Leaf-has-Children" * cascade-delete = "false" * target-ejb = "de.sbow.Tree.ejb.LeafBean" * target-role-name = "Leaf-has-Parent" * target-multiple = "yes" * target-cascade-delete = "yes" * * xxxjboss:relation related-pk-field = "id" * * @return */ public abstract Collection getChildren(); /** * @ejb.interface-method * @param children * */ public abstract void setChildren(Collection children); /** * @ejb.interface-method view-type = "both" * * @ejb.relation name = "Leaf-Children" * role-name = "Leaf-has-Parent" * cascade-delete = "true" * target-ejb = "de.sbow.Tree.ejb.LeafBean" * target-role-name = "Leaf-has-Children" * target-multiple = "no" * * @jboss.relation related-pk-field = "id" * fk-column = "parent_id" * * @return */ public abstract LeafBean getParent(); /** * @ejb.interface-method * @param parent * */ public abstract void setParent(LeafBean parent); /** * @ejb.interface-method * * @param newLeaf */ public void addLeaf(LeafLocal newLeaf) { Collection leafes = getChildren(); newLeaf.setLevel(getLevel()+1); leafes.add(newLeaf); } /** * @ejb.interface-method * * @return */ public abstract LeafValue getLeafValue(); /** * @ejb.interface-method * @return */ public ArrayList getTree() { ArrayList tree = new ArrayList(); tree.add(this.getLeafValue()); Collection childs = getChildren(); if (!childs.isEmpty()) { Iterator i = childs.iterator(); while (i.hasNext()) { LeafLocal l = (LeafLocal) i.next(); tree.addAll(l.getTree()); } } return tree; } }