📄 productmanagerbean.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 + -