论文部分内容阅读
[摘要]物资管理是企业生产管理的重要内容,高水平的物资管理能够有助于提高企业效益。基于J2EE/MVC的开发框架,采用JAVA语言,为设计一个通用的物资管理系统,探讨与其相关的关键技术实现。
[关键词]JAVA J2EE 物资管理 MVC
中图分类号:TP39 文献标识码:A 文章编号:1671-7597(2008)0520074-02
一、引言
在Internet流行和快速发展的今天,越来越多的企业开始推行信息化建设,物资管理系统[1]就是在这种背景下应运而生的。通过这个系统,公司能够很好的重组和管理物资资源,达到了企业减少成本,提高公司生产效率和效益的目的。
传统的客户机/服务器模型存在很多缺陷,基于J2EE基础上的MVC开发模型和.NET开发模型已经成为当今软件开发的趋势。J2EE[2]全称为Java2 Platform, Enterprise Edition,本质上是一个分布式的服务器应用程序设计环境一个Java环境,是Sun公司提出的一种分布式企业级应用开发的技术架构,基于J2EE的系统具有良好的可扩展性、集成性,并能缩短开发周期,减少总体成本。在程序开发中,我们采用了Struts开发框架,Struts采用MVC[5](模型、视图、控制)模式,它能很好的把界面显示和业务逻辑分离开,方便程序员开发和维护。
二、系统设计与实现
物资管理系统是以合同管理,仓储管理为核心,完成订单处理,计划和调度,库存管理,费用核算,客户服务,系统管理等一系列功能。
(一)系统功能概述
物资管理系统的主要功能基本可以划分为如下:
初始处理 编号表设置、期初库存输入。
货物需求 制销售合同、制货物需求单、货物需求单查询、货物需求一览表。
采购需求 制采购合同、采购合同审批、采购计划一览表查询、制采购申请单、客户发票录入。
存货管理 制入库申请单、入库申请单查询、制入库单、入库单查询。
送货管理 送货完成确定、送货情况一览表查询。
供货商与客户管理 单位名信息设置、供应商信息设置、供货商货品价格设置、客户信息设置、供货商与客户买卖合同一览表。
库存管理 库存查询、盘盈盘亏、调库、销售报表。
系统维护 菜单角色关系设置、角色人员关系设置、公司部门关系设置、人员公司部门职务关系设置。
(二)系统主要模块说明
1. 合同和采购模块
合同和采购模块是整个物资管理系统流转的核心,包括合同管理、采购管理、合同执行管理三小块。合同是整个系统流转的起点,公司销售部门制成合同信息,汇总成合同明细一览表,公司采购部门根据公司资金状况和库存实际情况制定出采购计划,计划经过审批同意的话那么就进行采购,不同的话就回退重新制定新的采购计划。在这个过程,公司项目负责人会关心项目整个进展情况,他可以通过合同执行管理中提供的功能来了解整个项目执行的详细信息,以便及时做出相应的措施,保证工程顺利的完成。
2. 仓储管理
仓储管理是物资管理软件必不可少的一部分,包括入库管理、出库管理、库存查询三小块。供应商到货后填写入库申请单,公司质检科检查物品后填写质量检验单,合格的物品就流入仓库,不合格的物品则产生退货通知单。出库管理相应的比较简单,销售部门只要填写出库申请单,申请批准后就可以出库了。库存查询功能是否完善体现了这个软件的适用性,我们的库存查询包含盘盈盘亏、库存盘点、出入明细查询、库存台帐查询、当前库存查询,在这些查询功能中又设定可以按各种条件查询,物资和仓库管理人员可以通过上述功能查看出各个仓库流转情况,库存当前状态,以便达到库存的最优化。
(三)系统实现的关键技术
1. 连接池技术
在传统的数据库连接方式中,随着客户访问量的增多,JDBC频繁的同后台数据库连接和关闭,耗费了大量的内存资源,在多层结构的应用程序环境下,这种耗费资源的动作对系统的性能影响尤为明显。数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应在请求队列中排队等待。数据库连接池技术有效地控制了内存资源的快速消耗。
设置数据库(oracle9)连接池,我们是在JBOSS的服务器发布目录jboss-3.2.3\server\default\deploy\oracle-ds.xml。
在程序开发过程中,从程序的规范性和重用性角度考虑,对数据库的访问放在一个中间件DBManage.java类中。
public class DBManage {
private static DataSource dataSource; //在多个用户间共享同一个datasource
publicDBManage(Context ctx )throws Exception{
dataSource = (DataSource) ctx.lookup("java:OracleDS");
public static ConnectiongetConnection( ){
//如果出错,返回空。
try{
return dataSource.getConnection();
}
catch(SQLException e){
System.err.println(e.getMessage());
return null;
}
}
}
2. session faade模式
前端控制器模式给出了一个基于MVC的、能有效管理用户与J2EE应用之间进行的复杂交互的结构。这个模式可以使处理页面的显示顺序和用户的并发请求变得简单,并且使增加和改变页面变得更加容易。但是另外一个问题是,如果一个客户端需要两个业务对象的信息,比如用户在申请合同中物品出库时,同时需要得到ContractEJB合同的相关信息、StoreEJB仓库中的物品的相关信息等,则将需要两个远程方法调用,并且这两个调用都是细粒度的。如果一个EJB[3] [4]客户端需要调用三个业务对象的方法,则将需要三个远程方法调用。当存在着大量的EJB客户端,而每个客户端又需要调用多个业务对象时,这种细粒度的网络调用就会成倍的增加,系统性能就会因为网络负载而降低。
解决这个问题的方法是,把客户端和它们使用的EJB分割开,使用门面设计模式的一种Session Façade模式。在EJB设计中,Session Facade是应用最广泛的设计模式。它应用Session Bean来实现Facade模式的思想,把构成子系统的一套业务对象“鞍”氨在Session Bean中。这样,Session Facade作为客户端访问业务对象的拦截器,屏蔽了业务对象。EJB客户端访问Session Bean来代替访问业务对象,当一个EJB客户端需要调用多个业务对象的方法时,它只需要进行一次粗粒度的远程方法调用,将请求送给Session Facade, 再由Session Facade通过本地方法调用,调用相应的业务对象,执行其方法。这样就减轻了网络负载,提高了系统性能。并且当业务对象的方法改动时,只需要修改Session Bean,而客户端可以保持不变。这就减少了客户端和业务对象之间的耦合度,同时客户端也不必管理事务的细节。如图所示:
有Session Facade时的情况
给出用户在申请合同中物品出库的示意性代码:
public class OutStoreFacade implements SessionBean {
public void OutStoreaction(String storeid,String address) {
Context context = new InitialContext();
//获取对需要访问的EJB的调用
Object ref = context.lookup("ContractEJB");
contractHome = (ContractHome) PortableRemoteObject.narrow(ref, ContractHome.class);
contract1=contractHome.create();
ref = context.lookup("StoreEJB");
storeHome = (StoreHome) PortableRemoteObject.narrow(ref, StoreHome.class);
store1=storeHome.create();
//执行其它处理
}
}
引入了OutStoreFacade后,客户端程序变得十分简单:
public class outstoregoodsAction extends Action {
public ActionForward perform(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
//获取对会话Bean Façade的引用
Context context = new InitialContext();
Object ref = context.lookup("OutStoreFacade");outstorefacadeHome=(OutStoreFacadeHome)PortableRemoteObject.narrow(ref, OutStoreFacadeHome.class);
outstorefacade= outstorefacadeHome.create();
//调用OutStoreaction方法,执行操作
}
}
三、结束语
基于J2EE平台设计的物资管理系统已投入试运行。采用该软件体系结构,在软件可维护性、可扩展性、系统稳定性、系统安全性方面都有了很好地提高,达到了提高软件开发效率和软件质量的目的。但是在开发过程中也发现,如果业务逻辑不很复杂,或者开发原型不考虑升级和扩展,那么使用EJB有点小题大做,可以考虑使用jsp+javabean+jdbc的MVC模型来开发。
参考文献:
[1]林强,林英鸿. 电子商务的物流配送研究[J].计算机科学,2002;28(7):49-52.
[2]张玲,左春等. 基于J2EE标准开发保险企业服务软件[J].计算机工程与应用,2001;37(20):137-140.
[3]张宇峰,曹广益.用EJB开发网上DIY交易系统[J]. 微型电脑应用,2003;17(4):35-38.
[4]飞思科技产品研发中心编著[M] .精通EJB(第二版). 北京:电子工业出版社,2003.
[5]张计龙,张成洪,张凯. 基于改进MVC的高校人事管理系统[J] . 计算机工程.2004,(5):67-70.
作者简介:
杨志云:女,工程师,石家庄法商职业学院教师,研究方向:计算机应用控制;司海峰:男,石家庄法商职业学院教师,研究方向:计算机应用控制。
[关键词]JAVA J2EE 物资管理 MVC
中图分类号:TP39 文献标识码:A 文章编号:1671-7597(2008)0520074-02
一、引言
在Internet流行和快速发展的今天,越来越多的企业开始推行信息化建设,物资管理系统[1]就是在这种背景下应运而生的。通过这个系统,公司能够很好的重组和管理物资资源,达到了企业减少成本,提高公司生产效率和效益的目的。
传统的客户机/服务器模型存在很多缺陷,基于J2EE基础上的MVC开发模型和.NET开发模型已经成为当今软件开发的趋势。J2EE[2]全称为Java2 Platform, Enterprise Edition,本质上是一个分布式的服务器应用程序设计环境一个Java环境,是Sun公司提出的一种分布式企业级应用开发的技术架构,基于J2EE的系统具有良好的可扩展性、集成性,并能缩短开发周期,减少总体成本。在程序开发中,我们采用了Struts开发框架,Struts采用MVC[5](模型、视图、控制)模式,它能很好的把界面显示和业务逻辑分离开,方便程序员开发和维护。
二、系统设计与实现
物资管理系统是以合同管理,仓储管理为核心,完成订单处理,计划和调度,库存管理,费用核算,客户服务,系统管理等一系列功能。
(一)系统功能概述
物资管理系统的主要功能基本可以划分为如下:
初始处理 编号表设置、期初库存输入。
货物需求 制销售合同、制货物需求单、货物需求单查询、货物需求一览表。
采购需求 制采购合同、采购合同审批、采购计划一览表查询、制采购申请单、客户发票录入。
存货管理 制入库申请单、入库申请单查询、制入库单、入库单查询。
送货管理 送货完成确定、送货情况一览表查询。
供货商与客户管理 单位名信息设置、供应商信息设置、供货商货品价格设置、客户信息设置、供货商与客户买卖合同一览表。
库存管理 库存查询、盘盈盘亏、调库、销售报表。
系统维护 菜单角色关系设置、角色人员关系设置、公司部门关系设置、人员公司部门职务关系设置。
(二)系统主要模块说明
1. 合同和采购模块
合同和采购模块是整个物资管理系统流转的核心,包括合同管理、采购管理、合同执行管理三小块。合同是整个系统流转的起点,公司销售部门制成合同信息,汇总成合同明细一览表,公司采购部门根据公司资金状况和库存实际情况制定出采购计划,计划经过审批同意的话那么就进行采购,不同的话就回退重新制定新的采购计划。在这个过程,公司项目负责人会关心项目整个进展情况,他可以通过合同执行管理中提供的功能来了解整个项目执行的详细信息,以便及时做出相应的措施,保证工程顺利的完成。
2. 仓储管理
仓储管理是物资管理软件必不可少的一部分,包括入库管理、出库管理、库存查询三小块。供应商到货后填写入库申请单,公司质检科检查物品后填写质量检验单,合格的物品就流入仓库,不合格的物品则产生退货通知单。出库管理相应的比较简单,销售部门只要填写出库申请单,申请批准后就可以出库了。库存查询功能是否完善体现了这个软件的适用性,我们的库存查询包含盘盈盘亏、库存盘点、出入明细查询、库存台帐查询、当前库存查询,在这些查询功能中又设定可以按各种条件查询,物资和仓库管理人员可以通过上述功能查看出各个仓库流转情况,库存当前状态,以便达到库存的最优化。
(三)系统实现的关键技术
1. 连接池技术
在传统的数据库连接方式中,随着客户访问量的增多,JDBC频繁的同后台数据库连接和关闭,耗费了大量的内存资源,在多层结构的应用程序环境下,这种耗费资源的动作对系统的性能影响尤为明显。数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。对于多于连接池中连接数的并发请求,应在请求队列中排队等待。数据库连接池技术有效地控制了内存资源的快速消耗。
设置数据库(oracle9)连接池,我们是在JBOSS的服务器发布目录jboss-3.2.3\server\default\deploy\oracle-ds.xml。
在程序开发过程中,从程序的规范性和重用性角度考虑,对数据库的访问放在一个中间件DBManage.java类中。
public class DBManage {
private static DataSource dataSource; //在多个用户间共享同一个datasource
publicDBManage(Context ctx )throws Exception{
dataSource = (DataSource) ctx.lookup("java:OracleDS");
public static ConnectiongetConnection( ){
//如果出错,返回空。
try{
return dataSource.getConnection();
}
catch(SQLException e){
System.err.println(e.getMessage());
return null;
}
}
}
2. session faade模式
前端控制器模式给出了一个基于MVC的、能有效管理用户与J2EE应用之间进行的复杂交互的结构。这个模式可以使处理页面的显示顺序和用户的并发请求变得简单,并且使增加和改变页面变得更加容易。但是另外一个问题是,如果一个客户端需要两个业务对象的信息,比如用户在申请合同中物品出库时,同时需要得到ContractEJB合同的相关信息、StoreEJB仓库中的物品的相关信息等,则将需要两个远程方法调用,并且这两个调用都是细粒度的。如果一个EJB[3] [4]客户端需要调用三个业务对象的方法,则将需要三个远程方法调用。当存在着大量的EJB客户端,而每个客户端又需要调用多个业务对象时,这种细粒度的网络调用就会成倍的增加,系统性能就会因为网络负载而降低。
解决这个问题的方法是,把客户端和它们使用的EJB分割开,使用门面设计模式的一种Session Façade模式。在EJB设计中,Session Facade是应用最广泛的设计模式。它应用Session Bean来实现Facade模式的思想,把构成子系统的一套业务对象“鞍”氨在Session Bean中。这样,Session Facade作为客户端访问业务对象的拦截器,屏蔽了业务对象。EJB客户端访问Session Bean来代替访问业务对象,当一个EJB客户端需要调用多个业务对象的方法时,它只需要进行一次粗粒度的远程方法调用,将请求送给Session Facade, 再由Session Facade通过本地方法调用,调用相应的业务对象,执行其方法。这样就减轻了网络负载,提高了系统性能。并且当业务对象的方法改动时,只需要修改Session Bean,而客户端可以保持不变。这就减少了客户端和业务对象之间的耦合度,同时客户端也不必管理事务的细节。如图所示:
有Session Facade时的情况
给出用户在申请合同中物品出库的示意性代码:
public class OutStoreFacade implements SessionBean {
public void OutStoreaction(String storeid,String address) {
Context context = new InitialContext();
//获取对需要访问的EJB的调用
Object ref = context.lookup("ContractEJB");
contractHome = (ContractHome) PortableRemoteObject.narrow(ref, ContractHome.class);
contract1=contractHome.create();
ref = context.lookup("StoreEJB");
storeHome = (StoreHome) PortableRemoteObject.narrow(ref, StoreHome.class);
store1=storeHome.create();
//执行其它处理
}
}
引入了OutStoreFacade后,客户端程序变得十分简单:
public class outstoregoodsAction extends Action {
public ActionForward perform(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
//获取对会话Bean Façade的引用
Context context = new InitialContext();
Object ref = context.lookup("OutStoreFacade");outstorefacadeHome=(OutStoreFacadeHome)PortableRemoteObject.narrow(ref, OutStoreFacadeHome.class);
outstorefacade= outstorefacadeHome.create();
//调用OutStoreaction方法,执行操作
}
}
三、结束语
基于J2EE平台设计的物资管理系统已投入试运行。采用该软件体系结构,在软件可维护性、可扩展性、系统稳定性、系统安全性方面都有了很好地提高,达到了提高软件开发效率和软件质量的目的。但是在开发过程中也发现,如果业务逻辑不很复杂,或者开发原型不考虑升级和扩展,那么使用EJB有点小题大做,可以考虑使用jsp+javabean+jdbc的MVC模型来开发。
参考文献:
[1]林强,林英鸿. 电子商务的物流配送研究[J].计算机科学,2002;28(7):49-52.
[2]张玲,左春等. 基于J2EE标准开发保险企业服务软件[J].计算机工程与应用,2001;37(20):137-140.
[3]张宇峰,曹广益.用EJB开发网上DIY交易系统[J]. 微型电脑应用,2003;17(4):35-38.
[4]飞思科技产品研发中心编著[M] .精通EJB(第二版). 北京:电子工业出版社,2003.
[5]张计龙,张成洪,张凯. 基于改进MVC的高校人事管理系统[J] . 计算机工程.2004,(5):67-70.
作者简介:
杨志云:女,工程师,石家庄法商职业学院教师,研究方向:计算机应用控制;司海峰:男,石家庄法商职业学院教师,研究方向:计算机应用控制。