/*************************************************************************
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
/************************************************************************/