分享
 
 
 

J2EE 实战开发EJB

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

原标题:实战J2EE开发购物网站之EJB篇

版权申明:本文所有内容均来自其作者马宣(经典论坛IDmaxuan9),仅授权蓝色理想,经典论坛。

作者:maxuan9

版权:maxuan9

EJB是什么想必不用我再多费唇舌,在这里我会教大家写一个很简单的EJB(仅仅在jsp中显示在数据库中类似菜单的记录,当然更多的复杂操作,我们将会在以后继续完善,请关注此贴),这样更能让大家看清楚,分析透彻,让初学者更快的跨过这道坎,我们将写一个CMP的实体BEAN,与数据库打交道,而且写一个model进行调用,还会写一个sessionBEAN将操作封装,为了取得和这个EJB的联系进行操作,我们还必须写一个javabean,为了显示其操作结果,我们还得有一个JSP的页面,虽然JSP也可以直接操作EJB,但这并不是推荐的办法,除了安全、性能之外,在J2EE的体系中,JSP处于视图层,它只需要请求或显示最终结果,而将具体的动作和逻辑业务关系放到了EJB和javabean中。

在理清思想之后,我们需要组建这次的应用平台,和起码的应用工具。

(PS:这次不仅仅开发一个EJB,还要把它放到网络应用中,可以算是最小型的J2EE体系,JSP将采用struts MVC的设计方式,请大家注意看)

数据库平台:MySQL (这次实列只建一张表,无需劳烦Oracle大架)

J2EE应用平台:weblogic6.1SP2(本人最钟爱的版本)

注:本文所采用的javabean和EJB的联系交互仅限weblogic平台。

struts 1.1:JSP的Framework MVC设计模式(请到GOOGL搜索下载,选择合适的下载点很重要)

Jbuilder:EJB的设计编写工具

struts-console-2.2:编写struts-config.xml的好工具,到处搜搜吧,我忘了哪里下的!不过真是好用,极力推荐。

MYSQL.jar:MYSQL数据库的JDBC驱动。

在将以上工具准备齐全之后,我们就可以天始动手了,MYSQL的配置,J2EE、weblogic环境的架设,请看置顶精华贴。

首先,我们先建一个mytest的数据库,然后建一张myejb的表,在这张表里只有两个字段:DlDm(大类代码)、DlMc(大类名称),将DlDm设为主键,类型为varchar,长度为4,DlMc类型为varchar,长度为50。以下是我用Navicat的截图。

然后我们往里先插入一些数据,如下图所示。

在建完数据库之后,我们就要开始进行EJB的开发了,先建个lib的目录,将一些要用的库文件放到其中,首先就把mysql的JDBC驱动放进去吧。然后解压下载的struts包,将lib目录下的所有jar文件也放到这个目录中,我所用的Struts是1.1b1。

接下来,我们将请出Jbuilder啦,用Jbuilder开发EJB,就像用DW写网页一样方便快捷。首先我们还是将Jbuilde的库配置一下,先建一个struts 1.1 lib的库,把刚才我们放到lib目录中的除mysql外的jar都添加进去,这就是将来开发编写javabean要用到的啦!

然后我们建一个mysql的库,把mysql.jar添加进去。

接着,我们需要在EnterPRise setup中设置Database Drivers,点ADD按钮,将刚才的mysql库加进去。

在点OK以后,你需要重启一下你的JBuilder。

好了,现在我们开始新建一个应用,这里我取名为myEJB,然后一路next,直到完成,在这里我们不忙先把Struts库加进去。

然后我们可以开始开发EJB啦,首先新建一个EJB Module,如下图

接着,我们为它取名为EJB,版本为2.0,在下面的输出路径中,我选择了放到lib目录中。

在接下来,我们在下面的DataSources点右键,选取Import Schema From Database

在出现的对话框中,按下图所填写即可,这里的Driver和URL是连接mysql的写法,下面是连接MYSQL数据库的用户名和密码,最下面的JNDI name我们命名为mywork,这里所写的名字要与以后在配置weblogic中的名字相同。

在连接成功之后,我们会看到下图,点开mywork会出现刚才在MYSQL中建的表。

在myejb的表上点右键,在出现的菜单中选第一项Create CMP 2.0 Entity Bean,建立一个CMP的实体BEAN文件。

由于我们将EJB,和javabean都放到一个application中编辑,所以为了以后好区分,我们点击在右视图中的Myejb,在出来的菜单中选Classes and packages,在出现的对话框中我们加一个.maxuan.ejb,如下图所示。

最后我们看到JBuilder已经为我们完成了基本的CMP实体BEAN文件。

接下来,我们需要先写一个调用模型,新建一个CLASS,打包到myejb.maxuan.ejb.model中。

进入讨论组讨论。

下图是这个文件的源代码。MyejbMd

package myejb.maxuan.ejb.model;

import java.io.*;

public class MyejbMd implements Serializable {

public MyejbMd() {

}

public String dlDm;

public String dlMc;

public String action;

public String getDlDm() {

return dlDm;

}

public void setDlDm(String dlDm) {

this.dlDm = dlDm;

}

public String getDlMc() {

return dlMc;

}

public void setDlMc(String dlMc) {

this.dlMc = dlMc;

}

public String getAction() {

return action;

}

public void setAction(String action) {

this.action = action;

}

private void writeObject(ObjectOutputStream oos) throws IOException {

oos.defaultWriteObject();

}

private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {

ois.defaultReadObject();

}

}

然后我们需要编辑实体BEAN文件来引入模型和对数据库的基本操作。

Myejb.java文件

package myejb.maxuan.ejb;

import javax.ejb.*;

import java.util.*;

import myejb.maxuan.ejb.model.*;

public interface Myejb extends javax.ejb.EJBLocalObject {

public String getDlDm();

public void setDlMc(String dlMc);

public String getDlMc();

public MyejbMd getDlMd();

public void setMyejbMd(MyejbMd dlMd);

}

MyejbBean.java文件

package myejb.maxuan.ejb;

import javax.ejb.*;

import myejb.maxuan.ejb.model.*;

abstract public class MyejbBean implements EntityBean {

EntityContext entityContext;

public java.lang.String ejbCreate(java.lang.String dlDm) throws CreateException {

setDlDm(dlDm);

return null;

}

public void ejbPostCreate(java.lang.String dlDm) throws CreateException {

/**@todo Complete this method*/

}

public java.lang.String ejbCreate(java.lang.String dlDm, java.lang.String dlMc) throws CreateException {

setDlDm(dlDm);

setDlMc(dlMc);

return null;

}

public void ejbPostCreate(java.lang.String dlDm, java.lang.String dlMc) throws CreateException {

/**@todo Complete this method*/

}

public void ejbRemove() throws RemoveException {

/**@todo Complete this method*/

}

public abstract void setDlDm(java.lang.String dlDm);

public abstract void setDlMc(java.lang.String dlMc);

public abstract java.lang.String getDlDm();

public abstract java.lang.String getDlMc();

public void ejbLoad() {

/**@todo Complete this method*/

}

public void ejbStore() {

/**@todo Complete this method*/

}

public void ejbActivate() {

/**@todo Complete this method*/

}

public void ejbPassivate() {

/**@todo Complete this method*/

}

public void unsetEntityContext() {

this.entityContext = null;

}

public void setEntityContext(EntityContext entityContext) {

this.entityContext = entityContext;

}

public myejb.maxuan.ejb.model.MyejbMd getDlMd() {

MyejbMd dlMd = new MyejbMd();

dlMd.setDlDm(getDlDm());

dlMd.setDlMc(getDlMc());

return dlMd;

}

public void setMyejbMd(MyejbMd dlMd){

setDlMc(dlMd.getDlMc());

}

}

接着我们要编辑最后的MyejbHome.java,双击左边树的EJB,在右边的面板中选中Myejb后点右键,在出现的菜单中选ADD,选取下面的Findel方法,如下图所示:

在接着出现的对话框中选择填写如下:

我们继续编辑MyejbHome.java文件

package myejb.maxuan.ejb;

import javax.ejb.*;

import java.util.*;

public interface MyejbHome extends javax.ejb.EJBLocalHome {

public Myejb create(String dlDm) throws CreateException;

public Myejb create(String dlDm, String dlMc) throws CreateException;

public Collection findAll() throws FinderException;

public Myejb findByPrimaryKey(String dlDm) throws FinderException;

}

好了,实体BEAN文件我们已经写完了,现在我们编译一下,看有没有什么错误。

新手提示:在引入模型之前,我们需要先编译一下模型文件。

在接下来我们将写一个SessionBean。

我们继续来完成这个EJB,我们需要来写一个SessionBean,创建方法与创建实体BEAN一样,这里不在多说,只把它们的源码贴出,请大家仔细看,理解其中的意义!

这里我将SessionBean命名为MyejbWeb

MyejbWeb.java

package myejb.maxuan.ejb;

import javax.ejb.*;

import java.util.*;

import java.rmi.*;

import java.sql.*;

import java.io.*;

import myejb.maxuan.ejb.model.*;

public interface MyejbWeb extends javax.ejb.EJBObject {

public ArrayList getDlList() throws RemoteException;

public MyejbMd getDl(String dlDm) throws RemoteException;

}

MyejbWebBean.java

package myejb.maxuan.ejb;

import javax.ejb.*;

import java.util.*;

import java.sql.*;

import java.sql.Date;

import java.io.InputStream;

import java.io.OutputStream;

import myejb.maxuan.ejb.model.*;

public class MyejbWebBean implements SessionBean {

SessionContext sessionContext;

public void ejbCreate() throws CreateException {

/**@todo Complete this method*/

}

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;

}

public ArrayList getDlList(){

ArrayList dlList=new ArrayList();

try {

javax.naming.Context context = new javax.naming.InitialContext();

MyejbHome dlHome= (MyejbHome)context.lookup("Myejb");

Collection dlCntl = dlHome.findAll();

Iterator iterator = dlCntl.iterator();

while(iterator.hasNext()){

Myejb myEjb = (Myejb) iterator.next();

MyejbMd dlMd = myEjb.getDlMd();

dlList.add(dlMd);

}

}catch (Exception ex) {

throw new EJBException(ex);

}

return dlList;

}

public MyejbMd getDl(String dlDm){

MyejbMd dlMd=new MyejbMd();

try {

javax.naming.Context context = new javax.naming.InitialContext();

MyejbHome dlHome= (MyejbHome)context.lookup("Myejb");

try{

Myejb myEjb = dlHome.findByPrimaryKey(dlDm);

dlMd = myEjb.getDlMd();

}catch(FinderException fe){

dlMd=null;

}

}catch (Exception ex) {

throw new EJBException(ex);

}

return dlMd;

}

}

MyejbWebHome.java

package myejb.maxuan.ejb;

import javax.ejb.*;

import java.util.*;

import java.rmi.*;

public interface MyejbWebHome extends javax.ejb.EJBHome {

public MyejbWeb create() throws CreateException, RemoteException;

}

至此,我们的EJB部份已经完成,明天我们将继续写一个javabean来访问这个EJB!同时我们也会引入struts,请大家留意!

PS:虽然这只是一个简单的EJB网络应用结构,但却是建立J2EE大型应用的基础,希望大家多多交流!!

进入讨论组讨论。

(出处:http://www.knowsky.com)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有