|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你对java乐观有点盲目。java的关键就是在服务器上表现优异,而且它提供了整个开发所需要的工具。应该是说,看哪天。net有没有机会赶上java。客户经由过程由EJB容器供应的远程和当地接口举行通讯
•会见把持表是用于包管平安其受权能会见特定功效的用户组或团体表。
•耐久性是指对象形态永世地存储在数据存储器中,诸如数据库。
•企业beans的范例:
C实体(Entity)beans
实体beans撑持多个会话和多个客户,可分为:
Bean-办理Bean耐久性
Container-办理容器的耐久性
C会话(Session)beans
会话beans实行营业义务时没有存储机制,可分为:
有形态会话(Statefulsession)bean
无形态会话(Statelesssession)bean
本例以我所学的内容为例:
Earnestbank请求开辟一个美圆和卢比转换的盘算器构件。申明利用EJB来创立此构件是有事理的并申明必需写的代码。
一.辨认机制
二.断定企业bean的范例
三.编写远程接口代码
四.编写当地接口代码
五.编写企业bean类代码
六.编译源文件
一.辨认机制
EJB是符合的手艺,由于:
EJB构件主动处置体系级服务
企业bean只完成营业逻辑
二.断定企业bean的范例
银行使用的盘算器构件不请求耐久的存储机制
泉币的等值转换,这类值不在其他中央利用
因而,最合适于创立无形态的会话bean
三.编写远程接口代码
远程接口界说企业bean的一切营业办法,不包含体系级的操纵办法。这些营业办法在EJB类中完成。
写远程接口的步骤:
必要javax.ejb.EJBObject和java.rmi.RemoteException接口
创建由扩大EJBObject接口的远程接口
在EJB类中完成一切在远程接口界说的营业办法。
依据本成绩的报告,可写出以下远程接口程序:
importjavax.ejb.EJBObject;
importjava.rmi.RemoteException;
publicinterfaceCalculatorextendsEJBObject
{publicdoubledollarToRs(doubledollars)
throwsRemoteException;
}
四.编写当地接口代码
当地接口代码界说了同意EJB客户创建且查找EJB构件的办法。编写当地接口的步骤以下:
必要java.io.Serializable、java.rmi.RemoteException、javax.ejb.CreateException、javax.ejb.EJBHome接口
创建由扩大EJBHome接口的当地接口
界说create()办法往创建特定的EJB类的一个实例,该办法的前往范例必需是EJB的远程接口对象。
importjava.io.Serializable;
importjava.rmi.RemoteException;
importjavax.ejb.CreateException;
importjavax.ejb.EJBHome;
publicinterfaceCalculatorHomeextendsEJBHome
{Calculatorcreate()throwsRemoteException,CreateException;}
五.编写企业bean类代码
完成一切在远程接口中申明的营业办法。编写EJB类的步骤:
必要java.rmi.RemoteException、javax.ejb.SessionBean、javax.ejb.SessionContext接口
创建EJB类完成SessionBean接口
完成在远程接口中界说的营业办法。
编写ejbCreate()、ejbRemove()、ejbActivate()、ejbPassivate()、setSessionContext()和对缺省的机关器办法的完成。
注重:EJB类中完成的办法名及其特性必需和远程办法中声明的相分歧。
依据成绩的报告和前边的形貌,可创立以下EJB代码程序。
EJB代码
importjava.rmi.RemoteException;
importjavax.ejb.SessionBean;
importjavax.ejb.SessionContext;
publicclassCalculatorEJBimplementsSessionBean
{publicdoubledollarToRs(doubledollars)
{returndollars*47.20;}
publicCalculatorEJB(){}
publicvoidejbCreate(){}
publicvoidejbRemove(){}
publicvoidejbActivate(){}
publicvoidejbPassivate(){}
publicvoidsetSessionContext(SessionContextsc){}
}
六.编译源文件
以下为原代码
远程接口程序:
/*
@InberGong
Date2004/9/8
Filename:Calculator.java
*/
importjavax.ejb.EJBObject;
importjava.rmi.RemoteException;
publicinterfaceCalculatorextendsEJBObject
{
publicdoubledollarToRs(doubledollars)throwsRemoteException;
publicdoublersToDollar(doublers)throwsRemoteException;
publicdoublermbToDollar(doublermb)throwsRemoteException;
publicdoubledollarToRMB(doubledollars)throwsRemoteException;
}
当地接口程序以下:
/*
@InberGong
Date2004/9/8
Filename:CalculatorHome.java
*/
importjava.io.*;
importjava.rmi.*;
importjavax.ejb.*;
publicinterfaceCalculatorHomeextendsEJBHome
{
Calculatorcreate()throwsCreateException,RemoteException;
}
企业bean类代码
/*
@InberGong
Date2004/9/8
Filename:CalculatorEJB.java
*/
importjava.rmi.*;
importjavax.ejb.*;
publicclassCalculatorEJBimplementsSessionBean
{
publicdoubledollarToRs(doubledollars)throwsRemoteException
{
returndollars*47.20;
}
publicdoublersToDollar(doublers)throwsRemoteException
{
returnrs/47.20;
}
publicdoublermbToDollar(doublermb)throwsRemoteException{
returnrmb/9;
}
publicdoubledollarToRMB(doubledollars)throwsRemoteException
{
returndollars*9;
}
publicvoidejbCreate()throwsCreateException,RemoteException
{
System.out.println("ejbCreate()");
}
publicCalculatorEJB()
{
System.out.println("CalculatorEJB()");
}
publicvoidsetSessionContext(SessionContextsc)
{
System.out.println("setSessionContext()");
}
publicvoidejbRemove()
{
System.out.println("ejbRemove()");
}
publicvoidejbActivate(){}
publicvoidejbPassivate(){}
}
最初是客户端程序
/*
@InberGong
Date2004/9/8
Filename:CalculatorClient.java
*/
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.naming.*;
importjavax.rmi.*;
publicclassCalculatorClientextendsJFrame
{
publicstaticintw=500;
publicstaticinth=95;
publicstaticStringstr="EarnestBankWelcomesYou";
Containerc;
JLabell,result;
JTextFieldt;
JButtonb;
publicstaticStringvalue;
publicstaticdoubledbl;
publicstaticdoubleamt;
publicCalculatorClient()
{
super(str);
c=getContentPane();
c.setLayout(newGridLayout(2,2,2,2));
l=newJLabel("EntertheamountinDollars($)");
c.add(l);
t=newJTextField(10);
c.add(t);
b=newJButton("Calculate");
c.add(b);
result=newJLabel();
c.add(result);
b.addActionListener(newaddEvent());
setSize(w,h);
show();
}
classaddEventimplementsActionListener
{
publicvoidactionPerformed(ActionEvente)
{
value=t.getText();
dbl=Double.parseDouble(value);
try{
Contextic=newInitialContext();
Objectobj=ic.lookup("CalculatorJNDI");//JNDIname
CalculatorHomehome=(CalculatorHome)PortableRemoteObject.narrow(obj,CalculatorHome.class);
Calculatorcalc=home.create();
amt=calc.dollarToRs(dbl);
calc.remove();
Calculatorcalc2=home.create();
if(calc2.isIdentical(calc))
{
System.out.println("两个桩实例指向统一个远程HOME实例!");
}
else
{System.out.println("没有指向统一个远程HOME实例!");
}
result.setText("Result(RS.)"+String.valueOf(amt));
}
catch(Exceptiont)
{
System.out.println(t);
}
}
}
publicstaticvoidmain(Stringargs[])
{
newCalculatorClient();
}
}
入手下手设置
这里用的是j2ee1.3
运转j2ee
startj2ee-verbose
deploytool
new->application
applicatonfilename:E:public_htmlpublic_javaap2ap2.ear
applicatondisplyname:ap2.ear
new->EterpriseBean
Contents内里到场
Calculator.class CalculatorHome.class CalculatorEJB.class 三个文件
->NEXT
呈现下对话框:NewEnterpriseBeanWizard-General
在BeanType当选择Session->Stateless
在EnterpriseBeanCalss当选择CalculatorEJB
在当地接口当选择CalculatorHome在RemoteInterface当选择Calculator
->NEXT->NEXT->NEXT->NEXT->NEXT->NEXT->NEXT->Finish
点左视窗中的使用ap2后 ->Tools->Deploy..->选中复框ReturnClientJar
->NEXT
呈现 Deployap2-JNDINames对话框
在Application的JNDIName中输出客户端程序中要查找的JNDI名:CalculatorJNDI
->NEXT->Finished........->ok
在 dos窗口中进进到程序的根目次到场jar包
setclasspath=%classpath%;ap2Client.jar
javaCalculatorClient
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。 |
|