java EJB3.0组件开发实例模型参考

来源:互联网 发布:新笔记本优化 编辑:程序博客网 时间:2024/05/21 06:46

/*************************************************************************
EJB3.0开发实例模型参考
author:chinayaosir 
QQ:44633197  QQ Group:8284865,34610648
blog http://blog.csdn.net/chinayaosir
developing environment:
IDE:Eclipse
DateBase:Oracle 10g
middle-ware:Jboss 4.22
framework:
Jar=EJB3.0+JPA
War=Jsp+css+div+javascrit+ajax+Struts+javaBean+JNDI+ejb3.0+jpa
*************************************************************************/

/*************************************************************************
代码目录
框架方案:win32/linux+oracle10g+Jboss4.22+jar+war
案例代码背景:国际贸易中的订单出货:
把现有按交期分类的订单按照客人的PO(purchase order)出货明细输入!

1.1数据库表
1.2数据库视图
1.3存储过程
2.1安装和配置Jboss4.2
2.2配置数据源
3.1EJB工程配置
3.2persistence.xml配置
3.3实体类
3.4工具类
3.5EJB接口与实现
3.6发布EJB工程

4.1Web工程配置
4.1JNDIContext类实现
4.2页面服务接口与实现
4.3页面接口测试

5.Struts/jsp/css/div/javascript实现
5.1设计Struts/jsp/js事件三者关系
5.2实现Struts配置
5.3实现Struts类DispatchAction
5.3实现Jsp页面(div+jsp)
5.4实现Jsp页面事件javascript功能
5.5实现Jsp页面美化(css+js)
5.6发布web工程到Jboss
*************************************************************************/
1.1数据库表与主键
s_sp_number//算号器表[pk(oc_number)]
s_sp_master//客人PO主表[pk(psonumber,subcustom)]
s_sp_detail//客人PO从表[pk(oc_number, itemnumber, shipp_date, psonumber,subcustome)]

o_oc_detail//客人交期从表[(oc_number,itemnumber,shipp_date)]
b_customer_basic//客人档案[pk(customerid)]
b_customer_port//客人收货港口[pk(customerid,subcustom)]

1.1数据库表(tools=SQL Plus)
create table s_sp_number (
psonumber varchar2(8) not null,
owner_name varchar2(10) not null,
create_date date not null,
flag varchar2(1) not null
) ;
alter table s_sp_number add constraint s_sp_number_pk primary key (psonumber) ;

create table s_sp_master (
psonumber varchar2(8) not null,
customerid varchar2(10) not null,
subcustom varchar2(10) not null,
pship_date date  null,
shipp_date date null,
ship2_date date null,
bl_sooffcr varchar2(10) null,
boatclose varchar2(1) null,
revisedate date null,
destinatio varchar2(40) null,
custof_poe varchar2(40) null,
sopso_flag varchar2(1) null
) ;
alter table s_sp_master add constraint s_sp_master_pk primary key (psonumber, subcustom) ;

create table s_sp_detail (
oc_number varchar2(8) not null,
itemnumber varchar2(14) not null,
shipp_date date not null,
psonumber varchar2(8) not null,
customerid varchar2(10) not null,
subcustome varchar2(10) not null,
sopso_flag varchar2(1) null,
customcode varchar2(15) null,
loadqtyinp number(10,0) null,
itemofname varchar2(160) null,
itemofpono varchar2(250) null,
ordercqty  number(10,0) null,
loadofname varchar2(160) null,
loadofpono varchar2(250) null
) ;
alter table s_sp_detail add constraint s_sp_detail_pk
primary key (oc_number, itemnumber, shipp_date, psonumber,subcustome) ;

create table o_oc_detail(
oc_number varchar2(8) not null,
itemnumber varchar2(14) not null,
shipp_date date not null,
ordercqty number(10,0) null,
orderc_dt date null,
customerid varchar2(10) not null,
sequence number(10,0) null,
oashipqty number(10,0) null,
customeupc varchar2(20) null,
ship2_date date null,
lcquantity number(10,0) null,
customecpo varchar2(20) null
) ;
alter table o_oc_detail add constraint o_oc_detail_pk 
primary key (oc_number,itemnumber,shipp_date) ;

create table b_customer_basic (
mothercoid varchar2(10) not null,
customerid varchar2(10) not null,
brief_name varchar2(50) null,
busi_name  varchar2(150) null,
customaddr varchar2(200) null,
cust_phone varchar2(20) null,
cust_telex varchar2(20) null,
cust_email varchar2(40) null,
cust_area  varchar2(3) null,
cust_faxno varchar2(20) null,
cust_buyer varchar2(30) null,
president varchar2(30) null,
manager  varchar2(30) null,
sales_rep varchar2(30) null,
our_agent varchar2(30) null,
custremark varchar2(240) null,
custombank varchar2(10) null,
custocount varchar2(30) null,
cdbank varchar2(10) null,
cdaccount varchar2(30) null,
grade varchar2(10) null
) ;
alter table b_customer_basic  add constraint b_customer_basic_pk  primary key (customerid) ;

create table b_customer_port(
customerid varchar2(10) not null,
subcustom varchar2(10) not null,
busi_name varchar2(80) not null,
destination varchar2(40) null,
custof_poe varchar2(40) null,
consignee varchar2(200) null,
remark varchar2(200) null,
subcnotify varchar2(200) null,
alsonotify varchar2(200) null
) ;

alter table b_customer_port  
add constraint b_customer_port_pk  primary key (customerid,subcustom) ;
/************************************************************************/
1.2数据库视图v_sp_oc_shipdate
create or replace view v_sp_oc_shipdate
as
select distinct
customerid,
oc_number,
shipp_date
from o_oc_detail;

/************************************************************************/
1.3存储过程(tools=SQL Plus)

//sp_number code rule
//SP#='P'+officesite+yy+seq number(4bit)
//PB100121='PB'+'10'+'0121'

create or replace procedure get_sp_number
is
createman varchar2(10);
t1 varchar2(2);
t2 varchar2(2);
t3 varchar2(4);
temp varchar2(8);
nextno varchar2(8);
maxno number(20);
i number(20);
maxlen number(20);
begin
 createman:='IT';
 i:=1;
 t1:='PB';
 maxlen:=4;
 nextno:='';
 t2:=TO_CHAR(TRUNC(SYSDATE),'YY');
 SELECT nvl(max(psonumber),'PB100000')
 into temp
 FROM  s_sp_number where SUBSTR(psonumber,3,2) = t2;
 maxno:=TO_NUMBER(SUBSTR(temp,5,8))+1 ;
 nextno:=TO_CHAR(maxno);
 maxlen:=maxlen - LENGTH(maxno);
 for i in 1 .. maxlen loop
  nextno := '0' || nextno;
 end loop;

 temp:=t1 || t2 || nextno;
 insert into s_sp_number
  (psonumber, owner_name, create_date, flag)
 values(temp, createman, SYSDATE,'0');
 commit;
end;
/

//call procedure
set serveroutput on
declare
sp_numnber varchar2(8):='';
begin
  getspnumber('YYYY');
end;
/

//select data
select * from  s_sp_number where owner_name='IT';

/************************************************************************/
2.1安装和配置Jboss4.2
2.1.1Jboss下载网址
http://www.jboss.org
2.1.2JBoss简介
JBoss是全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器。
因为JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用它,而不用支付费用。
2006年,Jboss公司被Redhat公司收购。
JBoss 是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。
但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。

2.1.3Jboss目录简介
/bin[启动和关闭Jboss的脚本]
/Client[Jboss客户端所需要的jar库]
/Docs[配置文件的样例,典型如数据库配置]
/lib[JBoss启动时所用到的java库,不把你工程的jar放在此处]
/server[多种Jboss配置]
/server/deault[默认配置]
/server/deault/conf[Jboss默认配置文件]
/server/deault/data[Jboss数据库文件如JbossMQ]
/server/deault/deploy[Jboss热部署目录.任何文件(jar,war,ear,xml)可以在不关闭Jboss服务的情况下部署]
/server/deault/lib[Jboss在启动缺省配置时加载的java库]
/server/deault/log[Jboss在启动缺省配置生成的日记文件]
/server/deault/tmp[Jboss在启动缺省配置生成的临时文件]

2.1.4Jboss配置文件
servr/config-name/conf目录
jacorb.properies[Jboss IIOP配置文件]
jbossmq-state.xml[JbossMQ(JMS实现)用户配置文件]
Jboss-service.xml[在启动时应该开启的jboss服务]
log4j.xml[log4J日志配置]
login-config.xml[安全配置]

2.1.5Jboss环境设置
格式如下:
Unix/Linux:
$export JAVA_HOME="JAVA JDK路径 "
$export JBOSS_HOME="JBOSS路径"
windows:
set JAVA_HOME="JAVA JDK路径 "
set JBOSS_HOME="JBOSS路径"

假如电脑是XP,jdk,jre,jboss安装位置如下:
jre="C:/Program Files/Java/jre6/"
jdk="C:/Program Files/Java/jdk1.6.0_19"
jboss="C:/jboss-4.2.2.GA"
则设置如下:
命令行xxx.cmd
set JAVA_HOME ="C:/Program Files/Java/jdk1.6.0_19"
set JBOSS_HOME="C:/jboss-4.2.2.GA"
set PATH="C:/Program Files/Java/jre6/bin";%PATH%
或者直接在电脑的环境变量添加
JAVA_HOME ="C:/Program Files/Java/jdk1.6.0_19"
JBOSS_HOME="C:/jboss-4.2.2.GA"
PATH="C:/Program Files/Java/jre6/bin";

/************************************************************************/
2.2配置数据源
Jboss配置oracle 10g
2.2.1复制oracle-ds.xml并配置它
//复制oracle-ds.xml
从C:/jboss-4.2.2.GA/docs/examples/jca目录选择oracle-ds.xml复制到
C:/jboss-4.2.2.GA/server/default/deploy
//修改oracle-ds.xml
把下面几个选项(jndi-name,connection-url,user-name,user-name,password)
修改成你自己的oracle 9i/10g环境

<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@youroraclehost:1521:yoursid</connection-url>
<user-name>x</user-name>
<password>y</password>
2.2.2复制oracle jar文件到Jboss部署目录
把oracle下面的ojdbc14.jar复制到C:/jboss-4.2.2.GA/server/default/lib
并启动Jboss,启动方法如下:
在windows下cmd进入命令行,
cd C:/jboss-4.2.2.GA/bin
run -b 0.0.0.0
Jboss在windows平台开始启动!

2.2.3验证数据源是否配置OK?
启动Jboss服务,进入http://localhost:8080/jmx-console/
选择service=JNDIView,找到List of MBean operations:下面的按钮Invoke
在java: Namespace节如果找到+- OracleDS (class: org.jboss.resource.adapter.jdbc.WrapperDataSource)
,说明Jboss已经连接到oracle数据库

/************************************************************************/
3.1EJB工程配置

3.1.1在myEclipse建立oracle数据源
打开DB Browser
在database Driver配置好数据源
Drive template:选择Oracle (Thin driver)
Drive name=oracle10g//自己定义一个名称
Connection URL/User name:/Password和oracle-ds.xml的配置一样
Driver JARs列表
add JARS把ojbc14.jar添加进来,
Test Driver测试成功则配置完毕.

3.1.2建立EJB工程
File->new-Ejb project
Project name="ejbSample"
J2EE Specification level选择Java EE 5.0 -EJB3
Persistence configuration打勾
配置JPA Persistence
Persistence Unit name=ejbSamplePU
JNDI Data Source=OracleDS //它和java: Namespace下面的+- OracleDS必须一致
Design-time Persistence Tools Configuration
Driver:选择在DB Browser配置好的名称
Catalog/Schema:选择一个oracle空间

/************************************************************************/
3.2persistence.xml配置
把系统生成persistence.xml配置完善它们
把上面的?换成自己的oracle 10g开发环境
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
   
    <persistence-unit name="ejbspPU" transaction-type="JTA">
          <jta-data-source>java:/OracleDS</jta-data-source>
          <properties>
          <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
        <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
        <property name="hibernate.connection.url" value="jdbc:oracle:thin:@?:?" />
        <property name="hibernate.connection.username" value="?" />
        <property name="hibernate.connection.password" value="?" />
        <property name="hibernate.mapping.precedence" value="class" />
        <property name="show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true" />                   
        </properties>
    </persistence-unit> 
</persistence>


/************************************************************************/
3.3实体类
建立表的实体包entityBean,名称你也可以自己定
快速方法是用DB Browser生成实体类
[方法:右击b_customer_basic->EJB3 Reverse Enginerring...]
EJB3 Generation生成器
Java Src folder:定位到/ejbSample/src
Java package:定位到entityBean
Entity Bean Generation打勾,
其它不选择,直接点finish!
在entityBean包下6个表类共生成10个类
/entityBean
BCustomerBasic.java [对应表B_CUSTOMER_BASIC]
BCustomerPort.java  [对应表B_CUSTOMER_PORT]
BCustomerPortId.java[对应表B_CUSTOMER_PORT]
SSpNumber.java        [对应表S_SP_NUMBER]
SSpMaster.java      [对应表S_SP_MASTER]
SSpMasterId.java    [对应表S_SP_MASTER]
SSpDetail.java      [对应表S_SP_DETAIL]
SSpDetailId.java    [对应表S_SP_DETAIL]
VSpOcShipdate.java  [对应视图V_SP_OC_SHIPDATE]
VSpOcShipdateID.java[对应视图V_SP_OC_SHIPDATE]

/************************************************************************/
3.4工具类
建立公共使用包publicUtility
/publicUtility
在下面建立一个日记类LogUtil.java
package publicUtility;
import java.util.logging.Level;
import java.util.logging.Logger;
public class LogUtil {
   
    private static final Logger logger;
   
    static {
        logger = Logger.getLogger("ejbShippingPU");
        logger.setLevel(Level.ALL);
    }
   
    public static void log(String info, Level level, Throwable ex) {
        logger.log(level, info, ex);
    }
   
    public static Logger getLogger() {
        return logger;
    }
   
}

/************************************************************************/
3.5EJB接口与实现
3.5.1EJB接口
建立一个包spDAO
package spDAO;
import java.util.Date;
import java.util.List;
import javax.ejb.Remote;
import entityBean.*;
@Remote
public interface spFacadeRemote {
    //table operate list(CRUD=Create,Retrieve,Update,Delete)
    //SpMaster Create,Update,Delete,Retrieve
    public void editSpMaster(SSpMaster entity);
    public void delSpMasterBySP(String sp);
    public List<SSpMaster> findBySp(String sp);

    //SpDetail Create,Update,Delete,Retrieve
    public void editSpDetail(SSpDetail entity);
    public void delSpDetailBySP(String sp);
    public List<SSpDetail>     findBySp(String sp);

    //spNumber Create,Update,Delete,Retrieve
    public void getspNumber();
    public void spNumberChgFlag(String sp,String flag);
    public List<SSpNumber> spNumberList();

    //find oclist,itemlist by oc
    public List<VSpOcShipdate>  findOclist(String custid,Date shipdate1,Date shipdate2);
    public List<OOcDetail>   findOcItemlist(String oc,Date shdt);

    //find customerlist,portlist by customer
    public List<BCustomerBasic>   findAllCustomer();
    public List<BCustomerPort>   findPortByCust(String customer);   
}
/************************************************************************/
3.5.2EJB接口实现package spDAO;
import entityBean.*;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import javax.ejb.*;
import javax.persistence.*;
import publicFacade.LogUtil;
@Stateless
public class spFacade implements spFacadeRemote {
    @PersistenceContext
    private EntityManager entityManager;   
    //CRUD=(Create,Retrieve,Update,Delete)
    //SpMaster Create or Update
    public void SSpMasterSave(SSpMaster entity) {
        LogUtil.log("SSpMasterSave(entity)" , Level.INFO,null);
        try {
            SSpMasterId id=new SSpMasterId();
            id.setPsonumber(entity.getId().getPsonumber());
            id.setSubcustom(entity.getId().getSubcustom());
            SSpMaster instance = entityManager.find(SSpMaster.class, id);
            if (instance!=null){//存在则修改
                instance.setBlSooffcr(entity.getBlSooffcr());   
                instance.setBoatclose(entity.getBoatclose());
                instance.setCustofPoe(entity.getCustofPoe());
                instance.setCustomerid(entity.getCustomerid());
                instance.setDestinatio(entity.getDestinatio());
                instance.setRevisedate(entity.getRevisedate());
                instance.setPshipDate(entity.getPshipDate());
                instance.setShip2Date(entity.getShip2Date());
                instance.setShippDate(entity.getShippDate());   
                instance.setSopsoFlag(entity.getSopsoFlag());
                entityManager.merge(instance);
            }
            else{//不存在则插入
                entityManager.persist(entity);
            }                           
        } catch (RuntimeException re) {
            LogUtil.log("SSpMasterSave(entity) failed", Level.SEVERE, re);
            throw re;
        }
    }
   
    //SpMaster Delete
    public void SSpMasterDelete(String sp) {
        LogUtil.log("SSpMasterDelete(sp)" , Level.INFO,null);   
        try {
            Query query=entityManager.createQuery("DELETE FROM SSpMaster c WHERE c.id.psonumber=:sp");
            query.setParameter("sp",sp);
            query.executeUpdate();                   
        } catch (RuntimeException re) {
            LogUtil.log("SSpMasterDelete(sp) failed", Level.SEVERE, re);
            throw re;
        }
    }
    //SpMaster Retrieve
    public List<SSpMaster> SSpMasterFindBySP(String sp) {
        LogUtil.log("SSpMasterFindBySP(sp)" , Level.INFO,null);
        try {
            Query query=entityManager.createQuery(
                    "SELECT c FROM SSpMaster  AS c " +
                    "WHERE c.id.subcustom ='0000000000' and c.id.psonumber=:spno");
            query.setParameter("spno", sp);
            return (List<SSpMaster>) query.getResultList();       
        } catch (RuntimeException re) {
            LogUtil.log("SSpMasterFindBySP(sp) failed", Level.SEVERE, re);
            throw re;
        }
    }
   
    //SSpDetail Create or Update
    public void SSpDetailSave(SSpDetail entity) {
        LogUtil.log("SSpDetailSave(entity)" , Level.INFO,null);
        try {
            SSpDetailId id=new SSpDetailId();
            id.setItemnumber(entity.getId().getItemnumber());
            id.setOcNumber(entity.getId().getOcNumber());
            id.setPsonumber(entity.getId().getPsonumber());
            id.setShippDate(entity.getId().getShippDate());
            id.setSubcustome(entity.getId().getSubcustome());
            SSpDetail instance = entityManager.find(SSpDetail.class, id);
            if (instance!=null){//存在则修改
                instance.setCustomcode(entity.getCustomcode());
                instance.setCustomerid(entity.getCustomerid())    ;
                instance.setItemofname(entity.getItemofname());
                instance.setItemofpono(entity.getItemofpono());
                instance.setLoadofname(entity.getLoadofname());
                instance.setLoadofpono(entity.getLoadofpono());
                instance.setLoadqtyinp(entity.getLoadqtyinp());
                instance.setOrdercqty(entity.getOrdercqty());
                instance.setSopsoFlag(entity.getSopsoFlag());
                entityManager.merge(instance);
            }
            else{//不存在则插入
                entityManager.persist(entity);       
            }
        } catch (RuntimeException re) {
            LogUtil.log("SSpDetailSave(entity) failed", Level.SEVERE, re);
            throw re;
        }
    }       
    //SSpDetail Delete
    public void SSpDetailDelete(String sp) {
        LogUtil.log("SSpDetailDelete(sp) " , Level.INFO,null);   
        try {
            Query query=entityManager.createQuery("delete from SSpDetail where psonumber=:sp");
            query.setParameter("sp",sp);
            query.executeUpdate();
           
        } catch (RuntimeException re) {
            LogUtil.log("SSpDetailDelete(sp) failed", Level.SEVERE, re);
            throw re;
        }
    }   

    //SSpDetail Retrieve
    public List<SSpDetail> SSpDetailFindBySP(String sp) {
        LogUtil.log("SSpDetailFindBySP(sp)" , Level.INFO,null);
        try {
            Query query=entityManager.createQuery("SELECT c FROM SSpDetail AS c WHERE c.id.psonumber=:spno");
            query.setParameter("spno", sp);
            return (List<SSpDetail>)query.getResultList();               
        } catch (RuntimeException re) {
            LogUtil.log("SSpDetailFindBySP(sp) failed", Level.SEVERE, re);
            throw re;
        }
    }   
   
    //spNumber Create
    public void spNumberGet() {
        LogUtil.log("spNumberGet()", Level.INFO,null);
        try {
   
            Query query=entityManager.createNativeQuery("{call get_sp_number()}");
            query.executeUpdate();
        }
        catch (RuntimeException re) {
            LogUtil.log("spNumberGet() failed", Level.SEVERE, re);
            throw re;
        }
    }   
    //spNumber Update
    public void spNumberChgFlag(String sp,String flag) {
        LogUtil.log("spNumberChgFlag(sp,flag)", Level.INFO,null);
        try {
            Query query=entityManager.createQuery("UPDATE SSpNumber c " +
                    "SET c.flag=:flag WHERE c.psonumber=:sp");           
            query.setParameter("flag",flag);
            query.setParameter("sp",sp);
            query.executeUpdate();           
        } catch (RuntimeException re) {
            LogUtil.log("spNumberChgFlag() failed", Level.SEVERE, re);
            throw re;
        }
    }   
    //spNumber Retrieve
    public List<SSpNumber> spNumberList() {
        LogUtil.log("spNumberList()" , Level.INFO,null);
        try {
            String flag=new String("0");
            Query query=entityManager.createQuery("SELECT c FROM SSpNumber AS c " +
                    "where c.flag=:flag ORDER BY c.psonumber DESC");
            query.setParameter("flag", flag);
            return (List<SSpNumber>)query.getResultList();               
        } catch (RuntimeException re) {
            LogUtil.log("spNumberList() failed", Level.SEVERE, re);
            throw re;
        }
    }       
   

    //VSpOcShipdate Retrieve
    public List<VSpOcShipdate> findOclist(String cust,Date sdt1,Date sdt2) {
        LogUtil.log("findOclist()" , Level.INFO,null);
        try {
            String flag1=new String("0");
            Query query=entityManager.createQuery(
                    "SELECT c FROM VSpOcShipdate AS c " +
                    "WHERE c.id.customerid=:cust and c.id.shippDate >=:sdt1 and c.id.shippDate <=:sdt2" +
                    " ORDER BY c.id.shippDate ASC,c.id.ocNumber ASC");
            query.setParameter("cust", cust);
            query.setParameter("sdt1", sdt1);
            query.setParameter("sdt2", sdt2);           
            return (List<VSpOcShipdate>)query.getResultList();               
        } catch (RuntimeException re) {
            LogUtil.log("findOclist() failed", Level.SEVERE, re);
            throw re;
        }
    }   
    //OOcDetail Retrieve
    public List<OOcDetail>   findOcItemlist(String oc,Date sdt){
        LogUtil.log("List<OOcDetail> findOcItemlist()" , Level.INFO,null);
        try {
            Query query=entityManager.createQuery("SELECT c FROM OOcDetail c " +
                    "where c.id.ocNumber=:oc and c.id.shippDate =:sdt"+
                    " ORDER BY c.id.itemnumber ASC");
            query.setParameter("oc", oc);
            query.setParameter("sdt", sdt);           
            return (List<OOcDetail>)query.getResultList();               
        } catch (RuntimeException re) {
            LogUtil.log("findOcItemlist() failed", Level.SEVERE, re);
            throw re;
        }
    }   
    //BCustomerBasic Retrieve
    public List<BCustomerBasic>   findAllCustomer(){
        LogUtil.log("findAllCustomer()" , Level.INFO,null);
        try {
            String flag1=new String("0");
            Query query=entityManager.createQuery("SELECT c FROM BCustomerBasic c " +
                    "ORDER BY C.customerid ASC");       
            return (List<BCustomerBasic>)query.getResultList();               
        } catch (RuntimeException re) {
            LogUtil.log("findAllCustomer() failed", Level.SEVERE, re);
            throw re;
        }
    }   
    //BCustomerPort Retrieve
    public List<BCustomerPort>   findPortByCust(String customer){
        LogUtil.log("findPortByCust()" , Level.INFO,null);
        try {
            Query query=entityManager.createQuery("SELECT c FROM BCustomerPort c " +
                    "WHERE c.id.customerid=:cust ORDER BY c.id.subcustom ASC");
            query.setParameter("cust", customer);   
            return (List<BCustomerPort>)query.getResultList();               
        } catch (RuntimeException re) {
            LogUtil.log("findPortByCust() failed", Level.SEVERE, re);
            throw re;
        }
    }   
   
}

/************************************************************************/
3.6发布EJB工程
对ejbSample工程发布到jboss,
如果没有报错,显示如下文字
11:51:38,765 INFO  [EJBContainer] STARTED EJB: spDAO.spFacade ejbName: spFacade
11:50:38,187 INFO  [EJB3Deployer] Deployed: file:/C:/jboss-4.2.2.GA/server/default/deploy/ejbSample.jar/
就说明EJB和jar文件都发布成功!

/************************************************************************/
4.1Web工程配置
新建立一个web工程,名字输入webSample,完成以后
配置web的Java build path(添加ejb工程和导入jboss客户jar文件)
4.1.1添加ejb工程ejbSample.jar到webSample工程
webSample右击->Properties->Java build path->Projects->add->选择ejbSample.jar
4.1.2导入jboss客户jar文件到web工程
jbossall-clinet.jar
jboss-remoting.jar
jboss-xml-binding.jar
jnpserver.jar
从jboss目录里面找到上面jar文件,然后把它们添加到web工程的Libraries清单!
添加方法:
webSample右击->Properties->Java build path->Libraries->add External JARS...
/************************************************************************/
4.1JNDIContext类实现

package com;
//import property and naming packing
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;

public class JNDIContext {
    //得到远程上下文对象
public static InitialContext getInitContextByRemote() {
    try {
        Properties props = new Properties();
        props.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
        props.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099");
        props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming");
        InitialContext ctx = new InitialContext(props);
        return ctx;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
    //得到本地上下文对象   
public InitialContext getInitContextByLocal() {
    try {
        return new InitialContext();
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
}

/************************************************************************/
4.2页面服务接口与实现
/*
用敏捷开发第5个原则
5.ISP接口隔离原则[适用于类的接口]
  不应该强迫客户程序依赖于它们不用的方法.
  接口属于客户,不属于它所在的类层次结构.
  详细说明:
  分离客户就是分离接口.分离接口有2种方法:委托和多重继承
  接口隔离原则是用来处理胖接口所具有的缺点.
  如果类接口不是内聚的,就表示该类的接口是胖的,需要减肥.
  减肥的原则是接口分成多组方法,每一组方法都服务于一组不同的客户程序!
  客户程序面对的就是多个具有内聚接口的抽象基类.
*/
4.2.1页面服务接口
package service;
import java.util.Date;
import java.util.List;
import entityBean.*;

public interface IserviceSp {
    //SSpMaster Create,Retrieve,Update,Delete
    public void editSpMaster(SSpMaster entity);
    public void delSpMasterBySP(String sp);
    public List<SSpMaster> findBySpPort(String sp);
   
    //SSpDetail Create,Retrieve,Update,Delete   
    public void editSpDetail(SSpDetail entity);
    public void delSpDetailBySP(String sp);
    public List<SSpDetail>     findBySp(String sp);
   
    //spNumber Create,Retrieve,Update,Delete
    public void getspNumber();
    public List<SSpNumber> spNumberList();
    public void spNumberChgFlag(String sp,String flag);

    //Retrieve oclist,itemlist by oc
    public List<VSpOcShipdate>   findOclist(String custid,Date shipdate1,Date shipdate2); //ok
    public List<OOcDetail>   findOcItemlist(String oc,Date shdt);    //ok
    //Retrieve customerlist,portlist by customer   
    public List<BCustomerBasic>   findAllCustomer(); //ok
    public List<BCustomerPort>   findPortByCust(String customer);    //ok       
}

4.2.2页面服务接口实现
package service;
//import basic and naming package
import java.util.Date;
import java.util.List;
import javax.naming.*;
//import entity and spDao interface package
import entityBean.*;
import com.JNDIContext;
import service.IserviceSp;
import spDAO.spFacadeRemote;
public class serviceSp implements IserviceSp {
    private spFacadeRemote iSPDAO;

    public serviceSp() {
        this.iSPDAO = this.getIemp();
    }
   
    public spFacadeRemote getIemp() {
        try {
            InitialContext ctx = JNDIContext.getInitContextByRemote();
            spFacadeRemote iSP=(spFacadeRemote)ctx.lookup("spFacade/remote");
            return iSP;
        } catch (NamingException e) {
            e.printStackTrace();
            return null;
        }
    }
    //SSpMaster Create,Retrieve,Update,Delete       
    public void editSpMaster(SSpMaster entity) {//Create,Update
        try {
            iSPDAO = this.getIemp();
            iSPDAO.SSpMasterSave(entity);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    public void delSpMasterBySP(String sp) {//Delete
        try {
            iSPDAO = this.getIemp();
            iSPDAO.SSpMasterDelete(sp);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    public List<SSpMaster> findBySpPort(String sp) {//Retrieve
        iSPDAO = this.getIemp();
        return (List<SSpMaster>)iSPDAO.SSpMasterFindBySP(sp);
    }
    //SSpDetail Create,Retrieve,Update,Delete       
    public void editSpDetail(SSpDetail entity) {//Create,Update
        try {
            iSPDAO = this.getIemp();
            iSPDAO.SSpDetailSave(entity);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }   
    public void delSpDetailBySP(String sp) {//Delete
        try {
            iSPDAO = this.getIemp();
            iSPDAO.SSpDetailDelete(sp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public List<SSpDetail> findBySp(String sp) {//Retrieve
            iSPDAO = this.getIemp();
            return (List<SSpDetail>)iSPDAO.SSpDetailFindBySP(sp);
    }

    //spNumber Create,Retrieve,Update,Delete
    public void getspNumber() {//Create with db procedure
        try {
            iSPDAO = this.getIemp();
            iSPDAO.spNumberGet();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void spNumberChgFlag(String sp, String flag) {//Update
        try {
            iSPDAO = this.getIemp();
            iSPDAO.spNumberChgFlag(sp,flag);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public List<SSpNumber> spNumberList() {//Retrieve
            iSPDAO = this.getIemp();
            return (List<SSpNumber>)iSPDAO.spNumberList();
    }

    //Retrieve oclist,itemlist by oc
    public List<OOcDetail> findOcItemlist(String oc, Date shdt) {
            iSPDAO = this.getIemp();
            return (List<OOcDetail>)iSPDAO.findOcItemlist(oc,shdt);
    }

    public List<VSpOcShipdate> findOclist(String custid, Date shipdate1,Date shipdate2) {
            iSPDAO = this.getIemp();
            return (List<VSpOcShipdate>)iSPDAO.findOclist(custid,shipdate1,shipdate2);
    }
    //Retrieve customerlist,portlist by customer   
    public List<BCustomerBasic>   findAllCustomer(){
        iSPDAO = this.getIemp();
        return (List<BCustomerBasic>)iSPDAO.findAllCustomer();
    }
    public List<BCustomerPort>   findPortByCust(String customer){
        iSPDAO = this.getIemp();
        return (List<BCustomerPort>)iSPDAO.findPortByCust(customer);   
    }
}

/************************************************************************/
4.3页面接口测试
package com;
//import entity and service package
import entityBean.*;
import service.IserviceSp;
import service.serviceSp;
//import java basic package
import java.util.*;
import java.lang.String;
import java.text.SimpleDateFormat;

public class testSp {
    public static void main(String[] args) {
        //************************begin************************************   
        try {
            IserviceSp idao = new serviceSp();   
            //************************************************************       
            //SSpMaster Create,Retrieve,Update,Delete
            //SSpMaster Create or Update test value=>ok
            System.out.println("editSpMaster(SSpMaster entity)");   
            SSpMasterId spheadpk=new SSpMasterId();

            spheadpk.setPsonumber("PB100561");
            spheadpk.setSubcustom("0000000000");
            String s1="10/29/2010",s2="10/25/2010",s3="10/30/2010";
            SimpleDateFormat   sdf =  new SimpleDateFormat("MM/dd/yyyy");  
            Date d1=sdf.parse(s1);
            Date d2=sdf.parse(s2);
            Date d3=sdf.parse(s3);       
            SSpMaster sphead=new SSpMaster();   
            sphead.setId(spheadpk);       
            sphead.setPshipDate(d1);
            sphead.setShippDate(d2);
            sphead.setShip2Date(d3);
            sphead.setCustomerid("B.A.B.");                           
            sphead.setDestinatio("COLUMBUS, OHIO");
            sphead.setCustofPoe("LONG BEACH");
            sphead.setId(spheadpk);           
            idao.editSpMaster(sphead); //Create or Update
           
            //SSpMaster Delete test value=>ok           
            System.out.println("delSpMasterBySP(String sp)");   
            String  spnumber=new String();
            spnumber="PB100561";
            idao.delSpMasterBySP(spnumber);
           
            //SSpMaster Retrieve test value=>ok   
            System.out.println("List<SSpMaster> findBySpPort(String sp)");
            List listsp= idao.findBySpPort("PB100561");
            Iterator isp = listsp.iterator();
            int rowssp =0;
            while(isp.hasNext()){
                SSpMaster echo_row41 = (SSpMaster)isp.next();
                 System.out.println(echo_row41.getCustomerid()+" | "
                            +echo_row41.getId().getPsonumber()+" | "
                            +echo_row41.getId().getSubcustom());
                 rowssp++;
            }
            //************************************************************   
            //SSpDetail Create,Retrieve,Update,Delete
            //SSpDetail Create,Update test value=>ok               
            System.out.println("editSpDetail(SSpDetail entity)");   
            SSpDetailId spdetailpk=new SSpDetailId();
            String sdate="10/25/2010";
            SimpleDateFormat   sdfDetail =  new SimpleDateFormat("MM/dd/yyyy");  
            Date d_shipdate=sdfDetail.parse(sdate);
            spdetailpk.setShippDate(d_shipdate);
            spdetailpk.setPsonumber("PB100561");
            spdetailpk.setOcNumber("B1000577");
            spdetailpk.setItemnumber("BY34317");   
            spdetailpk.setSubcustome("B.A.B./OH");           
            SSpDetail spdetail=new SSpDetail();           
            spdetail.setId(spdetailpk);
            spdetail.setCustomerid("B.A.B.");   
            spdetail.setItemofname("C.P.O #");
            spdetail.setItemofpono("1006944");
            spdetail.setLoadofname("P.O.#");
            spdetail.setLoadofpono("1006944");
            Long qty1=new Long(3708);
            spdetail.setLoadqtyinp(qty1);
            spdetail.setOrdercqty(qty1);                       
            idao.editSpDetail(spdetail); //Create or update  1 row       
                   
            spdetailpk.setItemnumber("BY52742");   
            spdetail.setId(spdetailpk);
            Long qty2=new Long(17208);
            spdetail.setLoadqtyinp(qty2);
            spdetail.setOrdercqty(qty2);   
            idao.editSpDetail(spdetail); //Create or update 2 row       

            //SSpDetail Delete test value=>ok   
            System.out.println("delSpDetailBySP(String sp)");               
            idao.delSpDetailBySP(spnumber);   
           
            //SSpDetail Retrieve test value=>ok               
            System.out.println("List<SSpDetail> findBySp(String sp)");
            List listdetail= idao.findBySp("PB100561");
            Iterator idetail = listdetail.iterator();
            int rowsdetail =0;
            while(idetail.hasNext()){
                SSpDetail echo_row = (SSpDetail)idetail.next();
                System.out.println(echo_row.getCustomerid()+" | "
                            +echo_row.getId().getPsonumber()+" | "
                            +echo_row.getId().getOcNumber()+" | "
                            +echo_row.getId().getItemnumber());
                rowsdetail++;
             }

            //************************************************************               
            //spNumber Create,Retrieve,Update,Delete
            //spNumber Create test value=>ok   
            System.out.println("getspNumber(String userid)");
            idao.getspNumber();    //create with database procedure
           
            //spNumber Update test value=>ok   
            System.out.println("spNumberChgFlag(String sp,String flag)");
            idao.spNumberChgFlag("PB100561","1");       
           
            //spNumber Retrieve test value=>ok   
            System.out.println("List<SSpNumber> spNumberList()");
            List listNumber= idao.spNumberList();
            Iterator iNumber = listNumber.iterator();
            int rowsNumber =0;
            while(iNumber.hasNext()){
                 SSpNumber echo_row22 = (SSpNumber)iNumber.next();
                 System.out.println(echo_row22.getPsonumber() +" | "
                                +echo_row22.getOwnerName()+" | "
                                +echo_row22.getFlag());
                rowsNumber++;
            }   
           
            //************************************************************                
            //Retrieve oclist,itemlist by oc   
            //Retrieve oclist test value=>ok
            System.out.println("findOclist(cust,shipdate1,shipdate2)");   
            String s51="10/25/2010",s52="10/30/2010";
            SimpleDateFormat   sdf5 =  new SimpleDateFormat("MM/dd/yyyy");  
            Date d51=sdf5.parse(s51);
            Date d52=sdf5.parse(s52);
            String cust51=new String();
            cust51="B.A.B.";       
            List list51= idao.findOclist(cust51, d51, d52);
            Iterator i51 = list51.iterator();
            int rows51 =0;
            while(i51.hasNext()){
                VSpOcShipdate echo_row = (VSpOcShipdate)i51.next();
                System.out.println(echo_row.getId().getOcNumber()+" | "
                            +echo_row.getId().getShippDate()+" | "               
                            );
                rows51++;
            }
           
            //Retrieve itemlist test value=>ok
            System.out.println("findOcItemlist(oc,shipdate)");   
            String s53="10/25/2010";
            SimpleDateFormat   sdf52 =  new SimpleDateFormat("MM/dd/yyyy");  
            Date d53=sdf52.parse(s53);
            String oc5=new String();
            oc5="B1000652";       
            List list52= idao.findOcItemlist(oc5, d53);
            Iterator i52 = list52.iterator();
            int rows52 =0;
            while(i52.hasNext()){
                OOcDetail echo_row = (OOcDetail)i52.next();
                 System.out.println(echo_row.getId().getItemnumber()+"|"
                            +echo_row.getId().getOcNumber()+"|"
                            +echo_row.getId().getShippDate());
                 rows52++;
             }   
                               
            //Retrieve customerlist,portlist by customer
            //Retrieve customerlist test value=>ok           
            System.out.println("findAllCustomer()");   
            List list61= idao.findAllCustomer();
            Iterator i61 = list61.iterator();
            int rows61 =0;
            while(i61.hasNext()){
                BCustomerBasic row61 = (BCustomerBasic)i61.next();
                System.out.println(row61.getCustomerid()+"|"+row61.getBriefName());
                rows61++;
            }                        
   
            //Retrieve portlist test value=>ok       
            System.out.println("findPortByCust(String customer)");   
            List list62= idao.findPortByCust("B.A.B.");
            Iterator i62 = list62.iterator();
            int rows62 =0;
            while(i62.hasNext()){
                BCustomerPort row62 = (BCustomerPort)i62.next();
                System.out.println(row62.getId().getCustomerid()+"|"+row62.getId().getSubcustom());
                rows62++;
            }
   
               
        } catch (Exception e) {
           
            e.printStackTrace();
        }//end try
        //************************end************************************           
    }//end main

}//end class


/************************************************************************/
网页界面有太多代码,
因为网页源码的符号在blog里面保存有些问题,看如何放在下一章来讲?
5.Struts/jsp/css/div/javascript/ajax实现
5.1设计Struts/jsp/js事件三者关系
5.2实现Struts配置
5.3实现Struts类DispatchAction
5.3实现Jsp页面(div+jsp)
5.4实现Jsp页面事件javascript功能
5.5实现Jsp页面美化(css+js)
5.6发布web工程到Jboss

/************************************************************************/