Java组件.docx
《Java组件.docx》由会员分享,可在线阅读,更多相关《Java组件.docx(14页珍藏版)》请在冰豆网上搜索。
![Java组件.docx](https://file1.bdocx.com/fileroot1/2023-1/11/3288e879-238d-4304-b2b3-a30cf0cbd281/3288e879-238d-4304-b2b3-a30cf0cbd2811.gif)
Java组件
1.(问答)J2EE层次和组件
(1)这四层分别是:
运行在客户端机器上的客户端层(ClientTier)、运行在Web服务器上的Web层(WebTier)、运行在EJB服务器上的业务层(BusinessTier)和运行在EIS服务器上企业信息系统层(EnterpriseInformationSystemTier)其中Web层和业务层共同组成了三层J2EE应用的中间层,其他两层是客户端层和存储层或企业信息系统层。
(2)J2EE平台规范也定义了相应层的组件:
I.客户端层组件
应用客户端程序和浏览器是客户端层组件。
客户端层组件可以作为Web服务器的浏览器,也可以独立的应用程序,可以完成瘦客户机无法完成的任务。
II.Web层组件
JavaServlet和JavaServerPages(JSP)是Web层组件。
Web层可能包含某些JavaBean对象来处理用户输入,并把输入发送给运行在业务层上的EnterpriseBean来进行处理。
III.业务层组件
EnterpriseJavaBeans(EJB)是业务层组件。
业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的EJB进行处理。
IV.企业信息系统层组件
处理企业信息系统软件包括企业基础建设系统,大型机事务处理,数据库系统,和其它的遗留信息系统组成了企业信息系统层。
2.(选择、问答)三种企业级的Bean
(1)会话(Session)Beans:
表示与客户端程序的临时交互.当客户端程序执行完后,会话bean和相关数据就会消失.
(2)实体(Entity)Beans:
表示数据库的表中一行永久的记录.当客户端程序中止或服务器关闭时,就会有潜在的服务保证实体bean的数据得以保存.
(3)消息驱动(Message-driven)Beans:
结合了会话bean和JMS的消息监听器的特性,允许一个业务层组件异步接收JMS消息.
3.(问答)J2EE的组件/容器技术及EJB构件模型的特点。
EJB:
EnterpriseJavaBeans企业JavaBean组件JMS:
JavaMessageServiceJava消息服务
JNDI:
JavaNamingandDirectoryInterfaceJava命名目录接口JDBC:
数据库访问API
RMI:
RemoteMethodInvocation远程方法调用JTA:
JavaTransactionAPIJava事务API
JTS:
JavaTransactionServiceJava事务服务ObjectSerialization:
对象序列化
EJB分为三种:
SessionBean(会话BEAN)EntityBean(实体BEAN)MessageDriverBean(消息驱动BEAN)
SessionBean分为两种:
StatelessSessionBean(无状态会话Bean)StatefullSessionBean(有状态会话Bean)
EntityBean分为两种:
CMP:
ContainerManagerPersistence(容器管理持久性)BMP:
BeanManagerPersistence(Bean管理持久性)
(2)可重用的构件可伸缩性资源治理事务支持并发性治理安全性治理
4.(问答)EJB结构中的6种角色。
EJB组件开发者(EnterpriseBeanProvider)、应用组合者(ApplicationAssembler)、部署者(Deployer)、EJB服务器提供者(EJBServerProvider)、EJB容器提供者(EJBContainerProvider)、系统管理员(SystemAdministrator)
5.(编程)JNDI含义、JNDI对象绑定、重新绑定、删除JNDI对象绑定和查找JNDI对象的核心语句。
含义:
JNDI(JavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。
JNDI对象绑定:
stringtest=”welcome”;ctx.bind(“name”,test);
重新绑定:
stringstr=”welcome”;ctx.bind(“name”,test);
删除JNDI对象绑定:
ctx.unbind(“name”,test)
查找JNDI对象:
strings=(string)ctx.lookup(“name”)
6.(问答、选择)JavaRMI的含义及系统目标。
JavaRMI:
是一种基于Java的分布式编程模型,为Java程序提供远程访问服务接口。
目标:
简单方便,可以传递复杂java对象,简化了在多台计算机上的JAVA应用之间的通信。
7.(编程)RMI的开发步骤及核心代码
(1)定义远程接口
importjava.rmi.Remote;
importjava.rmi.RemoteException;
publicinterfaceI_Helloextendsjava.rmi.Remote//需要从Remote继承
{publicStringSayHello()throwsRemoteException;//需要抛出remote异常}
(2)编写一个实现该接口的类
importjava.io.PrintStream;
importjava.rmi.*;
importjava.rmi.server.UnicastRemoteObject;
publicclassHelloextendsUnicastRemoteObject//必须从UnicastRemoteObject继承implementsI_Hello{
publicHello()throwsRemoteException//抛出Remote异常的默认初始化方法{
}publicStringSayHello()//这个是实现I_Hello接口的方法
{return"Helloworld!
!
";}}
(3)编写在服务器上运行的主程序
importjava.rmi.*;
publicclassRMI_Server
{publicstaticvoidmain(String[]args)
{tryHellohello=newHello();//实例化要发布的类
Naming.rebind("RMI_Hello",hello);//绑定RMI名进行发布
System.out.println("===HelloserverReady===");
}catch(Exceptionexception){exception.printStackTrace();}}}
(4)将远程对象注册到RMI名称注册表
(5)编写客户端程序
importjava.rmi.*;
publicclassRMI_Client{publicstaticvoidmain(String[]args){try
{I_Hellohello=(I_Hello)Naming.lookup("RMI_Hello");//通过RMI名称查找远程对象System.out.println(hello.SayHello());//调用远程对象的方法}
catch(Exceptione){e.printStackTrace();}}}
(6)启动rmiRegistry并运行自己的远程服务器和客户程序
8.(问答、选择)什么是事务,事务有哪些特性,JTA为事务处理提供了哪些支持。
事务:
表示一个由一系列的相关操作组成的不可分割的逻辑单位。
特征:
原子性:
组成事物的操作要么是成功执行,要么是不执行。
一致性:
在操作过程中不会破坏数据的完整性,当事务失败后所有被该事务影响的数据都应该恢复到事务执行前的状态。
隔离性:
事务中的所有操作结果在任何时候都是相同的,不被其他事务所干扰。
持久性:
事务中各个操作结果都是必须持久存储,通常都将执行结果保存在存储设备介质上。
支持:
事务管理器、应用服务器、资源管理器、应用程序、通信资源管理器,每一层都通过一组事务API和相关的机制参与到分布式事务管理系统中。
9.(问答、选择)WebService开发用到的JavaAnnotation的含义及作用是什么。
Annotation提供一种机制,将程序的元素如:
类,方法,属性,参数,本地变量,包等数据联系起来。
这样编译器可以将元数据存储在Class文件中。
这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。
它采取的是类似于Interface的定义方式:
“@+annotation类型名称+(..逗号分割的name-value对...)”
@WebService:
声明当前类webservice的实现类、@WebMethod:
表示当前方法将发布为webservice方法
10.(简答题)有状态会话Bean与无状态会话有何区别,选择时有何依据,他们在运行时有何区别。
无状态(Stateless):
在不同方法调用间不保留任何状态;事务处理必须在一个方法中结束;通常资源占用较少;可以被共享(因为它是无状态的);无状态Bean不会"专门"保存客户端的状态----(需要强调“专门”是因为无状态会话Bean也会有成员变量,有成员变量就可以保存状态,但它不会专门为特定的客户端保存状态。
);你对ENTITYBEAN的数据操作不会被容器维护,当其他的用户要用ENTITYBEAN时,里面的数据不会被钝化到服务器的磁盘上。
也就是被保存起来。
有状态(Stateful):
可以在不同的方法调用间保持针对各个客户端的状态;与客户端的联系必需被维持;通常开销较大;有状态会话Bean会保存客户端的状态;你对ENTITYBEAN的数据操作会被容器维护起来,当其他的用户要用你正在使用的ENTITYBEAN时,里面的数据会被钝化到服务器的磁盘上,例如网上的购物车。
11.(简答题)WebService是什么?
其核心标准有哪些(XML、SOAP、WSDL、UDDI)?
WebService是一种新的Web应用程序分支,他是自包含、自描述、模块化的应用,可以发布、定位、通过Web调用。
可以执行从简单的请求到复杂商务处理的任何功能。
一旦部署以后,其他WebService应用程序可以发现并调用它部署的服务。
SOAP:
一种来用规范数据传输的协议(所有编程语言都可以根据这种规范来解析数据,所以就实现了跨语言)。
WSDL:
Web服务描述语言。
用来描述一项web服务,能让调用这项服务的客户清楚这是一项什么服务,怎么调用这项服务。
UDDI:
不仅是一个简单的搜索引擎,也包含了如何通过编程来和这些web服务的文档。
XML:
实现Web服务的异类基本结构以及在整个Web中实现Web服务,是实现支持简单数据描述格式的技术。
Web服务必须使用XML来完成三件事情:
基本的缆线格式、服务描述以及“服务发现”。
12.(编程题)Java利用JAX-WS开发Webservice的基本过程。
(1)创建WebService工程
(2)创建WebService类
(a)创建WebService类。
packagecom.myeclipseide.ws;
publicclassCalculator{publicintadd(inta,intb){return(a+b);}
publicintsubtract(inta,intb){return(a-b);}
publicintmultiply(inta,intb){return(a*b);}
publicintdivide(inta,intb){return(a/b);}}
(3)创建WebService
(a)把类制作成WebService。
(b)配置WebService。
(4)部署并测试WebService
(a)部署WebService。
(b)测试基于JAX-WS的WebService。
*
(5)创建WebService的客户端
(a)创建工程。
首先创建工程,工程的名字为:
WebServiceClientProject。
(b)创建WebService客户端。
接下来创建WebService客户端。
(c)编写测试类。
创建一个新类WebServiceClient,并选择生成main方法。
publicstaticvoidmain(String[]args){
CalculatorServiceservice=newCalculatorService();
CalculatorDelegatedelegate=service.getCalculatorPort();
System.out.println("1.3+7="+delegate.add(3,7));
System.out.println("2.12-2="+delegate.subtract(12,2));
System.out.println("3.9*9="+delegate.multiply(9,9));
System.out.println("4.40/2="+delegate.divide(40,2));}
(d)运行测试。
13.(编程)有状态SessionBean示例.
(1)创建EJB工程
(a)创建EJB工程。
(b)设置EJB工程的属性。
(c)添加类库。
要添加的类库是WebLogic自带的wlclient.jar,用于客户端程序。
(2)创建有状态会话bean
(a)创建包。
(b)创建有状态会话Bean。
(c)配置会话Bean。
(d)创建辅助类。
publicIdVerifier(){}
publicbooleanvalidate(Stringid){
booleanresult=true;
for(inti=0;iif(Character.isDigit(id.charAt(i))==false){result=false;}}returnresult;}
(e)在Remote接口中声明业务方法。
publicvoidinitialize(Stringperson)throwsBookException;
publicvoidinitialize(Stringperson,Stringid)throwsBookException;
publicvoidaddBook(Stringtitle);
publicvoidremoveBook(Stringtitle)throwsBookException;
publicListgetContents();
publicvoidremove();
(f)实现Bean类。
@Stateful(mappedName="cart")
StringcustomerName;
StringcustomerId;
Listcontents;
publicvoidinitialize(Stringperson)throwsBookException{
if(person==null){hrownewBookException("Nullpersonnotallowed.");
}else{customerName=person;}customerId="0";contents=newArrayList();
}publicvoidinitialize(Stringperson,Stringid)throwsBookException{
if(person==null){thrownewBookException("Nullpersonnotallowed.");}else{
customerName=person;}IdVerifieridChecker=newIdVerifier();
if(idChecker.validate(id)){customerId=id;
}else{thrownewBookException("Invalidid:
"+id);}
contents=newArrayList();}publicvoidaddBook(Stringtitle){
contents.add(title);}publicvoidremoveBook(Stringtitle)throwsBookException{
booleanresult=contents.remove(title);
if(result==false){thrownewBookException("\""+title+"\"notincart.");
}}publicListgetContents(){returncontents;}@Remove()publicvoidremove(){contents=null;}
(g)部署有状态会话bean。
(h)部署之后可以通过控制台查看部署情况。
(3)编写测试程序
Hashtableht=newHashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3:
//localhost:
7001");
Contextctx;try{ctx=newInitialContext(ht);
ctx.lookup("cart#cn.edu.neusoft.cart.CartRemote");
cart.initialize("Duked'Url","123");
cart.addBook("InfiniteJest");
cart.addBook("BelCanto");
cart.addBook("KafkaontheShore");
ListbookList=cart.getContents();
bookList=cart.getContents();
Iteratoriterator=bookList.iterator();
while(iterator.hasNext()){Stringtitle=(String)iterator.next();System.out.println(title);}cart.removeBook("Gravity'sRainbow");cart.remove();System.exit(0);}catch(BookExceptionex){System.err.println("CaughtaBookException:
"+ex.getMessage());
System.exit
(1);}catch(Exceptionex){System.err.println("Caughtanunexpectedexception!
");ex.printStackTrace();System.exit
(1);}
(b)运行测试
14.(选择)JPA的概念、优点、缺点。
JPA是JavapersistenceAPI的缩写,是Java应用通过持久提供者访问数据可的一组标准的API.JPA优点JPA是基于标准的。
越来越多的提供商期待在不久的将来提供JPA实施。
它提供了Hibernate和TopLink中最好的功能。
它可以和JavaSE和JavaEE应用程序一起使用,需要使用EJB容器,也可以不要。
其次:
JPA框架中支持大数据集、事务、并发等容器级事务,这使得JPA超越了简单持久化框架的局限,在企业应用发挥更大的作用。
JPA缺点:
由于非常新,JPA规范可能还需要进过重要发展才会变得很稳定。
JPA是一个规范而不是一个产品。
您需要提供商提供一个实施,才能获得这些基于标准的API的优势。
15题:
JPA配置文件persistence.xml各节点的含义
/*Name属性用于定义持久化单元的名字(name必选,空值也合法)transaction-type指定事务类型(可选)*/
//描述信息.(可选)
org.eclipse.persistence.jpa.PersistenceProvider
//provider表示JPA提供者javax.persistence.PersistenceProvider接口的一个实现类java:
/MySqlDS
/*Jta-data-source和non-jta-data-source用于分别指定持久化提供商使用的JTA和/或non-JTA数据源的全局JNDI名称(可选)*/
product.xml//声明orm.xml所在位置.(可选
../lib/model.jar
//以包含persistence.xml的jar文件为基准的相对路径,添加额外的jar文件.(可选)
com.domain.User
//显式列出实体类,在JavaSE环境中应该显式列出.(可选
//声明是否扫描jar文件中标注了@Enity类加入到上下文.若不扫描,则如
//JPA的属性厂商专有属性