⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 productmanagerbean.java

📁 用JBuilder+Jboos+mysql实现的EJB项目
💻 JAVA
字号:
package com.jdon.estore.catalog;

import javax.ejb.*;
import java.util.*;

import com.jdon.servicelocator.ejb.ServiceLocator;
import com.jdon.controller.events.EventModel;

import com.jdon.sequence.SequenceGeneratorLocalHome;
import com.jdon.sequence.SequenceGeneratorLocal;

import org.apache.log4j.Logger;

import com.jdon.estore.model.Product;
import com.jdon.estore.model.Item;
import com.jdon.estore.model.Attribute;

import com.jdon.estore.catalog.dao.CatalogDAO;
import com.jdon.controller.model.PageIterator;
import com.jdon.estore.JNDINames;

public class ProductManagerBean implements SessionBean {

  private final static Logger logger = Logger.getLogger(ProductManagerBean.class);
  SessionContext sessionContext;

  private SequenceGeneratorLocalHome sequenceHome;

  private CategoryHome chome;
  private ProductHome productHome;
  private ItemHome itemHome;
  private ItemAttrsHome itemAttrsHome;
  private InventoryHome inventoryHome;
  private ImagesHome imagesHome;
//  private CatalogDAO catalogDAO;
  private CatalogEJBLocalHome catalogEJBHome;

  private Map queryCache = new HashMap();

  public void ejbCreate() throws CreateException {
    try {
      ServiceLocator sl = new ServiceLocator();
      sequenceHome = (SequenceGeneratorLocalHome) sl.getLocalHome(
          JNDINames.SEQUENCEGENERATOR_HOME);
      chome = (CategoryHome) sl.getLocalHome(JNDINames.
          CATEGORY_HOME);
      productHome = (ProductHome)sl.getLocalHome(JNDINames.PRODUCT_HOME);
      itemHome = (ItemHome) sl.getLocalHome(JNDINames.ITEM_HOME);
      itemAttrsHome = (ItemAttrsHome) sl.getLocalHome(JNDINames.ITEM_ATTRS_HOME);
      inventoryHome = (InventoryHome) sl.getLocalHome(JNDINames.INVENTORY_HOME);
      imagesHome = (ImagesHome) sl.getLocalHome(JNDINames.IMAGES_HOME);

//      catalogDAO = (CatalogDAO)sl.getDAO(JNDINames.CATALOG_DAO);
      catalogEJBHome = (CatalogEJBLocalHome)sl.getLocalHome(JNDINames.CATALOG_EJBHOME);
    } catch (Exception ex) {
      logger.error("create error:" + ex);
      throw new CreateException();
    }
  }

  public Object getDAO(String jndiDAOName) throws Exception {

   Object object = null;
   try {
          logger.error("className=====" );
          javax.naming.InitialContext ic = new javax.naming.InitialContext();
     String className = (String) ic.lookup(jndiDAOName);
     logger.error("className=====" + className);
     object = Class.forName(className).newInstance();

   } catch (Exception se) {
     throw new Exception(se);
   }
   return object;
 }


  public int getNewId(String name) {
    try {
      SequenceGeneratorLocal seq = sequenceHome.create();
      return seq.nextSequenceNumber(name);
    } catch (Exception ex) {
      throw new EJBException("Error generating id for : " + name + ex);
    }
  }

  public void createProduct(EventModel em) throws Exception {
    Product product = (Product) em.getModel();
    try {
      String Id = Integer.toString(getNewId(JNDINames.SEQUENCE_NAME));
      ProductLocal productLocal = productHome.create(Id);

      Images images = imagesHome.create(Id);
      productLocal.setImages(images);

      product.setProductId(Id);
      updateProduct(em);

      //插入相应的商品类别
      String catId = product.getCatId();
      CategoryLocal categoryLocal = chome.findByPrimaryKey(catId);
      categoryLocal.getProduct().add(productLocal);

      //清除缓存
      queryCache.clear();
    } catch (Exception ex) {
      logger.error(ex);
      em.setErrors("db.error");
    }
  }

  public void updateProduct(EventModel em) throws Exception {
    Product product = (Product) em.getModel();
    try {
      ProductLocal productLocal = productHome.findByPrimaryKey(product.
          getProductId());
      productLocal.setDescription(product.getDescription());
      productLocal.setName(product.getName());

      //改变所属的类别
      CategoryLocal categoryLocal = chome.findByPrimaryKey(product.getCatId());
      if (categoryLocal != productLocal.getCategory()) {
        productLocal.setCategory(categoryLocal);
      }

      if (product.getImage() != null) {
        Images images = productLocal.getImages();
        images.setData(product.getImage());
      }

    } catch (Exception ex) {
      logger.error(ex);
      em.setErrors("db.error");
    }
  }

  //if cacasde delete is true , this will delete all items;
  public void deleteProduct(EventModel em) throws Exception {
    Product product = (Product) em.getModel();
    try {
      productHome.remove(product.getProductId());

      //清除缓存
      queryCache.clear();

    } catch (Exception ex) {
      logger.error(" --->> customer create error:" + ex);
      em.setErrors("db.error");
    }
  }

  //本查询方法用于编辑,通过CMP+CMR获取查询,书写方便
  public Product getProductById(String Id) {
    logger.debug(" looking for  id=" + Id);
    try {
      ProductLocal productLocal = productHome.findByPrimaryKey(Id);
      return getProduct(productLocal);
    } catch (FinderException ex) {
      logger.warn(ex);
    } catch (Exception ex) {
      logger.error(ex);
    }
    return null;
  }

  //通过JDBC查询,主要用于批量显示Product时,
  //缺点:因为JDBC书写复杂,Product中item数据只取出一部分。
  public Product getProductByIdJDBC(String Id) {
    logger.debug(" looking for JDBC id=" + Id);
    try {
      CatalogEJBLocal catalogEJB = catalogEJBHome.create();
      return catalogEJB.getProduct(Id);
    } catch (FinderException ex) {
      logger.warn(ex);
    } catch (Exception ex) {
      logger.error(ex);
    }
    return null;
  }

  //缓存必须及时更新
  public PageIterator getProducts(String catId, int start, int count) {
    PageIterator pageIterator = null;
    try {
      String pIKey = getPIKey(catId, start);//获得key
      //首先从缓冲中获取
      pageIterator = (PageIterator)queryCache.get(pIKey);
      if (pageIterator == null){
        //从数据库读取
       CatalogEJBLocal catalogEJB = catalogEJBHome.create();
        pageIterator = catalogEJB.getProducts(catId, start, count);
        int allCount = catalogEJB.getProductAllCount(catId);
        pageIterator.setAllCount(allCount);
        queryCache.put(pIKey, pageIterator);
      }else{
         logger.debug("read pageIterator from cache ..........");
      }
    } catch (Exception ex) {
      logger.warn("getCategories error: " + ex);
    }
    return pageIterator;
  }

  private String getPIKey(String catId, int start) {
    StringBuffer buffer = new StringBuffer("PageIterator");
    buffer.append(catId);
    buffer.append(start);

    return buffer.toString();
  }

  public byte[] getImage(String Id) {
    logger.debug(" looking for Image id=" + Id);
    try {
      CatalogEJBLocal catalogEJB = catalogEJBHome.create();
      return catalogEJB.getImage(Id);
    } catch (FinderException ex) {
      logger.warn(ex);
    } catch (Exception ex) {
      logger.error(ex);
    }
    return null;
  }

  private Product getProduct(ProductLocal productLocal) throws Exception {
    Product product = new Product();
    try {
      product.setCatId(productLocal.getCategory().getCatId());
      product.setProductId(productLocal.getProductId());
      product.setName(productLocal.getName());
      product.setDescription(productLocal.getDescription());

      Collection aResult = new ArrayList(productLocal.getItem().size());
      Iterator iter = productLocal.getItem().iterator();
      ItemLocal itemLocal = null;
      Item item = null;
      while (iter.hasNext()) {
        itemLocal = (ItemLocal) iter.next();
        item = getItem(itemLocal);
        aResult.add(item);
      }
      product.setItems(aResult);
    } catch (Exception ex) {
      logger.error(ex);
      throw new Exception(ex);
    }
    return product;
  }

  /**
   * 创建Item
   * 同时创建与其有1:1对应关系的其它表
   * 1:n或n:n无需在父节点创建。
   * @param em
   * @throws java.lang.Exception
   */
  public void createItem(EventModel em) throws Exception {
    Item item = (Item) em.getModel();
    try {
      String Id = Integer.toString(getNewId(JNDINames.SEQUENCE_NAME));
      //创建Item数据库
      ItemLocal itemLocal = itemHome.create(Id);

      //创建item库存数据表
      Inventory inventory = inventoryHome.create(Id);

      Images images = imagesHome.create(Id);
      itemLocal.setImages(images);

      //本行重要,否则无法调用update
      item.setItemId(Id);
      updateItem(em);

      //设置与Prodcut的n:1关系
      ProductLocal productLocal = productHome.findByPrimaryKey(item.
          getProductId());
      productLocal.getItem().add(itemLocal);

      //设置与Inventory的1:1关系
      itemLocal.setInventory(inventory);

    } catch (Exception ex) {
      logger.error(ex);
      em.setErrors("db.error");
    }
  }

  public void updateItem(EventModel em) throws Exception {
    Item item = (Item) em.getModel();
    try {
      ItemLocal itemLocal = itemHome.findByPrimaryKey(item.getItemId());
      itemLocal.setName(item.getName());
      itemLocal.setUnitcost(new Float(item.getUnitcost()));
      itemLocal.setListprice(new Float(item.getListprice()));
      itemLocal.setDescription(item.getDescription());

      //改变所属的product
      ProductLocal productLocal = productHome.findByPrimaryKey(item.
          getProductId());
      if (productLocal != itemLocal.getProduct()) {
        itemLocal.setProduct(productLocal);
      }

      if (item.getImage() != null) {
        Images images = itemLocal.getImages();
        images.setData(item.getImage());
      }

      updateInventory(item.getItemId(), new Float(item.getQty()));

    } catch (Exception ex) {
      logger.error(ex);
      em.setErrors("db.error");
    }
  }

  public void updateInventory(String itemId, Float qty) throws Exception {
    try {
      Inventory inventory = inventoryHome.findByPrimaryKey(itemId);
      inventory.setQty(qty);
    } catch (Exception ex) {
      logger.error(ex);
      throw new Exception(ex);
    }
  }

  public Item getItemById(String itemId) {
    logger.debug(" looking for  itemId=" + itemId);
    try {
      ItemLocal itemLocal = itemHome.findByPrimaryKey(itemId);
      return getItem(itemLocal);
    } catch (FinderException ex) {
      logger.warn(ex);
    } catch (Exception ex) {
      logger.error(ex);
    }
    return null;

  }

  /**
   * 得到Item实例,注意相关Id不能缺少
   * @param itemLocal
   * @return
   */
  private Item getItem(ItemLocal itemLocal) throws Exception {
    Item item = new Item();
    try {
      item.setProductId(itemLocal.getProduct().getProductId());
      item.setItemId(itemLocal.getItemId());
      item.setName(itemLocal.getName());
      item.setUnitcost(itemLocal.getUnitcost().floatValue());
      item.setListprice(itemLocal.getListprice().floatValue());
      item.setDescription(itemLocal.getDescription());
      item.setQty(itemLocal.getInventory().getQty().floatValue());

      Collection aResult = new ArrayList(itemLocal.getItemAttrs().size());
      Iterator iter = itemLocal.getItemAttrs().iterator();
      while (iter.hasNext()) {
        aResult.add(getItemAttrs((ItemAttrs) iter.next()));
      }
      item.setAttrs(aResult);

    } catch (Exception ex) {
      logger.error(ex);
      throw new Exception(ex);
    }
    return item;
  }

  //if cacasde delete is true , this will delete all items;
  public void deleteItem(EventModel em) throws Exception {
    Item item = (Item) em.getModel();
    try {
      itemHome.remove(item.getItemId());
    } catch (Exception ex) {
      logger.error(" --->> customer create error:" + ex);
      em.setErrors("db.error");
    }
  }


  public void createAttrs(EventModel em) throws Exception {
    Attribute attrs = (Attribute) em.getModel();
    try {
      String Id = Integer.toString(getNewId(JNDINames.SEQUENCE_NAME));
      ItemAttrs itemAttrs = itemAttrsHome.create(Id);

      attrs.setAttrsId(Id);
      updateAttrs(em);

      ItemLocal itemLocal = itemHome.findByPrimaryKey(attrs.getItemId());
      itemLocal.getItemAttrs().add(itemAttrs);
    } catch (Exception ex) {
      logger.error(ex);
      em.setErrors("db.error");
    }
  }

  public void updateAttrs(EventModel em) throws Exception {
    Attribute attrs = (Attribute) em.getModel();
    try {
      ItemAttrs itemAttrs = itemAttrsHome.findByPrimaryKey(attrs.getAttrsId());
      itemAttrs.setName(attrs.getName());
      itemAttrs.setAttr(attrs.getValue());

    } catch (Exception ex) {
      logger.error(ex);
      em.setErrors("db.error");
    }
  }

  public void deleteAttrs(EventModel em) throws Exception {
    Attribute attrs = (Attribute) em.getModel();
    try {
      itemAttrsHome.remove(attrs.getAttrsId());

    } catch (Exception ex) {
      logger.error(ex);
      em.setErrors("db.error");
    }
  }

  public Attribute getItemAttrsById(String itemAttrsId) {
    logger.debug(" looking for  itemId=" + itemAttrsId);
    try {
      ItemAttrs itemAttrs = itemAttrsHome.findByPrimaryKey(itemAttrsId);
      return getItemAttrs(itemAttrs);
    } catch (FinderException ex) {
      logger.warn(ex);
    } catch (Exception ex) {
      logger.error(ex);
    }
    return null;
  }

  /**
   * 1:n关系可以有两种设计:
   * 1.专门设立一个1:n的表,如product_item
   * 2.不单独设立表,通过n方的表中一个字段表示,如item_attrs
   * @param itemAttrs
   * @return
   * @throws java.lang.Exception
   */
  private Attribute getItemAttrs(ItemAttrs itemAttrs) throws Exception {
    Attribute attrs = new Attribute();
    try {
      attrs.setAttrsId(itemAttrs.getItemAttrsId());
      attrs.setItemId(itemAttrs.getItemId()); //直接通过字段获得
      attrs.setName(itemAttrs.getName());
      attrs.setValue(itemAttrs.getAttr());
    } catch (Exception ex) {
      logger.error(ex);
      throw new Exception(ex);
    }
    return attrs;
  }

  public void ejbRemove() {
  /**@todo Complete this method*/
  }

  public void ejbActivate() {
  /**@todo Complete this method*/
  }

  public void ejbPassivate() {
  /**@todo Complete this method*/
  }

  public void setSessionContext(SessionContext sessionContext) {
    this.sessionContext = sessionContext;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -