| MediaEntityBean.java | 
/*
 * JBoss, the OpenSource J2EE webOS
 * 
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package org.jboss.media.entity;
import java.util.Collection;
import java.util.Vector;
import javax.ejb.CreateException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.RemoveException;
import javax.emb.MediaEntityLocal;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.jboss.ejb.plugins.keygenerator.KeyGenerator;
import org.jboss.ejb.plugins.keygenerator.KeyGeneratorFactory;
import org.jboss.logging.Logger;
/**
 * Media Entity Bean implementation based on Entity Beans.
 * 
 * <p>It extends the abstract <code>MediaEntity</code> class, and only
 * declares CMP/CMR methods and implements <code>ejbCreate()</code>.
 * 
 * @version <tt>$Revision: 1.7 $</tt>
 * @author <a href="mailto:ricardoarguello@users.sourceforge.net">Ricardo Argüello</a>
 * 
 * @ejb.bean name="MediaEntity"
 *           local-jndi-name="ejb/media/MediaEntity"
 *           view-type="local"
 *           reentrant="true"
 *           type="CMP"
 *           cmp-version="2.x"
 *           primkey-field="managedIdentity"
 * 
 * @ejb.interface generate="false" local-class="javax.emb.MediaEntityLocal" * 
 * @ejb.home generate="false" local-class="javax.emb.MediaEntityLocalHome"
 * @ejb.transaction type="Required"
 * @ejb.util generate="false"
 * 
 * @ejb.finder signature="java.util.Collection findByPartialDescription(java.lang.String partialDescription)"
 *             query="SELECT DISTINCT OBJECT(mediaEntity) FROM MediaEntity AS mediaEntity WHERE LOCATE(?1, mediaEntity.managedDescription) > -1"
 * 
 * @ejb.finder signature="java.util.Collection findByPartialLocation(java.lang.String partialLocation)"
 *             query="SELECT DISTINCT OBJECT(mediaEntity) FROM MediaEntity AS mediaEntity WHERE LOCATE(?1, mediaEntity.managedLocation) > -1"
 * 
 * @ejb.persistence table-name="JBOSS_MEDIA_ENTITY_BEANS"
 * 
 * @jboss.create-table "true"
 * @jboss.remove-table "false"
 */
public abstract class MediaEntityBean extends MediaEntity implements EntityBean
{
   public static final String MEDIA_ENTITY_JNDI = "ejb/media/MediaEntity";
   private EntityContext entityContext;
   /** Logger. */
   private Logger log = Logger.getLogger(MediaEntityBean.class);
   /** KeyGenerator Factory JNDI. */
   private static final String KEY_GENERATOR_JNDI = "UUIDKeyGeneratorFactory";
   // Container Managed Persistance (CMP): ------------------------------------
   /**
    * @ejb.pk-field
    * @ejb.persistence column-name="IDENTITY"
    */
   public abstract String getManagedIdentity();
   public abstract void setManagedIdentity(String identity);
   /**
    * @ejb.persistence column-name="CONTENT"
    */
   public abstract byte[] getManagedContent();
   public abstract void setManagedContent(byte[] content);
   /**
    * @ejb.persistence column-name="LOCATION"
    */
   public abstract String getManagedLocation();
   public abstract void setManagedLocation(String location);
   /**
    * @ejb.persistence column-name="DESCRIPTION"
    */
   public abstract String getManagedDescription();
   public abstract void setManagedDescription(String description);
   /**
    * @ejb.persistence column-name="NAME"
    */
   public abstract String getManagedName();
   public abstract void setManagedName(String name);
   /**
    * @ejb.persistence column-name="MIME_TYPE"
    */
   public abstract String getManagedMimeType();
   public abstract void setManagedMimeType(String mimeType);
   /**
    * @ejb.persistence column-name="LAST_MODIFIED"
    */
   public abstract long getManagedLastModified();
   public abstract void setManagedLastModified(long lastModified);
   /**
    * @ejb.persistence column-name="LISTENERS"
    */
   public abstract Vector getManagedListeners();
   public abstract void setManagedListeners(Vector listeners);
   // Container Managed Relationships (CMR): ----------------------------------
   /**
    * @ejb.relation name="Media-ProxyMedia"
    *               role-name="media-has-proxy-media"
    *               target-ejb="MediaEntity"
    *               target-multiple="no"
    *               target-role-name="proxy-media-has-media"
    * 
    * @jboss.relation related-pk-field="managedIdentity"
    *                 fk-column="proxy_identity_fk"
    */
   public abstract MediaEntityLocal getManagedProxy();
   public abstract void setManagedProxy(MediaEntityLocal proxy);
   /**
    * @ejb.relation name="PreviousMediaVersion-NextMediaVersion"
    *               role-name="previous-media-version-has-next-media-version"
    * 
    * @jboss.relation related-pk-field="managedIdentity"
    *                 fk-column="previous_identity_fk"
    */
   public abstract MediaEntityLocal getManagedPreviousVersion();
   public abstract void setManagedPreviousVersion(MediaEntityLocal previousVersion);
   /**
    * @ejb.relation name="PreviousMediaVersion-NextMediaVersion"
    *               role-name="next-media-version-has-previous-media-version"
    * 
    * @jboss.relation related-pk-field="managedIdentity"
    *                 fk-column="child_identity_fk"
    */
   public abstract MediaEntityLocal getManagedNextVersion();
   public abstract void setManagedNextVersion(MediaEntityLocal nextVersion);
   /**
    * @ejb.relation name="MediaParent-MediaChild"
    *               role-name="media-parent-has-media-child"
    * 
    * @jboss.relation related-pk-field="managedIdentity"
    *                 fk-column="parent_identity_fk"
    */
   public abstract Collection getManagedParents();
   public abstract void setManagedParents(Collection parents);
   /**
    * @ejb.relation name="MediaParent-MediaChild"
    *               role-name="media-child-has-media-parent"
    * 
    * @jboss.relation related-pk-field="managedIdentity"
    *                 fk-column="child_identity_fk"
    */
   public abstract Collection getManagedChildren();
   public abstract void setManagedChildren(Collection children);
   /**
    * @ejb.relation name="Media-MetaData"
    *               role-name="media-has-metadatas"
    * 
    * @jboss.relation related-pk-field="managedIdentity"
    *                 fk-column="metadata_identity_fk"
    */
   public abstract Collection getManagedMetaDatas();
   public abstract void setManagedMetaDatas(Collection metadatas);
   // javax.emb.MediaEntityLocalHome interface: -------------------------------
   /**
    * @see javax.emb.MediaEntityLocalHome#create()
    */
   public String ejbCreate() throws CreateException
   {
      String identity = generateIdentity();
      setManagedIdentity(identity);
      updateLastModified();
      return null;
   }
   /**
    * @see javax.emb.MediaEntityLocalHome#create()
    */
   public void ejbPostCreate() throws CreateException
   {
   }
   // javax.ejb.EntityBean interface: -----------------------------------------
   public void ejbActivate()
   {
   }
   public void ejbPassivate()
   {
   }
   public void ejbRemove() throws RemoveException
   {
   }
   public void ejbLoad()
   {
   }
   public void ejbStore()
   {
   }
   public void setEntityContext(EntityContext entityContext)
   {
      this.entityContext = entityContext;
   }
   public void unsetEntityContext()
   {
      entityContext = null;
   }
   // Private: ----------------------------------------------------------------
   /**
    * Create the identity (primary key) of this bean using a UUID key
    * generator.
    * 
    * @return a String containing the primary key.
    * @throws CreateException if an error accours when generating the primary
    *         key.
    */
   private String generateIdentity() throws CreateException
   {
      KeyGenerator keyGenerator = null;
      try
      {
         KeyGeneratorFactory keyGeneratorFactory =
            (KeyGeneratorFactory) new InitialContext().lookup(
               KEY_GENERATOR_JNDI);
         keyGenerator = keyGeneratorFactory.getKeyGenerator();
         String key = (String) keyGenerator.generateKey();
         if (log.isDebugEnabled())
         {
            log.debug("Generated identity: " + key);
         }
         return key;
      }
      catch (NamingException e)
      {
         throw new CreateException(
            "Error: can't find key generator factory: "
               + KEY_GENERATOR_JNDI
               + "; "
               + e.getMessage());
      }
      catch (Exception e)
      {
         throw new CreateException(
            "Error: can't create key generator instance; key generator factory: "
               + KEY_GENERATOR_JNDI
               + "; "
               + e.getMessage());
      }
   }
}| MediaEntityBean.java |