2. 數據庫的建立:Entity Beans代表了Database中的數據,所以需要數據庫支持,但一般情況下,我們知道,可以根據容器治理的Entity Beans導出SQL DDL。另一方面,可以根據SQL DDL生成容器治理的Entity Beans。兩種方法都可以。比如JBuilder 7兩種方法都提供了。但我想,信息模型(數據庫)的建立在編碼之前就應該存在,所以建議采用第二種辦法。當然有些時候第一種會較為合理些,因為并不是表中所有的字段都會映射到Entity Beans中。該例子中建立了這樣這樣一個Table:
/*===================================================*/
/* Table : techniquespec */
/*===================================================*/
create table techniquespec (
techniqueitem char(100) not null,
units char(10) null,
minvalue decimal(16,6) null,
maxvalue decimal(16,6) null,
types char(1) null,
signon char(1) null,
constraint PK_TECHNIQUESPEC
PRimary key (techniqueitem)
)
其中,開發人員在建表的過程中,不需要手工去寫SQL DDL語句,一般都可以借助于工具進行,比如PowerDesigner、ERWin等工具。用用就會了,不要對工具產生不好的情緒,但前提是你熟悉數據庫理論。
用戶建好Table后,可以填入數據,中文的也可以。
3. 容器治理的Entity Beans的開發:JBuilder對EJB開發支持的比較好,提供了圖形化的方式。由于我們已經建立好了Database,前面的techniquespec表,我們可以借助于Import Schema From Database,將SQL DLL引入進來。(由于這里不能貼出操作圖片,所以只能用文字說明梗概,大家在設計過程中有什么問題,可以發郵件給我,我盡力而為。)在這個過程中,一定要注重JNDI的名字和數據源中的JNDI要一致。得到SQL DLL后,我們可以根據techniquespec表生成CMP 2.0 Entity Beans,在這里我們采用LocalHome訪問Entity Beans,為什么采用?后續文章中都會具體闡述?,F在想返回表techniquespec中列techniqueitem的所有內容。首先,真假一個findByTypes Finder方法,EJB QL語句為: SELECT OBJECT(p) from Techniquespec AS p,其中返回值為Collection。下面給出代碼。
LocalHome接口:
package cacdsystem;
import
javax.ejb.*;
import java.util.*;
public interface TechniquespecHome extends javax.ejb.EJBLocalHome
{
public Techniquespec create(String techniqueitem)
throws CreateException;
public Collection findByTypes()
throws FinderException;
//添加的Finder方法
public Techniquespec findByPrimaryKey(String techniqueitem)
throws FinderException;
}
Local接口:
package cacdsystem;
import javax.ejb.*;
import java.util.*;
import java.math.*;
public interface Techniquespec extends javax.ejb.EJBLocalObject
{
public String getTechniqueitem();
public void setUnits(String units);
public String getUnits();
public void setMinvalue(BigDecimal minvalue);
public BigDecimal getMinvalue();
public void setMaxvalue(BigDecimal maxvalue);
public BigDecimal getMaxvalue();
public void setTypes(String types);
public String getTypes();
public void setSignon(String signon);
public String getSignon();}
bean類:
package cacdsystem;
import javax.ejb.*;
abstract public class TechniquespecBean implements EntityBean
{
EntityContext entityContext;
public java.lang.String ejbCreate(java.lang.String techniqueitem)
throws CreateException
{
setTechniqueitem(techniqueitem);
return null;
}
public void ejbPostCreate(java.lang.String techniqueitem)
throws CreateException {}
public void ejbRemove() throws RemoveException {}
public abstract void setTechniqueitem(java.lang.String techniqueitem);
public abstract void setUnits(java.lang.String units);
public abstract void setMinvalue(java.math.BigDecimal minvalue);
public abstract void setMaxvalue(java.math.BigDecimal maxvalue);
public abstract void setTypes(java.lang.String types);
public abstract void setSignon(java.lang.String signon);
public abstract java.lang.String getTechniqueitem();
public abstract java.lang.String getUnits();
public abstract java.math.BigDecimal getMinvalue();
public abstract java.math.BigDecimal getMaxvalue();
public abstract java.lang.String getTypes();
public abstract java.lang.String getSignon();
public void ejbLoad(){}
public void ejbStore(){}
public void ejbActivate(){}
public void ejbPassivate(){}
public void unsetEntityContext()
{
this.entityContext = null;
}
public void setEntityContext(EntityContext entityContext)
{
this.entityContext = entityContext;
}
}
進入討論組討論。
4.無狀態Session Beans的開發: 通過EJB 圖形設計器,生成一個Session Bean,代碼如下。
Home接口:
package cacdsystem;
import javax.ejb.*;
import java.util.*;
import java.rmi.*;
public interface VocHome extends javax.ejb.EJBHome
{
public Voc create() throws CreateException, RemoteException;
}
Remote接口:
package cacdsystem;
import javax.ejb.*;
import java.util.*;
import java.rmi.*;
public interface Voc extends javax.ejb.EJBObject
{
public Collection getVocTechnique() throws RemoteException;
}
bean類:
package cacdsystem;
import javax.ejb.*;
import java.util.*;
public class VocBean implements SessionBean
{
SessionContext sessionContext;
TechniquespecHome techniquespecHome;
public void ejbCreate() throws CreateException {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sessionContext)
{
this.sessionContext = sessionContext;
try
{
javax.naming.Context context = new javax.naming.InitialContext();
techniquespecHome = (TechniquespecHome)context.lookup("Techniquespec");
}
catch (Exception ex)
{
System.out.println("Techniquespecs調用出錯!");
throw new EJBException(ex);
}
}
public java.util.Collection getVocTechnique()
{
/**@todo Complete this method*
//*** 獲得全部技術需求項函數!*/
System.out.println("調用getVocTechnique()!");
java.util.Collection collection = null;
java.util.List results = new ArrayList();
try
{
collection= techniquespecHome.findByTypes();
if(collection.size() > 0)
{
System.out.println(collection.size());
Iterator iter = collection.iterator();
String tempStr = null;
Techniquespec techniqu = null;
while(iter.hasNext())
{
techniqu = (Techniquespec) iter.next();
tempStr = techniqu.getTechniqueitem();
tempStr = charASC.chinTOISO(tempStr);
results.add(tempStr);
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
throw new EJBException(ex);
}
return results;
}
}
說明:
?。?)我們在Session Bean中添加了一個商務方法,getVocTechnique(),以獲得techniqueitem中的全部內容。
?。?)setSessionContext中,我們完成了EJB的一些初始化工作。(3) charASC.chinTOISO是用于中文轉換的靜態方法,代碼如下:
package cacdsystem;
public class charASC
{
static private String results = null;
public charASC(){}
static public String chinTOISO(String temp)
{
if(temp == null)
{
results = "";
}
else
{
try
{
results = new String(temp.getBytes("ISO-8859-1"),"gb2312");
results = results.trim();
}
catch(Exception ee)
{
System.out.println("中文轉換失敗!");
}
}
return results;
}
}進入討論組討論。
5. JSP頁面的開發:針對Session Bean,我編寫了一個JSP頁面。
<%@page contentType="text/Html;charset=gb2312"%>
<%@page import="java.text.*" %>
<%@page import="java.util.*"%>
<%@page import="java.sql.*" %>
<%@page import="javax.naming.*" %>
<%@page import="java.lang.*" %>
<%@page import="javax.rmi.PortableRemoteObject" %>
<%@page import="javax.ejb.* "%>
<%@page import="cacdsystem.*"%>
<html>
<head>
<title>產品技術需求提?。?title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form id=form name=form1 method=post>
<input type=hidden id=pageFlag name=pageFlag value='input'>
<table cellSpacing=0 cellPadding=0 width="98%" border=0 align=center >
<tr height=30 class=titleFont>
<td><font color='#0058a5'> 您所在位置:產品技術需求提?。?font></td>
</tr>
<tr height=1 class=titleFont>
<td></td>
</tr>
</table>
<table width="98%" border="0" bgcolor='#999999' align=center>
<tr>
<td><b> <font color="#ffffff">產品技術需求提取</font></b></td>
</tr>
</table>
<table width="98%" border="1" align=center bgcolor="#f0f0f0" bordercolor='#ffffff' cellspacing=0 cellpadding=0 class=titleFont>
<tr bgcolor='#e0e8f8'>
<td> </td>
</tr>
<%
InitialContext ctx = new InitialContext();
VocHome vocHome =
(VocHome)PortableRemoteObject.narrow(ctx.lookup("Voc"),VocHome.class);
Voc voc = vocHome.create();
Collection collection = voc.getVocTechnique();
if(collection.size() > 0)
{
Iterator iters = collection.iterator();
int i = 0;
while(iters.hasNext())
{
++i;
%>
<tr>
<td><input type='checkbox' name=<%= "select"+i %>
value=<%= i %>><%= (String)iters.next() %>
</td>
</tr>
<%
}
}
%>
<%
voc.remove();
%>
<tr bgcolor='#e0e8f8' align=middle>
<td>
<p align=left></p>
</td>
</tr>
<tr align=middle>
<td>
<input type=submit id=submit1 name=submit1 value="提 交">
<input type=reset id=submit1 name=submit value="重 置">
</td>
</tr>
</table>
</form>
</body>
</html>進入討論組討論。
6. 系統Deploy: 到現在為止,我們實現了Entity Bean、Session Bean、JSP,從而實現了該實例所需要的代碼。為使我們測試代碼的正確性,我們來Deploy到服務器上。首先,由于在Session Bean中引用了Entity Bean,所以需要申明。
<session>
<display-name>Voc</display-name>
<ejb-name>Voc</ejb-name>
<home>cacdsystem.VocHome</home>
<remote>cacdsystem.Voc</remote>
<ejb-class>cacdsystem.VocBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-local-ref> //手工添加的配置描述符代碼!
<description />
<ejb-ref-name>Techniquespec</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>cacdsystem.TechniquespecHome</local-home>
<local>cacdsystem.Techniquespec</local>
<ejb-link>Techniquespec</ejb-link>
</ejb-local-ref>
</session>
其次,需要將EJB的接口文件拷貝到web-inf/classes目錄下。在這里由于是存在package cacdsystem中,需要把4個接口文件拷貝到web-inf/classes/cacdsystem中。第三,將EJB打包成.jar文件,JBuilder 7可以自動完成,記得要包括charASC.class文件。生成.jar后發布到服務器上可以通過JBuilder 7發布,也可以通過WebLogic提供的Builder工具,或者通過Console發布,或者通過將.jar拷貝到
applications目錄即達到發布的目的。
最后,我們也可以通過把整個EJB、JSP打包成.ear文件,JBuilder工具提供了Wizard。
總結 整個過程實現了EJB組件開發,從而對EJB有了一定的熟悉。接下來的文章中,我會繼續深入講述EJB技術涉及到的技術。謝謝大家看完我的寫文章,也希望大家寫信和我交流。進入討論組討論。
- u盤無法識別怎么辦,小編告訴你U盤無法識別怎
- usb無線網卡怎么用,小編告訴你安裝教程
- usb調試在哪,小編告訴你usb調試在哪
- 優盤不顯示,小編告訴你優盤不顯示怎么辦
- 低級格式化,小編告訴你硬盤怎么低級格式化
- 分區表丟失,小編告訴你分區表丟失如何修復
- 進入bios,小編告訴你戴爾筆記本進入bios設置u
- 怎么刷bios,小編告訴你華碩怎么刷bios
- 讀卡器怎么用,小編告訴你如何使用讀卡器
- bios升級,小編告訴你華碩主板bios怎么升級
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品自拍偷拍|
亚洲男人的天堂在线|
www亚洲精品|
日韩福利伦理影院免费|
亚洲精品欧美一区二区三区|
91免费精品视频|
日韩在线观看成人|
91精品啪在线观看麻豆免费|
日本精品久久电影|
国产91精品视频在线观看|
91精品国产91久久久久久久久|
日韩激情av在线免费观看|
成人久久18免费网站图片|
亚洲欧美日韩直播|
在线视频免费一区二区|
色综合久综合久久综合久鬼88|
久久久噜久噜久久综合|
欧美性生活大片免费观看网址|
欧美日韩国产123|
一区二区在线免费视频|
亚洲伊人成综合成人网|
欧美激情亚洲一区|
国产成人精品在线|
欧美黑人极品猛少妇色xxxxx|
亚洲伊人成综合成人网|
国外日韩电影在线观看|
欧美日韩国产精品专区|
成人a视频在线观看|
亚洲视频在线观看视频|
国产精品久久久久久久久借妻|
国产精品99一区|
91精品国产电影|
亚洲精品aⅴ中文字幕乱码|
日韩免费观看高清|
91在线观看免费高清|
亚洲综合视频1区|
欧美午夜宅男影院在线观看|
精品动漫一区二区三区|
欧美激情亚洲精品|
欧美日韩成人在线播放|
欧美色播在线播放|
国产精品91在线观看|
亚洲女人天堂视频|
国产欧美日韩精品丝袜高跟鞋|
久久全球大尺度高清视频|
国模吧一区二区|
国产丝袜一区二区三区|
欧美洲成人男女午夜视频|
日韩av电影在线免费播放|
国产视频自拍一区|
超碰精品一区二区三区乱码|
亚洲国产精品va在看黑人|
欧美激情在线观看视频|
中文日韩在线观看|
狠狠躁夜夜躁人人躁婷婷91|
国产精品美女999|
久久国内精品一国内精品|
国产成人福利夜色影视|
色偷偷av一区二区三区乱|
91麻豆国产语对白在线观看|
日韩在线观看高清|
成人亚洲综合色就1024|
91精品久久久久|
成人国产精品免费视频|
国产精品久久久久久久久影视|
国模吧一区二区三区|
国产精品久久久久国产a级|
久久夜色精品国产|
亚洲男子天堂网|
中文字幕精品一区久久久久|
亚洲欧美另类人妖|
2024亚洲男人天堂|
久久亚洲精品中文字幕冲田杏梨|
97视频人免费观看|
亚洲四色影视在线观看|
久久久女人电视剧免费播放下载|
国产在线久久久|
成人h视频在线观看播放|
亚洲男人天天操|
亚洲一二三在线|
日韩av在线影视|
日韩精品中文字幕在线|
日韩中文字幕欧美|
国产精品最新在线观看|
国产mv免费观看入口亚洲|
成人午夜在线视频一区|
亚洲国产精品久久91精品|
亚洲色图国产精品|
日韩av电影中文字幕|
久久综合色影院|
国产日韩欧美电影在线观看|
日韩精品极品在线观看播放免费视频|
国产成人免费av|
亚洲va欧美va国产综合剧情|
欧美日韩国产成人在线|
欧美激情在线视频二区|
日韩精品极品毛片系列视频|
欧美日韩另类视频|
欧美性高潮床叫视频|
日韩国产中文字幕|
久久精品国亚洲|
欧美性色xo影院|
亚洲人成电影网站色|
国产精品流白浆视频|
久久精品国产亚洲精品2020|
91久久嫩草影院一区二区|
俺去啦;欧美日韩|
亚洲人成网站777色婷婷|
日韩国产在线播放|
一区二区三区四区精品|
激情懂色av一区av二区av|
欧美日韩激情小视频|
久久亚洲精品中文字幕冲田杏梨|
久久精品国产99国产精品澳门|
97av在线播放|
国产精品99久久久久久久久久久久|
欧美激情免费看|
欧美性猛交xxxx富婆|
亚洲国产成人爱av在线播放|
欧美性生活大片免费观看网址|
九九视频这里只有精品|
国产欧洲精品视频|
国产精品极品在线|
亚洲人成网站999久久久综合|
欧美性理论片在线观看片免费|
国产精品露脸av在线|
欧美一级bbbbb性bbbb喷潮片|
17婷婷久久www|
国产精品黄页免费高清在线观看|
中文日韩电影网站|
久久免费视频在线观看|
国产精品观看在线亚洲人成网|
成人黄色在线免费|
亚洲精品videossex少妇|
日韩在线视频观看|
国产午夜精品一区理论片飘花|
久久91亚洲精品中文字幕奶水|
综合网中文字幕|
亚洲男女自偷自拍图片另类|
亚洲影院色在线观看免费|
国产成人久久久精品一区|
国产精品香蕉av|
国产一区二区三区高清在线观看|
日韩hd视频在线观看|
日韩在线观看网站|
69av视频在线播放|
亚洲小视频在线|
日韩激情视频在线播放|
国产成一区二区|
色悠悠久久久久|
日韩久久免费视频|
亚洲免费电影在线观看|
亚洲精品久久久久久下一站|
亚洲欧美激情精品一区二区|
国产精品视频一区二区三区四|
亚洲国产日韩欧美在线99|
91精品久久久久久久久|
91色p视频在线|
亚洲在线一区二区|
欧美巨大黑人极品精男|
91精品视频播放|
中文字幕无线精品亚洲乱码一区|
久久久久久一区二区三区|
日本国产欧美一区二区三区|