﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-流浪域</title><link>http://www.blogjava.net/hanbihui/</link><description>一个人去流浪</description><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 15:21:17 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 15:21:17 GMT</pubDate><ttl>60</ttl><item><title>一个小游戏~</title><link>http://www.blogjava.net/hanbihui/archive/2007/09/24/147917.html</link><dc:creator>流浪韩</dc:creator><author>流浪韩</author><pubDate>Mon, 24 Sep 2007 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/hanbihui/archive/2007/09/24/147917.html</guid><wfw:comment>http://www.blogjava.net/hanbihui/comments/147917.html</wfw:comment><comments>http://www.blogjava.net/hanbihui/archive/2007/09/24/147917.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hanbihui/comments/commentRss/147917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hanbihui/services/trackbacks/147917.html</trackback:ping><description><![CDATA[<p>黑白棋1.0</p>
<p>手机游戏。。。。（用Canvas做的)</p>
<p>初步实现人人对战和人机对战</p>
<p>打开下面的Mofile网址提取文件(Chess.jar)</p>
<p><a href="http://pickup.mofile.com/2132108164738157">http://pickup.mofile.com/2132108164738157</a></p>
<p>做的AI比较简单~<br />
</p>
<p>不过如果不小心就很危险了</p>
<img src ="http://www.blogjava.net/hanbihui/aggbug/147917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hanbihui/" target="_blank">流浪韩</a> 2007-09-24 22:57 <a href="http://www.blogjava.net/hanbihui/archive/2007/09/24/147917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更新一下链接</title><link>http://www.blogjava.net/hanbihui/archive/2007/09/21/147215.html</link><dc:creator>流浪韩</dc:creator><author>流浪韩</author><pubDate>Fri, 21 Sep 2007 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/hanbihui/archive/2007/09/21/147215.html</guid><wfw:comment>http://www.blogjava.net/hanbihui/comments/147215.html</wfw:comment><comments>http://www.blogjava.net/hanbihui/archive/2007/09/21/147215.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hanbihui/comments/commentRss/147215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hanbihui/services/trackbacks/147215.html</trackback:ping><description><![CDATA[更新一下链接,累死了
<img src ="http://www.blogjava.net/hanbihui/aggbug/147215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hanbihui/" target="_blank">流浪韩</a> 2007-09-21 21:43 <a href="http://www.blogjava.net/hanbihui/archive/2007/09/21/147215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE全面简介[转]</title><link>http://www.blogjava.net/hanbihui/archive/2007/09/21/147038.html</link><dc:creator>流浪韩</dc:creator><author>流浪韩</author><pubDate>Fri, 21 Sep 2007 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/hanbihui/archive/2007/09/21/147038.html</guid><wfw:comment>http://www.blogjava.net/hanbihui/comments/147038.html</wfw:comment><comments>http://www.blogjava.net/hanbihui/archive/2007/09/21/147038.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/hanbihui/comments/commentRss/147038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hanbihui/services/trackbacks/147038.html</trackback:ping><description><![CDATA[<p align="center">J2EE全面简介[转]<br />
</p>
<p><br />
&nbsp;&nbsp;&nbsp; J2EE（Java 2 Enterprise Edition）是建立在Java 2平台上的企业级应用的解决方案。J2EE技术的基础便是Java 2平台，不但有J2SE平台的所有功能，同时还提供了对EJB，Servlet，JSP，XML等技术的全面支持，其最终目标是成为一个支持企业级应用开发的体系结构，简化企业解决方案的开发，部署和管理等复杂问题。事实上，J2EE已经成为企业级开发的工业标准和首选平台。 <br />
　　J2EE并非一个产品，而是一系列的标准。市场上可以看到很多实现了J2EE的产品，如BEA WebLogic，IBM WebSphere以及开源的JBOSs等等。</p>
<p>&nbsp;&nbsp;&nbsp; J2EE，是sun公司提出的一个标准，符合这个标准的产品叫"实现"；其中你下载的sun公司的j2ee开发包中就有一个这样的"实现"，而jBOss，weblogic，websphere都是j2ee标准的一个"实现"。由于jboss，weblogic，websphere自身带有j2ee的API，所以可以不使用sun的j2ee实现。</p>
<p>&nbsp;</p>
<p><strong>一. J2EE的概念</strong></p>
<p>&nbsp;&nbsp;&nbsp; 目前，Java 2平台有3个版本，它们是适用于小型设备和智能卡的Java 2平台MiCRo版（Java 2 PlatfORM Micro EDItion，J2ME）、适用于桌面系统的Java 2平台标准版（Java 2 Platform STandard Edition，J2SE）、适用于创建服务器应用程序和服务的Java2平台企业版（Java 2 Platform Enterprise Edition，J2EE）。</p>
<p>&nbsp;&nbsp;&nbsp; J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版，J2EE不仅巩固了标准版中的许多优点，例如"编写一次、随处运行"的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等，同时还提供了对 EJB（Enterprise JavaBeans）、Java Servlets API、JSP（Java Server PagES）以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。</p>
<p>&nbsp;&nbsp;&nbsp; J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台，J2EE降低了开发多层应用的费用和复杂性，同时提供对现有应用程序集成强有力支持，完全支持Enterprise JavaBeans，有良好的向导支持打包和部署应用，添加目录支持，增强了安全机制，提高了性能。</p>
<p>&nbsp;</p>
<p><strong>二. J2EE的优势</strong></p>
<p>&nbsp;&nbsp;&nbsp; J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:保留现存的IT资产: 由于企业必须适应新的商业需求，利用已有的企业信息系统方面的投资，而不是重新制定全盘方案就变得很重要。这样，一个以渐进的（而不是激进的，全盘否定的）方式建立在已有系统之上的服务器端平台机制是公司所需求的。J2EE架构可以充分利用用户原有的投资，如一些公司使用的BEA Tuxedo、IBM CICS, IBM Encina,、Inprise VisiBroker 以及NetSCApe Application Server。这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。每一个供应商都对现有的客户提供了不用废弃已有投资，进入可移植的J2EE领域的升级途径。由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行，现有的操作系统和硬件也能被保留使用。</p>
<p>&nbsp;&nbsp;&nbsp; 高效的开发: J2EE允许公司把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。这样开发人员可以集中精力在如何创建商业逻辑上，相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间件服务:</p>
<p>&nbsp;&nbsp;&nbsp; 状态管理服务 -- 让开发人员写更少的代码，不用关心如何管理状态，这样能够更快地完成程序开发。<br />
&nbsp;&nbsp;&nbsp; 持续性服务 -- 让开发人员不用对数据访问逻辑进行编码就能编写应用程序，能生成更轻巧，与数据库无关的应用程序，这种应用程序更易于开发与维护。<br />
&nbsp;&nbsp;&nbsp; 分布式共享数据对象CACHE服务 -- 让开发人员编制高性能的系统，极大提高整体部署的伸缩性。<br />
&nbsp;&nbsp;&nbsp; 支持异构环境: J2EE能够开发部署在异构环境中的可移植程序。基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。这在典型的异构企业计算环境中是十分关键的。J2EE标准也允许客户订购与J2EE兼容的第三方的现成的组件，把他们部署到异构环境中，节省了由自己制订整个方案所需的费用。<br />
&nbsp;&nbsp;&nbsp; 可伸缩性: 企业必须要选择一种服务器端平台，这种平台应能提供极佳的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于J2EE平台的应用程序可被部署到各种操作系统上。例如可被部署到高端UNIX与大型机系统，这种系统单机可支持64至256个处理器。（这是NT服务器所望尘莫及的）J2EE领域的供应商提供了更为广泛的负载平衡策略。能消除系统中的瓶颈，允许多台服务器集成部署。这种部署可达数千个处理器，实现可高度伸缩的系统，满足未来商业应用的需要。<br />
&nbsp;&nbsp;&nbsp; 稳定的可用性: 一个服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要。因为INTERNET是全球化的、无处不在的，即使在夜间按计划停机也可能造成严重损失。若是意外停机，那会有灾难性后果。J2EE部署到可靠的操作环境中，他们支持长期的可用性。一些J2EE部署在WINDOWS环境中，客户也可选择健壮性能更好的操作系统如Sun Solaris、IBM OS/390。最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。这是实时性很强商业系统理想的选择。</p>
<p>&nbsp;</p>
<p><strong>三. J2EE 的四层模型</strong></p>
<p>&nbsp;&nbsp;&nbsp; J2EE使用多层的分布式应用模型，应用逻辑按功能划分为组件，各个应用组件根据他们所在的层分布在不同的机器上。事实上，sun设计J2EE的初衷正是为了解决两层模式(Client/server)的弊端，在传统模式中，客户端担当了过多的角色而显得臃肿，在这种模式中，第一次部署的时候比较容易，但难于升级或改进，可伸展性也不理想，而且经常基于某种专有的协议――通常是某种数据库协议。它使得重用业务逻辑和界面逻辑非常困难。现在J2EE 的多层企业级应用模型将两层化模型中的不同层面切分成许多层。一个多层化应用能够为不同的每种服务提供一个独立的层，以下是 J2EE 典型的四层结构:</p>
<p>&nbsp;&nbsp;&nbsp; 运行在客户端机器上的客户层组件<br />
&nbsp;&nbsp;&nbsp; 运行在J2EE服务器上的Web层组件<br />
&nbsp;&nbsp;&nbsp; 运行在J2EE服务器上的业务逻辑层组件<br />
&nbsp;&nbsp;&nbsp; 运行在EIS服务器上的企业信息系统(Enterprise Information System)层软件</p>
<p>&nbsp;&nbsp;&nbsp; J2EE应用程序组件<br />
&nbsp;&nbsp;&nbsp; J2EE应用程序是由组件构成的.J2EE组件是具有独立功能的软件单元，它们通过相关的类和文件组装成J2EE应用程序，并与其他组件交互。J2EE说明书中定义了以下的J2EE组件:<br />
&nbsp;&nbsp;&nbsp; 应用客户端程序和Applets是客户层组件.<br />
&nbsp;&nbsp;&nbsp; Java Servlet和JavAServer Pages(JSP)是web层组件.<br />
&nbsp;&nbsp;&nbsp; Enterprise JavaBeans(EJB)是业务层组件.</p>
<p>&nbsp;&nbsp;&nbsp; 客户层组件<br />
&nbsp;&nbsp;&nbsp; J2EE应用程序可以是基于web方式的,也可以是基于传统方式的.<br />
&nbsp;&nbsp;&nbsp; web 层组件J2EE web层组件可以是JSP 页面或Servlets.按照J2EE规范，静态的HTML页面和Applets不算是web层组件。</p>
<p>&nbsp;&nbsp;&nbsp; 正如下图所示的客户层那样，web层可能包含某些 JavaBean 对象来处理用户输入，并把<br />
输入发送给运行在业务层上的enterprise bean 来进行处理。</p>
<p>&nbsp;&nbsp;&nbsp; 业务层组件<br />
&nbsp;&nbsp;&nbsp; 业务层代码的逻辑用来满足银行，零售，金融等特殊商务领域的需要,由运行在业务层上的enterprise bean 进行处理. 下图表明了一个enterprise bean 是如何从客户端程序接收数据，进行处理(如果必要的话), 并发送到EIS 层储存的，这个过程也可以逆向进行。</p>
<p>&nbsp;&nbsp;&nbsp; 有三种企业级的bean: 会话(session) beans, 实体(entity) beans, 和消息驱动(mesSAge-driven) beans. 会话bean 表示与客户端程序的临时交互. 当客户端程序执行完后, 会话bean 和相关数据就会消失. 相反, 实体bean 表示数据库的表中一行永久的记录. 当客户端程序中止或服务器关闭时, 就会有潜在的服务保证实体bean 的数据得以保存.消息驱动 bean 结合了会话bean 和 JMS的消息监听器的特性, 允许一个业务层组件异步接收JMS 消息.</p>
<p>&nbsp;&nbsp;&nbsp; 企业信息系统层<br />
&nbsp;&nbsp;&nbsp; 企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划 (ERP), 大型机事务处理, 数据库系统,和其它的遗留信息系统. 例如，J2EE 应用组件可能为了数据库连接需要访问企业信息系统</p>
<p>&nbsp;&nbsp;&nbsp; 我们就J2EE的各种组件、服务和API，进行更加详细的阐述，看看在开发不同类型的企业级应用时，根据各自需求和目标的不同，应当如何灵活使用并组合不同的组件和服务。</p>
<p>&#183; Servlet</p>
<p>&nbsp;&nbsp;&nbsp; Servlet是Java平台上的CGI技术。Servlet在服务器端运行，动态地生成Web页面。与传统的CGI和许多其它类似CGI的技术相比，Java Servlet具有更高的效率并更容易使用。对于Servlet，重复的请求不会导致同一程序的多次转载，它是依靠线程的方式来支持并发访问的。</p>
<p>&#183; JSP</p>
<p>&nbsp;&nbsp;&nbsp; JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看，非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离，Web页面制作的任务可以比较方便地划分给页面设计人员和程序员，并方便地通过JSP来合成。在运行时态，JSP将会被首先转换成Servlet，并以Servlet的形态编译运行，因此它的效率和功能与Servlet相比没有差别，一样具有很高的效率。</p>
<p>&#183; EJB</p>
<p>&nbsp;&nbsp;&nbsp; EJB定义了一组可重用的组件：Enterprise Beans。开发人员可以利用这些组件，像搭积木一样建立分布式应用。在装配组件时，所有的Enterprise Beans都需要配置到EJB服务器(一般的Weblogic、WebSphere等J2EE应用服务器都是EJB服务器)中。EJB服务器作为容器和低层平台的桥梁管理着EJB容器，并向该容器提供访问系统服务的能力。所有的EJB实例都运行在EJB容器中。EJB容器提供了系统级的服务，控制了EJB的生命周期。EJB容器为它的开发人员代管了诸如安全性、远程连接、生命周期管理及事务管理等技术环节，简化了商业逻辑的开发。EJB中定义了三种Enterprise Beans：</p>
<p>◆ Session Beans</p>
<p>◆ Entity Beans</p>
<p>◆ Message-driven Beans</p>
<p>&#183; JDBC</p>
<p>&nbsp;&nbsp;&nbsp; JDBC(Java database ConnECtivity，java数据库连接)API是一个标准SQL(STructured Query Language，结构化查询语言)数据库访问接口，它使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。Java中的JDBC相当与Microsoft平台中的ODBC(Open Database Connectivity)。</p>
<p>&#183; JMS</p>
<p>&nbsp;&nbsp;&nbsp; JMS(Java Message Service，Java消息服务)是一组Java应用接口，它提供创建、发送、接收、读取消息的服务。JMS API定义了一组公共的应用程序接口和相应语法，使得Java应用能够和各种消息中间件进行通信，这些消息中间件包括IBM MQ-Series、Microsoft MSMQ及纯Java的SoniCMQ。通过使用JMS API，开发人员无需掌握不同消息产品的使用方法，也可以使用统一的JMS API来操纵各种消息中间件。通过使用JMS，能够最大限度地提升消息应用的可移植性。 JMS既支持点对点的消息通信，也支持发布/订阅式的消息通信。</p>
<p>&#183; JNDI</p>
<p>&nbsp;&nbsp;&nbsp; 由于J2EE应用程序组件一般分布在不同的机器上，所以需要一种机制以便于组件客户使用者查找和引用组件及资源。在J2EE体系中，使用JNDI(Java NAMing and Directory Interface)定位各种对象，这些对象包括EJB、数据库驱动、JDBC数据源及消息连接等。JNDI API为应用程序提供了一个统一的接口来完成标准的目录操作，如通过对象属性来查找和定位该对象。由于JNDI是独立于目录协议的，应用还可以使用JNDI访问各种特定的目录服务，如LDAP、NDS和DNS等。</p>
<p>&#183; JTA</p>
<p>&nbsp;&nbsp;&nbsp; JTA(Java Transaction API)提供了J2EE中处理事务的标准接口，它支持事务的开始、回滚和提交。同时在一般的J2EE平台上，总提供一个JTS(Java Transaction Service)作为标准的事务处理服务，开发人员可以使用JTA来使用JTS。</p>
<p>&#183; JCA</p>
<p>&nbsp;&nbsp;&nbsp; JCA(J2EE Connector Architecture)是J2EE体系架构的一部分，为开发人员提供了一套连接各种企业信息系统(EIS，包括ERP、SCM、CRM等)的体系架构，对于EIS开发商而言，它们只需要开发一套基于JCA的EIS连接适配器，开发人员就能够在任何的J2EE应用服务器中连接并使用它。基于JCA的连接适配器的实现，需要涉及J2EE中的事务管理、安全管理及连接管理等服务组件。</p>
<p>&#183; JMX</p>
<p>&nbsp;&nbsp;&nbsp; JMX(Java Management Extensions)的前身是JMAPI。JMX致力于解决分布式系统管理的问题。JMX是一种应用编程接口、可扩展对象和方法的集合体，可以跨越各种异构操作系统平台、系统体系结构和网络传输协议，开发无缝集成的面向系统、网络和服务的管理应用。JMX是一个完整的网络管理应用程序开发环境，它同时提供了厂商需要收集的完整的特性清单、可生成资源清单表格、图形化的用户接口；访问SNMP的网络API；主机间远程过程调用；数据库访问方法等。</p>
<p>&#183; JAAS</p>
<p>&nbsp;&nbsp;&nbsp; JAAS(Java Authentication and Authorization Service)实现了一个Java版本的标准PlugGAble Authentication Module(PAM)的框架。JAAS可用来进行用户身份的鉴定，从而能够可靠并安全地确定谁在执行Java代码。同时JAAS还能通过对用户进行授权，实现基于用户的访问控制。</p>
<p>&#183; JACC</p>
<p>&nbsp;&nbsp;&nbsp; JACC(Java Authorization Service ProvIDEr Contract for ContAIners)在J2EE应用服务器和特定的授权认证服务器之间定义了一个连接的协约，以便将各种授权认证服务器插入到J2EE产品中去。</p>
<p>&#183; JAX-RPC</p>
<p>&nbsp;&nbsp;&nbsp; 通过使用JAX-RPC(Java API for XML-based RPC)，已有的Java类或Java应用都能够被重新包装，并以Web Services的形式发布。JAX-RPC提供了将RPC参数(in/out)编码和解码的API，使开发人员可以方便地使用SOAP消息来完成RPC调用。同样，对于那些使用EJB(Enterprise JavaBeans)的商业应用而言，同样可以使用JAX-RPC来包装成Web服务，而这个Web Servoce的WSDL界面是与原先的EJB的方法是对应一致的。JAX-RPC为用户包装了Web服务的部署和实现，对Web服务的开发人员而言，SOAP/WSDL变得透明，这有利于加速Web服务的开发周期。</p>
<p>&#183; JAXR</p>
<p>&nbsp;&nbsp;&nbsp; JAXR（Java API for XML Registries）提供了与多种类型注册服务进行交互的API。JAXR运行客户端访问与JAXR规范相兼容的Web Servcices，这里的Web Services即为注册服务。一般来说，注册服务总是以Web Services的形式运行的。JAXR支持三种注册服务类型：JAXR Pluggable Provider、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry和ebXML Registry/Repository等)。</p>
<p>&#183; SAAJ</p>
<p>&nbsp;&nbsp;&nbsp; SAAJ(SOAP with Attachemnts API for Java)是JAX-RPC的一个增强，为进行低层次的SOAP消息操纵提供了支持。</p>
<p>&nbsp;</p>
<p><strong>四. J2EE 的结构</strong></p>
<p>&nbsp;&nbsp;&nbsp; 这种基于组件，具有平台无关性的J2EE 结构使得J2EE 程序的编写十分简单，因为业务逻辑被封装成可复用的组件，并且J2EE 服务器以容器的形式为所有的组件类型提供后台服务. 因为你不用自己开发这种服务, 所以你可以集中精力解决手头的业务问题.</p>
<p>&nbsp;&nbsp;&nbsp; 容器和服务</p>
<p>&nbsp;&nbsp;&nbsp; 容器设置定制了J2EE服务器所提供得内在支持，包括安全，事务管理，JNDI(Java Naming and Directory Interface)寻址,远程连接等服务，以下列出最重要的几种服务：</p>
<p>&nbsp;&nbsp;&nbsp; J2EE安全(Security)模型可以让你配置 web 组件或enterprise bean ,这样只有被授权的用户才能访问系统资源. 每一客户属于一个特别的角色，而每个角色只允许激活特定的方法。你应在enterprise bean的布置描述中声明角色和可被激活的方法。由于这种声明性的方法，你不必编写加强安全性的规则。</p>
<p>&nbsp;&nbsp;&nbsp; J2EE 事务管理（Transaction Management）模型让你指定组成一个事务中所有方法间的关系，这样一个事务中的所有方法被当成一个单一的单元. 当客户端激活一个enterprise bean中的方法，容器介入一管理事务。因有容器管理事务，在enterprise bean中不必对事务的边界进行编码。要求控制分布式事务的代码会非常复杂。你只需在布置描述文件中声明enterprise bean的事务属性，而不用编写并调试复杂的代码。容器将读此文件并为你处理此enterprise bean的事务。</p>
<p>&nbsp;&nbsp;&nbsp; JNDI 寻址(JNDI LOOkup)服务向企业内的多重名字和目录服务提供了一个统一的接口,这样应用程序组件可以访问名字和目录服务.</p>
<p>&nbsp;&nbsp;&nbsp; J2EE远程连接（Remote Client Connectivity）模型管理客户端和enterprise bean间的低层交互. 当一个enterprise bean创建后, 一个客户端可以调用它的方法就象它和客户端位于同一虚拟机上一样.</p>
<p>&nbsp;&nbsp;&nbsp; 生存周期管理（Life Cycle Management）模型管理enterprise bean的创建和移除,一个enterprise bean在其生存周期中将会历经几种状态。容器创建enterprise bean，并在可用实例池与活动状态中移动他，而最终将其从容器中移除。即使可以调用enterprisebean的create及remove方法，容器也将会在后台执行这些任务。</p>
<p>&nbsp;</p>
<p><strong>五、企业级应用示例</strong></p>
<p>&nbsp;&nbsp;&nbsp; 下面我们通过假设一个企业应用的J2EE实现，来了解各种组件和服务的应用。假设应用对象是计算机产品的生产商/零售商的销售系统，这个销售系统能够通过自己的网站发布产品信息，同时也能将产品目录传送给计算机产品交易市场。销售系统能够在线接受订单(来自自己的Web网站或者来自计算机产品交易市场)，并随后转入内部企业管理系统进行相关的后续处理。</p>
<p>&nbsp;&nbsp;&nbsp; 参见图1，这个企业应用可以这种方式架构。该企业应用的核心是产品目录管理和产品定购管理这两个业务逻辑，使用EJB加以实现，并部署在EJB容器中。由于产品目录和定购信息都需要持久化，因此使用JDBC连接数据库，并使用JTA来完成数据库存取事务。<br />
图1 J2EE应用示例</p>
<p>&nbsp;&nbsp;&nbsp; 然后使用JSP/Servlet来实现应用的Web表现：在线产品目录浏览和在线定购。为了将产品目录发送给特定的交易市场，使用JMS实现异步的基于消息的产品目录传输。为了使得更多的其它外部交易市场能够集成产品目录和定购业务，需要使用Web Services技术包装商业逻辑的实现。由于产品定购管理需要由公司内部雇员进行处理，因此需要集成公司内部的用户系统和访问控制服务以方便雇员的使用，使用JACC集成内部的访问控制服务，使用JNDI集成内部的用户目录，并使用JAAS进行访问控制。由于产品订购事务会触发后续的企业ERP系统的相关操作(包括仓储、财务、生产等)，需要使用JCA连接企业ERP。</p>
<p>&nbsp;&nbsp;&nbsp; 最后为了将这个应用纳入到企业整体的系统管理体系中去，使用Application Client架构了一个管理客户端(与其它企业应用管理应用部署在一台机器上)，并通过JMX管理这个企业应用。<br />
</p>
<img src ="http://www.blogjava.net/hanbihui/aggbug/147038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hanbihui/" target="_blank">流浪韩</a> 2007-09-21 11:32 <a href="http://www.blogjava.net/hanbihui/archive/2007/09/21/147038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>引元数量可变的方法</title><link>http://www.blogjava.net/hanbihui/archive/2007/09/19/146428.html</link><dc:creator>流浪韩</dc:creator><author>流浪韩</author><pubDate>Wed, 19 Sep 2007 05:06:00 GMT</pubDate><guid>http://www.blogjava.net/hanbihui/archive/2007/09/19/146428.html</guid><wfw:comment>http://www.blogjava.net/hanbihui/comments/146428.html</wfw:comment><comments>http://www.blogjava.net/hanbihui/archive/2007/09/19/146428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hanbihui/comments/commentRss/146428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hanbihui/services/trackbacks/146428.html</trackback:ping><description><![CDATA[<p align="center">引元数量可变的方法</p>
<p>public class Test {<br />
&nbsp;&nbsp;&nbsp; public void test(String... body){</p>
<p>//String...代表String的数组，长度由传进来时的数组长度决定<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; body.length; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(body[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println();<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>public class Main {<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test t=new Test();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.test("hello,","hi");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.test("good morning");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.test("good afternoon,","good evening,","good night");<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
输出结果：<br />
hello,hi<br />
good morning<br />
good afternoon,good evening,good night</p>
<img src ="http://www.blogjava.net/hanbihui/aggbug/146428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hanbihui/" target="_blank">流浪韩</a> 2007-09-19 13:06 <a href="http://www.blogjava.net/hanbihui/archive/2007/09/19/146428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>增强的for语句</title><link>http://www.blogjava.net/hanbihui/archive/2007/09/19/146425.html</link><dc:creator>流浪韩</dc:creator><author>流浪韩</author><pubDate>Wed, 19 Sep 2007 04:58:00 GMT</pubDate><guid>http://www.blogjava.net/hanbihui/archive/2007/09/19/146425.html</guid><wfw:comment>http://www.blogjava.net/hanbihui/comments/146425.html</wfw:comment><comments>http://www.blogjava.net/hanbihui/archive/2007/09/19/146425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hanbihui/comments/commentRss/146425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hanbihui/services/trackbacks/146425.html</trackback:ping><description><![CDATA[<p align="center">增强的for语句<br />
</p>
<p><br />
&nbsp;&nbsp;&nbsp; 增强的for语句形式如下：<br />
&nbsp;&nbsp;&nbsp; for(Type loop-variable:set - expression)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; statement<br />
&nbsp;&nbsp;&nbsp; 其中set - expression必须为确定的对象，这个对象是我们想要迭代的数值的集合。loop-variable是一个局部变量，它的类型Type必须适合于数值集合set - expression的内容，每次进行循环时，loop-variable都会从set - expression取出下一个值，然后执行statement，直到取完集合中的数据。<br />
&nbsp;&nbsp;&nbsp; set - expression必须是数组或者实现了java.lang.Iterable接口的对象<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; <span style="color: red">它的好处是不用手工维护数组下标，也不必检查数组的长度。<br />
&nbsp;&nbsp;&nbsp; 它的缺点是只能在单独的一个数组上向前循环，并且只能查看数组的元素&nbsp;&nbsp;</span>&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 下面是例子：<br />
&nbsp;<br />
import java.util.Vector;</p>
<p>public class ForEx {</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector&lt;String&gt; v=new Vector&lt;String&gt;();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v.add("Hello");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v.add("Hi");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v.add("Good Moning");</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (String string : v) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(string);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>输出结果：</p>
<p>Hello<br />
Hi<br />
Good Moning</p>
<p>&nbsp;</p>
<p>如果这个&#8220;增强的for语句&#8221;和&#8220;引元数量可变的方法&#8221;联合起来一起用的话会有不错的效果：</p>
<p>&nbsp;</p>
<p>public class Test {</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Test t=new Test();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.test("hello,","hi");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.test("good morning");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.test("good afternoon,","good evening,","good night");<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void test(String... body){</p>
<p>//String...代表String的数组，长度由传进来时的数组长度决定<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (String string : body) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(string);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>输出如下：</p>
<p>hello,<br />
hi<br />
good morning<br />
good afternoon,<br />
good evening,<br />
good night</p>
<img src ="http://www.blogjava.net/hanbihui/aggbug/146425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hanbihui/" target="_blank">流浪韩</a> 2007-09-19 12:58 <a href="http://www.blogjava.net/hanbihui/archive/2007/09/19/146425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标号与continue,break</title><link>http://www.blogjava.net/hanbihui/archive/2007/09/18/146250.html</link><dc:creator>流浪韩</dc:creator><author>流浪韩</author><pubDate>Tue, 18 Sep 2007 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/hanbihui/archive/2007/09/18/146250.html</guid><wfw:comment>http://www.blogjava.net/hanbihui/comments/146250.html</wfw:comment><comments>http://www.blogjava.net/hanbihui/archive/2007/09/18/146250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hanbihui/comments/commentRss/146250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hanbihui/services/trackbacks/146250.html</trackback:ping><description><![CDATA[<p align="center">标号与continue,break<br />
</p>
<p><br />
&nbsp;&nbsp;&nbsp; 可以给语句块加标号赋予它们名称，标号位于语句之前。标号只能被continue和break引用。格式如下：<br />
&nbsp;&nbsp;&nbsp; label:statement<br />
&nbsp;&nbsp;&nbsp; 语句前只允许加一个标号，标号后面不能跟大括号。通过用break后加标号对处于标号中的语句进行控制。往往标号后是for.while.do-while等循环。<br />
&nbsp;&nbsp;&nbsp; 通过用标号，我们可以对外层循环进行控制<br />
下面是用continue控制标号<br />
public class Label {</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("i j");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; search:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 3; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; 50; j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (j == 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue search;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(i+" "+j);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
输出如下：</p>
<p>i j<br />
0 0<br />
0 1<br />
0 2<br />
1 0<br />
1 1<br />
1 2<br />
2 0<br />
2 1<br />
2 2</p>
<p><br />
可以看出内层循环并没有执行50次，而到了continue时就跳到<span style="color: #ff0000">最外层循环</span>去了，continue执行后执行的是i++.</p>
<p>&nbsp;</p>
<p>下面是用break控制标号</p>
<p>public class Label {</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("i j");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; search:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; 3; i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; 50; j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (j == 3)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break search;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(i+" "+j);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>输出如下：</p>
<p>i j<br />
0 0<br />
0 1<br />
0 2 <br />
&nbsp;</p>
<p>可以看出内层循环也没有执行50次，而且break后循环就再也没执行。break跳出的是<span style="color: #ff0000">最外层循环</span>，跳出了标号的范围。</p>
<p>&nbsp;</p>
<p><span style="color: #008000">break跳出标号对查询一条记录来说比较有用，当查出自己想要的一条记录时，就可以跳出循环了，不用再执行了。</span></p>
<p><span style="color: #008000">其中标号的另一个用意就在于让程序员不去用goto(替代了goto)，写出更安全，干净的代码</span><br />
</p>
<img src ="http://www.blogjava.net/hanbihui/aggbug/146250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hanbihui/" target="_blank">流浪韩</a> 2007-09-18 20:48 <a href="http://www.blogjava.net/hanbihui/archive/2007/09/18/146250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>