JAVA编程:J2EE Server下的第一个EJB程序(图文进...
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。j2ee|server|程序翁驰原编按:为了匡助国际J2EE初学者,写了这篇文章,希冀可以对宽大Java喜好者有所匡助。
文章内容:
1、本文一步步图文并茂的教读者设置出一个尺度的J2EE开辟情况
2、启动cloudscape数据库的cloudview,并创建数据库
3、让读者开辟第一个EJB程序
4、设置EJB的datasource、部署使用程序等。
开辟情况:
开辟情况利用SUN的j2sdk1.4和j2sdkee1.3.1(注:关于j2sdk的版本,只需是1.3.1_02今后的都能够)。数据库:j2sdkee自带的cloudscape数据库。
第1、设置体系情况
确认你下载了j2sdk1.3.1_02以上的jdk版本和j2sdkee.1.3.1这些软件能够到sun的网站上往找http://java.sun.com今朝j2se的最高版本是j2sdk1.4。然后安装上述软件。我的安装目次是在H:盘。在安装之前假如你之前装有分歧版本的jdk,请先卸载,然后再安装。安装好今后,请设置classpath.windows下的设置以下:为了便利,以是到场年夜部分的路径。
setJAVA_HOME=h:j2sdk1.4
setJ2EE_HOME=h:j2sdkee1.3.1
setclasspath=h:j2sdk1.4jrelibjaws.jar;
h:j2sdk1.4libdt.jar;
h:j2sdk1.4lib ools.jar;
h:j2sdkee1.3.1libejb10deployment.jar;
h:j2sdkee1.3.1libj2ee.jar;
h:j2sdkee1.3.1libjhall.jar;
h:j2sdkee1.3.1libj2eetools.jar;
h:j2sdkee1.3.1lib;
下面是我的呆板上的目次,假如你安装在分歧的目次上的话,请自行改动
假如操纵体系是win98,要运转这个文件大概从头启动才能够失效.
如许能够顺遂的启动j2ee,在dos窗口下运转%j2ee_home%inj2ee-verbose命令假如顺遂的话,就会看到在DOS窗口中呈现J2EEserverstartupcomplete的提醒(以下图)。
<br>
翻开扫瞄器敲上天址http://localhost:8000/index.html能够看到首页就申明设置准确并乐成启动了J2EE使用服务器。(以下图)
<br>
第2、启动数据库
到场以下的路径
h:j2sdkee1.3.1libsystemcloudutil.jar;h:j2sdkee1.3.1libcloudscapecloudclient.jar;
h:j2sdkee1.3.1libcloudscapemijdbc.jar;h:j2sdkee1.3.1libsystemcloudscape.jar;
关头的成绩出在怎样修改cloudscape数据库的图形办理界面!你在命令行体例下敲进javaCOM.cloudscape.tools.cview极可能会呈现毛病。甚么缘故原由呢?第1、你要看看你的jdk版本对不合错误,是否是1.3.1_02以上大概1.4的。第2、关头中的关头,本来sun的j2ee里的cloudview是不克不及在他附带的cloudscape4.0.6下事情的(真不晓得sun在弄甚么东东:))
这里是在ibm网站上的一句原话:TheJava2SDK,EnterpriseEditionv.1.3.1includesCloudscape4.0.6butincludesaversionofCloudviewwhichwillnotfunctionwiththe4.0.6system。以是同道门就本人往下一个吧!这里还必要两个jar文件。下载地点是
cloudview.jar和jd.jar把这两个文件放在j2sdkee1.3.1下的cloudscape目次下,我这里还必要加两个classpaht路径
h:j2sdkee1.3.1cloudscapecloudview406.jar;
h:j2sdkee1.3.1cloudscapejh.jar
OK!一同半途而废!如今看看怎样启动cloudview,在命令行下键进
java-Dcloudscape.system.home=%j2ee_home%cloudscapeCOM.cloudscape.tools.cview
这里-Dcloudscape.system.home是设置数据库寄存的路径,这个路径能够在创建数据库的时分改动
%j2ee_home%cloudscape是cloudscape的默许事情目次
也能够将-Dcloudscape.system.home后的路径往失落,不外要记着,要将数据库建在改路径下,不然j2eeserver找不到它!好了,接上去你会发明一个图形界面。用file――>new菜单来新建一个数据库(以下图)
<br>
良多数据库的办理形式都差未几,好比cloudview和sqlserver、db2的把持中央利用办法基础不异。在弹出的菜单中输出你所要创立的数据库名。在这个例子里输出ExampleDB。按directory按钮选择目次在j2ee的安装目次下的cloudscape目次(以下图)
<br>
这时候在面板的左面就会发明有了table、view等列表。假如下次启动时分左面的面板不见了,能够选view菜单下的detailsonly后再选一次。然后在Table上点右键选择new子菜单下的table,新建好了一个表后能够在右侧的框的name中间的框内修正表名,这里表名设成employee。在columns这一栏能够按+号新增一个列。也能够选择所要删除的列后按-号。
新建两个列,一个是employeeID、一个是name范例和字段长度以下图所示。选择Data标签能够新增数据,你能够输出一些测试数据。
<br>
鼠标右键选择右边窗口的Keys在弹出的窗口里选择new――>key。在右侧的窗口修正名字为employeeKey,范例选择primaryKey,然后点选EmployeeID字段(以下图),按上面的OK按钮断定,最初按OK按钮封闭cloudview窗口。
<br>
接上去启动j2ee自带的cloudscape数据库,这个也复杂
在命令行体例下到h:j2sdkee1.3.1in目次下打cloudscape-start能够启动cloudscape数据库以下图
<br>
第3、接上去入手下手写三个典范程序
分离是EmployeeHome.java、EmployeeBean.java、Employee.java。把这三个程序一同放在一个叫first的目次里
(1)EmployeeHome.java
packageemployee.com;
importjava.util.Collection;
importjava.rmi.RemoteException;
importjavax.ejb.*;
publicinterfaceEmployeeHomeextendsjavax.ejb.EJBHome{
publicEmployeecreate(StringemployeeID)throwsDuplicateKeyException,javax.ejb.CreateException,java.rmi.RemoteException;
publicEmployeefindByPrimaryKey(StringemployeeID)throwsObjectNotFoundException,FinderException,RemoteException;
}
这个文件完成了Home接口。Home接口必需恪守以下的划定:(1)范例必需为interface。(2)必需是public。(3)最少要声明一个create()大概finder办法个中的一个。(4)create和finder办法必需包括java.rmi.RemoteException非常,finder办法必需别的包括java.ejb.FinderException非常。
客户端使用Homeinterface获得EJBObject的远端对象参考(Remoteinterface)甚么是Remoteinterface呢?看上去的程序
(2)Employee.java
packageemployee.com;
importjavax.ejb.EJBObject;
importjava.rmi.RemoteException;
publicinterfaceEmployeeextendsjavax.ejb.EJBObject{
publicStringgetName()throwsjava.rmi.RemoteException;
}
这个文件完成了Remote接口。Remote接口必需恪守以下的划定:(1)范例必需为interface。(2)必需是public。(3)必需间接大概直接承继java.ejb.EJBObject。(4)声明的办法必需和Beanclass里的办法一样。
(3)EmployeeBean.java
packageemployee.com;
importjava.util.*;
importjavax.ejb.*;
publicclassEmployeeBeanimplementsEntityBean{
publicStringemployeeID;
publicStringname;
privateEntityContextcontext;
publicvoidsetEntityContext(EntityContextcontext){
this.context=context;
}
publicvoidunsetEntityContext(){
context=null;
}
publicStringejbCreate(StringemployeeID)throwsDuplicateKeyException,CreateException{
this.employeeID=employeeID;
this.name="";
returnnull;
}
publicvoidejbPostCreate(StringemployeeID){
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidejbActivate(){
employeeID=(String)context.getPrimaryKey();
}
publicvoidejbPassivate(){
employeeID=null;
name=null;
}
publicvoidejbRemove(){
}
publicvoidejbLoad(){
}
publicvoidejbStore(){
}
}
以上是一个EntityBean和一个远程接口和一个Home接口。
上面写一个JavaBean来挪用EntityBean里的办法
EmployeeOut.java
packageemployee.beans;
importemployee.com.*;
importjava.util.*;
importjavax.naming.*;
importjavax.rmi.PortableRemoteObject;
importjavax.ejb.*;
importjava.sql.*;
publicclassEmployeeOut{
privateStringid="";
privateStringname="";
EmployeeHomeemployeeHome=null;
publicEmployeeOut()throwsSQLException
{
try{
Contextinitial=newInitialContext();
Objectobjref=initial.lookup("ejb/EmployeeEntityBean");
employeeHome=(EmployeeHome)PortableRemoteObject.narrow(objref,EmployeeHome.class);
}catch(Exceptionex){
thrownewSQLException(ex.toString());
}
}
publicStringgetName(Stringid)throwsException
{
try
{
Employeeemployee=employeeHome.findByPrimaryKey(id);
name=employee.getName();
returnname;
}
catch(ObjectNotFoundExceptionnotfoundex){
return"notfound";
}
catch(Exceptionex){
throwex;
}
}
}
在dos体例下,改换事情目次至first目次,然后实行以下的编译指令:
javac-d.*.java(注d前面和*后面都有一个空格)
就能够在first下天生一个com目次和一个beans目次内里有编译好了的.class文件。
接上去写一个jsp文件,将jsp文件放在first目次下,经由过程挪用JavaBean里的办法来简便挪用EntityBean里的办法。
login.jsp
<%@pagelanguage="java"import="java.sql.*,employee.beans.*"contentType="text/html;charset=GB2312"%>
<jsp:useBeanid="employee"scope="page"class="employee.beans.EmployeeOut">
</jsp:useBean>
<%
Stringname="";
Stringid=request.getParameter("id");
if(id==null)
{
id="";
}
if(!id.equals(""))
{
name=employee.getName(id);
}
%>
<html>
<bodybgcolor="#cccccc">
<br><br><br><br>
<formname="f1"action="login.jsp"method="post">
<tablewidth=60%align="center">
<tr><td>编号:<inputname=idvalue=""size=15></td>
<td>姓名:<%=name%></td></tr>
<tr><td><br><br></td></tr>
<tr><tdclospan=2align="center"><inputtype="submit"name="查询姓名"></td></tr>
</table>
</form>
</body>
</html>
第4、设置datasource部署J2EE
用文本编纂工具翻开%J2ee_home%configesource.properties文件,找到jdbcDataSource.4.name=jdbc/DB2
jdbcDataSource.4.url=jdbc:cloudscape:rmi:CloudscapeDB;create=true
这行,在这行上面加上
jdbcDataSource.5.name=jdbc/ExampleDB
jdbcDataSource.5.url=jdbc:cloudscape:rmi:ExampleDB;create=true
各个分歧的J2ee版本的Datasource设置文件纷歧样,之前的版本有的是在default.properties文件下设置的。
接上去用J2ee自带的部署工具部署使用程序,在dos窗口在键进%j2ee_home%indeploytool翻开deploytool工具
选择File---->New---->Application如图选择使用程序寄存的地点和名字,名字以ear开头。接上去输出显现名后按OK封闭小窗口。在右边的Frame里能够看到employeeDisName的标记。(以下图)
<br>
用鼠标选上employeeDISName,选择File---->newEnterpriseBean,第一个屏幕是一些先容,间接按Next,在第上面的屏幕如图,填写JARDisplayName为employeeJAR。
<br>
在Contents面板点选中间的Edit按钮,在弹出的窗口中的StartingDirectory里选择first目次,用鼠标按住Ctrl键一同选择鄙人面的AvaliableFiles里选择first下的employee下的com目次里的三个.class文件后,按Add按钮。这时候在最上面的ContentsofemployeeJAR里就会呈现这三个类文件。以下图
<br>
按OK键封闭窗口后在Contents面板里能够看到employee这个标记。按下next
在BeanType里选择Entity,在EnterpriseBeanClass里选择你的BeanClassEmployeeBean,在RemoteHomeInterface里选择EmployeeHome,在RemoteInterfaze里选择Employee如图后,按下Next。
<br>
在PrisistenceManagement里选择Containermanagedprisistence(1.0),在FieldstobePersisted里把两个字段都选上,在PrimaryKeyClass里改成java.lang.String,在PrimaryKeyFieldName里选上employeeID,以下图所示,按Next。
<br>
在接上去的界面都按Next按钮一向到ResourceReferences面板,点击右侧的Add按钮在CodedName和上面的JNDIName中填写jdbc/ExampleDB,以下图所示。按finish按钮停止。
<br>
以下图选择窗口右边的EmployeeBean,按下右边EntityTab页次的DeploymentSettings按钮。
<br>
在DeploymentSettings窗口作废DatabaseTable面板里的Createtableondeploy和DeleteTableonundeploy。按下DatabaseSettings在弹出的窗口里的DatabaseJNDIName里填写jdbc/ExampleDB后按OK前往。按下GenerateSQLNow按钮,天生SQL语句,乐成的话体系会给出一个提醒,如许就天生好了sql语句,拔取右边的method里的各个办法能够看到在右侧SQLQuery里呈现响应的SQL语句。(以下图)
<br>
将一切SQL语句里的EmployeeBeanTable修正成employee后按下OK封闭窗口。
点选右边的employeeDISName,在右侧选择JNDIName标签,在Application下的JNDI标签中填写ejb/EmployeeEntityBean,这个名字要和EmployeeOut程序里的initial.lookup("ejb/EmployeeEntityBean")一样。(以下图)
<br>
接上去增加WebComponent
选择File---->newWebComponent,第一个窗口间接next,进进WARFile窗口,在WARDisplayName中输出一个显现名:employeeWEB。(以下图)
<br>
点击Content下的Edit按钮,弹出EditContentsofemployeeWEB的窗口里,选择first下employee下beans目次下的EmployeeOut.class文件和first目次下的login.jsp文件后点击Add按钮(以下图),按OK封闭窗口。
<br>
在WARFile窗口里按Next按钮
在ChooseComponentType窗口里选择jsp按next到ComponentGeneralProperites选择JspFileName为login.jsp,WebComponentName里输出EmployeeWEB。后按Finish(以下图)
<br>
点选右边窗口的employeeDISName,拔取右侧的WebContext的面板。在ContextRoot里输出employee,这相称于假造目次名。选择Tools----->DeployApplication,在Introduction窗口选择objecttoDeploy里为employeDISName,TargetServer为localhost。按Next后反省JNDI有无写对,假如准确,按Next。确认ContextRoot后按Next。最初按Finish入手下手部署使用程序。部署乐成后呈现以下图所示的信息。
<br>
然后翻开IE输出http://localhost:8000/employee/login.jsp就能够看到数据库的用户的姓名了。
注重事项:假如运转的时分提醒找不到表大概字段的话,请把SQL语句里的表名和字段名改成年夜写的。由于cloudview创建好数据库后默许是年夜写的。
还得说上一点,就java本质而言,是面相对象的,但是你有没有发现,java也不全是,比如说基本类型,int,那他就是整型而不是对象,转换类型是还得借助包装类。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 Java 编程语言的风格十分接近C、C++语言。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
页:
[1]