(最新)JSF+Spring+Hibernate的实例讲解

(最新)JSF+Spring+Hibernate的实例讲解
(最新)JSF+Spring+Hibernate的实例讲解

JSF+Spring+Hibernate的实例讲解

使用JSF建立一个真实的Web应用程序不是没有意义的任务,这篇文章介绍了如何将JSF与Sping Framework和Hibernate集成,并且给出了使用这些技术建立这个真实的Web应用程序的最佳实践和设计指导

JavaServer Faces(JSF)技术是J2EE应用程序的一个新的用户接口框架,它非常适合基于

MVC(Model-View-Controller)体系结构的应用程序。已经有大量的文章介绍JSF。然而,很多文章都是站在理论研究的层面上,没有挑战一个真实的企业开发。很多问题没有解决,例如,JSF怎样全面适合MVC体系结构?JSF如何与其他JAVA框架集成?业务逻辑应该放在JSF的backing beans里面吗?怎样处理JSF里面的安全问题?最重要的是你怎样使用JSF建立一个真实的Web应用程序?

这篇文章涉及所有这些问题。它向你展示如何集成其他特定的Java框架,Spring Framework和Hibernate,它示范怎样去创建一个叫JCatalog的Web应用程序,一个在线的产品目录系统。这篇文章使用JCatalog例子,介绍了Web应用程序设计的每一个阶段,包括业务需求收集,分析,技术选择,高层体系结构和详细设计。这篇文章论述了JCatalog里面好的和不好的技术,示范了应用程序设计中一些关键方面的方法和步骤。

这篇文章是写给正在从事基于J2EE Web应用程序的Java架构师,开发者,它不是对JSF、Spring Framework和Hibernate的入门教程。如果您对这些领域不熟悉,请参考文章最后的资源链接。

例子应用程序的功能需求

这篇文章的例子应用程序JCatalog是一个真实的Web应用程序,例子足够现实是为了决定应用程序架构而进行意味深长的讨论的基础。我通过介绍JCatalog项目的需求开始。我在这里谈到后面贯穿于整个文章的内容是为了演示技术选择和体系结构设计。

设计Web应用程序的第一步是收集系统的功能需求,这个例子应用程序是一个典型的电子商务应用系统。用户能浏览产品目录和查看产品细节,管理员能管理产品目录。功能还可以增加,举例来说,为了开发一个成熟的电子商务系统,可以添加库存管理和订单处理的功能。

用例

用例分析被用于去访问例子应用程序的功能需求,图1是应用程序的用例图。

图1 用例图

一个用例图确定在一个系统中的参与者以及参与者可以执行的操作。例子应用中7个用例必须被实现。参与者中的User能浏览产品目录和察看产品细节。一旦用户以Administrator身份连接到系统,他就能创建新产品,编辑存在的产品,删除老的产品。

业务规则

JCatalog 必须符合下面的业务规则:

每个产品有一个唯一的产品ID

每个产品至少属于一个目录

产品ID一旦被创建就不能改变

假定

对于产品的设计和实现,我们做下面的假定。

英语是默认语言;不要求国际化

目录中不超过500种产品

目录的更新不频繁

页面流

图2显示了所有JCatalog的页面和它们之间的转换。

图2 页面流图

应用程序有两组页面:公共的国际互联网和管理员的企业内部网。企业内部网只有对那些成功登陆到系统的用户有效。产品概要页面是公用的,它作为产品目录的内容包含在一个HTML框架里面。产品列表是一个特殊的目录,只能被管理员看见,它包含创建、编辑和删除产品的链接。

图3是目录页的一个模型。理想情况下,每一个页面所有的控制和必要的内容明细的模型应该被包含在需求文档里面。

图3 目录页面模型

高级体系结构设计

下一步的设计是Web应用程序的高级体系结构设计,它包括将应用程序细分成功能组件以及将这些组件划分到各自所属的层。高级体系结构设计独立于使用的技术。

多层体系结构

一个多层体系结构将整个系统划分成清晰的单元——客户端、表示层、业务逻辑层、集成层和企业信息系统(EIS),这保证了清晰的责任划分以及可维护性和可扩展性。三层或多层系统已经被证明比没有业务逻辑层的客户-服务器系统具有更多的可升级性和柔韧性。

客户端是数据模型被消费和呈现的地方。对于一个Web应用程序,客户层通常是Web浏览器。基于浏览器的瘦客户不包含表示逻辑;它依赖于表示层。

表示层使用业务逻辑层为用户服务,它知道怎样去处理一个客户请求,怎样去和业务逻辑层结合以及怎样去选择下一个试图去显示。

业务逻辑层包含一个应用程序的业务对象和业务服务。它从表示层接受请求,基于请求处理业务逻辑,

作为访问EIS层资源的的中介。业务逻辑层组件使用许多系统级别的服务,例如,安全管理、事物管理和资源管理。

集成层是业务逻辑层和EIS层之间的桥梁。它封装了与EIS层相结合的逻辑。有时,集成层和业务逻辑层的结合是作为中间层被提到。

应用程序数据在EIS层被持久化,包括关系数据库,面向对象数据库和遗留系统。

JCatalog 的体系结构设计

图4显示了JCatalog的高级体系结构设计以及它怎样适合多层体系结构。

图4 高级体系结构图

应用程序使用了一个多层的非分布式的体系结构,图4显示应用程序层和每一层技术选择的划分。

它也用于应用程序的部署图。对于一个可配置的体系结构,表示层、业务逻辑层和集成层被定位在同样的Web容器。定义良好的接口隔离了每一层的职责。可配置的体系结构使应用程序简单和可升级。

对于表示层,经验告诉我们,最好的实践是选择一个存在的,被验证的Web应用框架,远比设计开发一个定制的框架好。我们有几个Web应用框架可供选择,举例来说,Struts、WebWork和JSF。对于JCatalog项目,我们使用JSF。

对于业务逻辑层,不是使用EJB(Enterprise JavaBeans)就是使用POJO(plain old Java objects)。如果应用程序是分布式的,EJB具有远程接口是一个较好的选择。因为JCatalog是一个典型的没有远程访问请求的Web应用程序,POJO在Spring框架的帮助下,用于实现业务逻辑层。

Pure JDBC(Java Database Connectivity):这是最灵活的实现方法;然而,低级的JDBC和不好的JDBC代码工作是麻烦的,执行的不好。

Entity beans:一个容器管理持久化(CMP,container-managed persistence)的entity bean

是隔离数据访问代码和处理O/R(object- relational) mapping数据持久化的昂贵的方法。它是一个以应用服务器为中心的解决办法。一个entity bean不和特定的数据库紧耦合,但是应用程序和EJB容器进耦合。

O/R mapping framework:一个O/R影射的框架采用以对象为中心的方法实现数据持久化。一个以对象为中心的应用程序是容易开发和高度轻便的。在这个领域内存在几个框架——JDO(Java Data Objects),Hibernate,Toplink。CocoBase是一个新的例子。在例子应用程序中我们使用HIbernate。

现在,让我们讨论将应用程序的每一个层联合起来设计的问题。因为JSF相对来说是一个新技术,我强调一下它的使用。

表现层和JavaServer Faces(JSF)

表现层收集用户输入,呈现数据,控制页面导航,代替用户与业务逻辑层交互。表现层也能校验用户输入,维护应用程序的会话状态。下面的章节,我讨论表现层的设计考虑和模式以及我选择JSF去实现JCatalog项目的表现层的原因。

MOdel-View-Controller(MVC)

MVC是Java蓝皮书(BluePrints)中推荐的交互式应用程序体系结构设计模式。MVC分别设计关注的问题,因此减少了代码的重复,集中控制,使应用程序更具扩展性。MVC也帮助开发者使用不同的技术集合,集中他们核心的技术,通过定义清晰的接口进行合作。MVC是表现层的体系结构设计模式。

JavaServer Face

JSF是一个基于Java的Web应用程序服务端的用户接口组件框架。JSF包括表示UI组件和管理其状态的API;处理事件,服务端校验,数据转换;定义页面导航;支持国际化和可访问性;提供

所有这些特点的扩展能力。它还包括两个为JSP定制的标签库,一个用于表示JSP页面内的UI 组件,一个用于配置服务端的对象组件。

JSF和MVC

JSF很适合基于MVC的表现层体系结构。它提供动作和表现之间清楚地划分。它影响了UI组件和Web层概念,不限定你去使用特定的脚本技术或者标记语言。

JSF backing beans 是model层(后面的章节有关于backing beans 的更多内容)。它们也包含动作,这是控制层的扩展,代理用户对业务逻辑层的请求。请注意,从整体应用程序的体系结构来看,业务逻辑层也能被作为Model层提到。使用JSF定制标签的JSP页面是视图层。Faces Servlet提供控制者的功能。

为什么用JSF

JSF不仅仅只是另一个Web框架,下面是JSF与其他Web框架不同的特点:

象Swing一样面向对象的Web应用程序开发:服务端有状态的UI组件模型,具有事件监听和操作者,开始了面向对象Web应用程序开发。

Backing-bean管理:Backing beans是页面中JavaBeans组件和UI组件的联合。Backing-bean 管理UI组件对象定义和对象执行应用程序特殊过程以及控制数据的分离。JSF在正确的范围内执行存储和管理这些backing-bean实例。

可扩展的UI组件模型:JSF UI组件是组成JSF应用程序用户接口可配置、可复用的元素。你能扩展标准的UI组件和开发更多的复杂组件。举例来说,菜单条和树型构件。

灵活的表现模型:一个renderer分隔一个UI组件的功能和视图。多个renderer能被创建,用于定义相同或不同客户端上同样组件的不同外观。

可扩展的转化和校验模型:基于标准的转换者和校验者,你能开发定制的转换者和校验者,它们提供最好的模型保护。

尽管JSF很强大,但是现在还不成熟。组件、转换者和校验者是JSF基本的。每一个校验模型不能处理组件和校验者之间多对多的校验。另外,JSF定制标签不能和JSTL(JSP Standard Tag Library)无缝结合。

在下面的部分,我讨论用JSF实现JCatalog项目时几个关键方面和设计决定。首先讨论JSF中managed beans和backing beans的定义和使用。然后,我介绍JSF中怎样处理安全、分页、缓存、文件上传、校验和错误消息定制。

Managed bean,backing bean,view object和domain object model

JSF介绍了两个新的术语:managed bean 和 backing bean。JSF 提供一个强大的managed-bean 工厂。被JSF执行的JavaBean对象管理被叫做managed beans。一个managed bean描述一个bean 怎样被创建和管理。它没有利用bean的功能性。

Backing bean 定义页面特性和处理逻辑与UI组件的联合。每一个backing-bean属性被绑定到

组件实例或者它的值中的一个。一个backing bean也定义一个组件可执行的功能的集合,例如,校验组件的数据,处理组件触发事件,组件激活时与导航相关的执行过程。

一个典型的JSF应用程序在应用程序的每一个页面中连接一个backing bean。然而,有时在真实的世界里,强迫一个backing bean和一个页面一对一的关系不是一个理想的解决方案。它能造成象代码重复这样的问题。在真实世界的场景里,几个页面可能需要共享在后台的同样的backing bean。例如,在JCatalog项目里,CreateProduct和EditProduct页面共享同样的ProductBean 的定义。

一个试图对象是在表示层明确使用的模型对象。它包含了必须显示在视图层的数据和校验用户输入,处理事件和与业务逻辑层相结合的逻辑。backing bean是基于JSF应用程序的视图对象。

在这篇文章中Backing bean 和视图对象是可交换的术语。

比较Struts中的Actionform和Action,在JSF中开发backing beans遵循面向对象设计的最好实践。一个backing bean不仅包含视图数据,也包含与数据相关的行为。在Struts 中,Action 和ActionForm包含数据和逻辑分离。

我们都听说过域对象模型。那么,域对象模型和视图对象有什么不同呢?在一个简单的Web应用程序里,一个域对象模型能被用于所有的层,然而,在一些复杂的Web应用程序里面,一个单独的视图对象模型需要被使用。域对象模型是关于业务对象,应该归入业务逻辑层。它包含特定业务对象相关的业务数据和业务逻辑。一个视图对象包含特定数据和行为的表示。JCatalog项目的ProductListBean提供了一个好的例子。它包含表示层数据和逻辑细节,举例来说,与分页相关的数据和逻辑。从域对象模型分离视图对象的缺点是数据映射必须发生在两个对象模型之间。在JCatalog项目中,ProductBeanBuilder和UserBeanBuilder使用基于反射的Commons BeanUtils 去实现数据映射。

安全

当前,JSF没有内置的安全特征。例子的安全需求是基本的:用户连接到管理员使用的公司内部网需要的认证是基于用户名和密码,不需要授权。

在JSF里面几个处理用户认证的方法已经被提出:

Use a base backing bean:这个解决方案是简单的。然而,它使backing beans与特殊的遗产层次绑定。

Use JSF ViewHandler decorator:这种方法使安全逻辑紧紧地加上一个特殊的Web层技术。Use a servlet filter:一个JSF 应用程序与其他基于Java的Web应用程序不同。它在一个恰当的地方使用一个过滤器处理认证检查。这种方法使Web应用程序中的认证逻辑减弱了。

在例子应用程序中,SecurityFilter类处理用户认证。当前,受保护的资源只有三个页面,为了简单,它们被硬编码在Filter类里面。可以通过扩展安全规则来改进它,把受保护的资源放到配置文件中。

分页

应用程序的目录页需要分页。表现层能处理分页,这意味着所有数据必须被重新得到存储在这层。分页也能在业务逻辑层、集成层甚至是EIS层处理。JCatalog项目的假定是在目录中的产品不超过500种。所有产品信息适合保存在用户session中。分页逻辑存在ProductListBean类中。与分页有关的参数“每页的产品”通过JSF的managed-bean工具配置。

缓存

缓存是Web应用程序中改善性能的众多重要技术中的一种。缓存能在应用程序体系结构内的许多层完成。体系结构中的一层减少调用它下面的层时,缓存是非常有益的。JSF managed-bean工具使在表现层实现缓存更容易。通过改变一个managed bean的范围,包含在managed bean中的数据能在不同的范围内缓存。

例子应用程序使用二级缓存。第一级缓存在业务逻辑层里面。CachedCatalogServiceImpl类维护所有产品和目录的读/写缓存。Spring 管理的类作为一个单独服务bean。所以,一级缓存是一个应用程序范围的读/写缓存。

对于简单的分页逻辑和将来应用程序速度的提高,表现层的会话范围内的产品也被缓存。每个用户维护他session里面自己的ProductListBean。缺点是占用系统内存和存在旧数据。在一个用户session的持续时间里,如果管理员更新了目录,用户可能会看到旧的目录数据。然而,基于这样的假定,目录中部超过500种产品,而且目录更新不频繁,我们应该能够忍受这些缺点。

文件上传

目前,JSF的Sun参考实现中不支持文件上传。Struts有很好的文件上传能力,然而,Struts外观集成库是必须使用。在JCatalog项目中,一个图片与每个产品关联。一个用户创建一个新的产品之后,必须上传与之相关的图片。图片保存在应用服务器的文件系统里面。产品ID是图片名.

例子应用程序使用,Servlet 和Jakarta通用的文件上传API,实现一个简单的文件长传功能。这个功能使用两个参数:产品图片路径和图片上传结果页面。它们都通过ApplicatonBean配置。请参考FileUploadServlet类的详细资料。

校验

JSF具有的标准校验是简单基本的,不能满足真实的需求。开发自己的JSF校验是容易的。我在例子应用程序中使用定制标签来开发SelectedItemsRange校验。它校验通过UISelectMany UI

组件选择的项目数量:

id="selectedCategoryIds">

更多的详细资料请参考例子应用程序。

错误消息定制

在JSF里面,你可以设置资源包定制转换和校验时的错误消息。资源包被设置在

faces-config.xml里面:

catalog.view.bundle.Messages

The error message's key-value pairs are added to the Message.properties file:

#conversion error messages

https://www.360docs.net/doc/29375119.html,ponent.UIInput.CONVERSION=Input data is not in the correct type.

#validation error messages

https://www.360docs.net/doc/29375119.html,ponent.UIInput.REQUIRED=Required value is missing.

业务逻辑层和Spring Framework

业务对象和业务服务在业务逻辑层。一个业务对象不仅包含数据,也有与特定对象关联的逻辑。在例子应用程序中标识了三个业务对象:Product,Category和User.

业务服务与业务对象相结合,提供高级的业务逻辑。一个包含直接使用的服务接口的标准的业务接口层应该被定义。在Spring Framework的帮助下,POJO实现了Jcatalog项目业务逻辑层。有两个业务服务:CatalogService包含与目录管理相关的业务逻辑,UserService包含了用户管理逻辑。

Spring是基于控制反转概念(IOC,inversion of control)。在例子应用程序中使用的Spring 特征包括:

Bean management with application contexts:Spring能有效地组织我们的中间层对象,垂直处理。Spring 能避免一个实体功能的分解,促进好的面向对象设计实现,举例来说,接口设计。Declarative transaction management:Spring 使用AOP(aspect-oriented programming)去描述不使用EJB容器的声明性事务处理。这种方法,事务管理能被应用到任何POJO。Spring事务管理不和JTA(Java Transaction API)绑定,使用不同的事物策略工作。在例子应用程序中声明性事务管理Hibernate中的事务。

Data-access exception hierarchy:Spring提供一个值得回味的异常层次代替SQLException。使用Spring数据访问异常层次,Spring数据访问异常翻译者必须在Spring配置文件里面定

义:

class= "org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">

在例子应用程序中,如果插入的一个新产品的ID是重复的,一个DataIntegrityViolationException 会被抛出。这个异常会被捕获然后作为DuplicateProductIdException被抛出。这种方法,DuplicateProductIdException能处理不同的数据访问异常。

Hibernate integration:Spring不强迫我们使用它强大的JDBC抽象特征。它和O/R映射框架集成的很好,尤其是Hibernate。Sping提供有效的、安全的Hibernate会话操作。在应用程序上下文操作Hibernate的配置SessionFactories 和JDBC数据源,使应用程序容易测试。

集成层和Hibernate

Hibernate是一个开源O/R映射框架,它减少使用JDBC API的需要。Hibernate支持所有主流的SQL数据库管理系统。Hibernate Query Language是SQL面向对象的最小的扩展来设计的,在对象和关系世界间提供了一个优雅的桥。Hibernate提供数据恢复和更新的工具,事务管理,数据连接池,programmatic and declarative queries,声明实体关系管理。

Hibernate和其他O/R映射框架相比入侵性较小。使用反射和运行时产生字节码,SQL在系统开始时产生。它允许我们开发符合Java习惯的持久对象,包括联合,继承,多态,聚合和Java集合框架。在例子应用程序中的业务对象是POJO,不需要实现Hibernate的特殊接口。

Data Access Object (DAO)

JCatalog项目使用DAO模式。这个模式抽象和封装了所有对数据源的访问。应用程序有两个DAO 接口。CatalogDao和UserDao。它们的实现类是HibernateCatalogdaoImpl和HibernateUserDaoImpl包含与Hibernate相关的管理和持久化数据逻辑。

实现设计

现在,让我把每件事情都串起来,实现JCatalog项目。你可以冲资源列表中下载应用程序的完整源代码。

数据库设计

我们为例子应用程序创建指定目录的结构,它包含4个表,如图5:

图5 数据结构图类设计:图6图解了JCatalog项目的类图

图6 类图

面向接口编程贯穿于整个设计。在表现层,四个bean被使用:ProductBean, ProductListBean, UserBean和 MessageBean。业务逻辑层包含两个服务(CatalogService and UserService)和三个业务对象(Product, Category, and User)。集成层包括两个DAO接口和它们的Hibernate

实现。Spring application contexts 包含和管理业务逻辑层和集成层的很多object beans。ServiceLocator使JSF和业务逻辑层结合到一起。

Wire everything up

因为这篇文章篇幅的限制,我们只看一个用例。CreateProduct用例示范了怎样将每件事情串起

来建造应用程序。深入细节以前,让我们使用一个序列图(图7)示范所有层端到端的整合:

图7 CreateProduct用例的序列图

现在,让我们通过对每一层的介绍讨论如何实现CreateProduct用例的更多细节。

表现层

表现层的实现包括创建JSP页面,定义页面导航,创建和配置backing beans,将JSF与业务逻辑层结合。JSP page:createProduct.jsp是创建新产品的页面。它包括UI组件和捆绑这些组件的ProductBean。ValidateItemsRange自定义标签检验用户选择目录的数目。每个新产品至少有一个目录被选择。

Page navigation:应用程序的导航定义在应用程序的配置文件里面,faces-navigation.xml。CreateProduct 定义的导航规则是:

*

createProduct

/createProduct.jsp

/createProduct.jsp

success

/uploadImage.jsp

retry

/createProduct.jsp

cancel

/productList.jsp

Backing bean: ProductBean不仅包含了页面中UI组件与数据映射的属性,也包含三个actions:createAction,editAction和deleteAction。这是createAction()方法的代码:

public String createAction() {

try {

Product product = ProductBeanBuilder.createProduct(this);

//Save the product.

this.serviceLocator.getCatalogService().saveProduct(product);

//Store the current product id inside the session bean.

//For the use of image uploader.

FacesUtils.getSessionBean().setCurrentProductId(this.id);

//Remove the productList inside the cache.

this.logger.debug("remove ProductListBean from cache");

FacesUtils.resetManagedBean(BeanNames.PRODUCT_LIST_BEAN);

} catch (DuplicateProductIdException de) {

String msg = "Product id already exists";

https://www.360docs.net/doc/29375119.html,(msg);

FacesUtils.addErrorMessage(msg);

return NavigationResults.RETRY;

} catch (Exception e) {

String msg = "Could not save product";

this.logger.error(msg, e);

FacesUtils.addErrorMessage(msg + ": Internal Error");

return NavigationResults.FAILURE;

}

String msg = "Product with id of " + this.id + " was created successfully.";

this.logger.debug(msg);

FacesUtils.addInfoMessage(msg);

return NavigationResults.SUCCESS;

}

在这个action里面,基于ProductBean的一个Product业务对象被建立。ServiceLocator查询CatalogService。最后,createProduct的请求被委派给业务逻辑层的CatalogService。Managed-bean declaration: ProductBean必须在JSF的配置资源文件faces-managed-bean.xml 中配置:

Backing bean that contains product information.

productBean

catalog.view.bean.ProductBean

request

id

#{param.productId}

serviceLocator

#{serviceLocatorBean}

ProductBean有一个请求的范围,这意味着如果ProductBean在JSP页面内引用JSF执行为每一个请求创建ProductBean实例的任务。被管理的ID属性与productId这个请求参数组装。JSF从请求得到参数,设置managed property。

Integration between presentation and business-logic tiers: ServiceLocator抽象了查询服务的逻辑。在例子应用程序中,ServiceLocator被定义成一个一个接口。接口被JSF managed bean实现为ServiceLocatorBean,它从Spring application context查询服务:ServletContext context = FacesUtils.getServletContext();

this.appContext =

WebApplicationContextUtils.getRequiredWebApplicationContext(context);

this.catalogService = (CatalogService)this.lookupService(CATALOG_SERVICE_BEAN_NAME); https://www.360docs.net/doc/29375119.html,erService = (UserService)this.lookupService(USER_SERVICE_BEAN_NAME); ServiceLocator被定义为BaseBean中的一个属性。JSF managed bean容易连接ServiceLocator 执行必须访问ServiceLocator的那些managed beans。使用了Inversion of control(IOC,控制反转)

业务逻辑层

定义业务对象,创建服务接口和实现,在Spring中配置这些对象组成了这一层的任务。Business objects: 因为Hibernate提供了持久化,Product和Category业务对象需要为它们包含的所有属性提供getter和setter方法。

Business services:CatalogService接口定义了所有与目录管理有关的服务:

public interface CatalogService {

public Product saveProduct(Product product) throws CatalogException;

public void updateProduct(Product product) throws CatalogException;

public void deleteProduct(Product product) throws CatalogException;

public Product getProduct(String productId) throws CatalogException;

public Category getCategory(String categoryId) throws CatalogException;

public List getAllProducts() throws CatalogException;

public List getAllCategories() throws CatalogException;

}

CachedCatalogServiceImpl服务的接口实现,它包含CatalogDao对象的一个setter。Spring将CachedCatalogServiceImpl 和CatalogDao连接在一起。因为我们提供了接口,所以对实现的依赖不是很紧密。

Spring configuration: 下面是CatalogService的Spring comfiguration:

class="org.springframework.orm.hibernate.HibernateTransactionManager">

class="catalog.model.service.impl.CachedCatalogServiceImpl" init-method="init">

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

local="transactionManager"/>

PROPAGATION_REQUIRED,readOnly

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

PROPAGATION_REQUIRED

Spring声明事务管理是在CatalogService. CatalogService 里面设置,它能实现不同

CatalogDao。Spring创建并管理单体实例Catalogservice,不需要工厂。

现在,业务逻辑层准备好了,让我们将它与集成层整合。

Integration between Spring and Hibernate:下面是HibernateSessionFactory的配置:

class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

catalog/model/businessobject/Product.hbm.xml

catalog/model/businessobject/Category.hbm.xml

catalog/model/businessobject/User.hbm.xml

key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect

true

true

key="hibernate.cache.provider_class">net.sf.hibernate.cache.HashtableCacheProvider< /prop>

CatalogDao使用HibernateTemplate集成Hibernate和Spring.下面是HibernateTemplate的配置:

class="org.springframework.orm.hibernate.HibernateTemplate">

bean="jdbcExceptionTranslator"/>

集成层

Hibernate使用一个XML配置文件去映射业务对象到关系型数据库。在JCatalog项目中,Product.hbm.xml表示Product业务对象的映射。Category.hbm.xml用于业务对象Category。配置文件和相应的业务对象在同样的目录下。下面是Product.hbm.xml:

"-//Hibernate/Hibernate Mapping DTD 2.0//EN"

"https://www.360docs.net/doc/29375119.html,/hibernate-mapping-2.0.dtd">

CatalogDao通过Spring使用HibernateTemplate连接:

EasyBCD使用教程

EasyBCD使用教程 一、EasyBCD简介: EasyBCD是一款免费软件,EasyBCD能够极好地支持多种操作系统与Windows 7、Vista 结合的多重启动,包括Linux、Mac OS X、BSD等,当然也包括微软自家的Windows 2000/XP。任何在安装Windows7前其能够正常启动的系统,通过EasyBCD,均可保证其在安装Windows Vista后同样能够启动。同时,在设置方面极为简单,完全摆脱BCDEdit的繁琐冗长命令,用户只需选择相应的平台与启动方式(如Linux下的Grub或LILO),即可完成。 此外,EasyBCD 还提供了“备份MBR (BCD Backup/Repair)”的选项,这样,用户可以保存系统启动选项的每次改动,并在出现启动故障时选择合适的备份恢复。 百度百科参考阅读:https://www.360docs.net/doc/29375119.html,/view/2689164.htm 二、EasyBCD的下载: 官方下载:https://www.360docs.net/doc/29375119.html,/wiki/display/EBCD/EasyBCD+Documentation+Home 华军下载:https://www.360docs.net/doc/29375119.html,/soft/58174.htm 汉化绿色版:https://www.360docs.net/doc/29375119.html,/source/2733230【推荐】 三、EasyBCD 安装及使用手册 该软件可以在windows XP、Windows Vista、Windows 7 系统上全部都可以运行,如果要在Windows XP 操作系统使用,还需要提前安装Microsoft .NET Framework(大家装个.Net 2.0 的就可以了),否则软件无法正常使用,大家可以先使用,无法使用了再装.Net,

storm集群的自适应调度算法

Adaptive Online Scheduling in Storm Leonardo Aniello aniello@dis.uniroma1.it Roberto Baldoni baldoni@dis.uniroma1.it Leonardo Querzoni querzoni@dis.uniroma1.it Research Center on Cyber Intelligence and Information Security and Department of Computer,Control,and Management Engineering Antonio Ruberti Sapienza University of Rome ABSTRACT Today we are witnessing a dramatic shift toward a data-driven economy,where the ability to e?ciently and timely analyze huge amounts of data marks the di?erence between industrial success stories and catastrophic failures.In this scenario Storm,an open source distributed realtime com-putation system,represents a disruptive technology that is quickly gaining the favor of big players like Twitter and Groupon.A Storm application is modeled as a topology,i.e. a graph where nodes are operators and edges represent data ?ows among such operators.A key aspect in tuning Storm performance lies in the strategy used to deploy a topology, i.e.how Storm schedules the execution of each topology component on the available computing infrastructure.In this paper we propose two advanced generic schedulers for Storm that provide improved performance for a wide range of application topologies.The?rst scheduler works o?ine by analyzing the topology structure and adapting the de-ployment to it;the second scheduler enhance the previous approach by continuously monitoring system performance and rescheduling the deployment at run-time to improve overall performance.Experimental results show that these algorithms can produce schedules that achieve signi?cantly better performances compared to those produced by Storm’s default scheduler. Categories and Subject Descriptors D.4.7[Organization and Design]:Distributed systems Keywords distributed event processing,CEP,scheduling,Storm 1.INTRODUCTION In the last few years we are witnessing a huge growth in information production.IBM claims that“every day,we create2.5quintillion bytes of data-so much that90%of the data in the world today has been created in the last two Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for pro?t or commercial advantage and that copies bear this notice and the full citation on the?rst page.To copy otherwise,to republish,to post on servers or to redistribute to lists,requires prior speci?c permission and/or a fee. DEBS’13,June29–July3,2013,Arlington,Texas,USA. Copyright2013ACM978-1-4503-1758-0/13/06...$15.00.years alone”[15].Domo,a business intelligence company, has recently reported some?gures[4]that give a perspective on the sheer amount of data that is injected on the internet every minute,and its heterogeneity as well:3125photos are added on Flickr,34722likes are expressed on Facebook, more than100000tweets are done on Twitter,etc.This apparently unrelenting growth is a consequence of several factors including the pervasiveness of social networks,the smartphone market success,the shift toward an“Internet of things”and the consequent widespread deployment of sensor networks.This phenomenon,know with the popular name of Big Data,is expected to bring a strong growth in economy with a direct impact on available job positions;Gartner says that the business behind Big Data will globally create4.4 million IT jobs by2015[1]. Big Data applications are typically characterized by the three V s:large volumes(up to petabytes)at a high veloc-ity(intense data streams that must be analyzed in quasi real-time)with extreme variety(mix of structured and un-structured data).Classic data mining and analysis solutions quickly showed their limits when faced with such loads.Big Data applications,therefore,imposed a paradigm shift in the area of data management that brought us several novel approaches to the problem represented mostly by NoSQL databases,batch data analysis tools based on Map-Reduce, and complex event processing engines.This latter approach focussed on representing data as a real-time?ow of events proved to be particularly advantageous for all those appli-cations where data is continuously produced and must be analyzed on the?https://www.360docs.net/doc/29375119.html,plex event processing engines are used to apply complex detection and aggregation rules on intense data streams and output,as a result,new events.A crucial performance index in this case is represented by the average time needed for an event to be fully analyzed,as this represents a good?gure of how much the application is quick to react to incoming events. Storm[2]is a complex event processing engine that,thanks to its distributed architecture,is able to perform analytics on high throughput data streams.Thanks to these character-istics,Storm is rapidly conquering reputation among large companies like Twitter,Groupon or The Weather Chan-nel.A Storm cluster can run topologies(Storm’s jargon for an application)made up of several processing components. Components of a topology can be either spouts,that act as event producers,or bolts that implement the processing logic.Events emitted by a spout constitute a stream that can be transformed by passing through one or multiple bolts where its events are processed.Therefore,a topology repre-

win7启动菜单编辑命令bcdedit详解

win7启动菜单编辑命令bcdedit详解 储存操作指令 /createstore 创建一个新的空白启动配置数据文件。 bcdedit /createstore C:\Data\BCD 创建BCD启动配置数据文件储存到“C:\DATA\”文件夹。 /export 备份启动配置数据文件。 bcdedit /export "C:\Data\BCD Backup" 备份BCD启动配置文件到“C:\Data\”文件夹,并以“BCD Backup”命名。 /import 还原启动配置数据文件。 bcdedit /import "C:\Data\BCD Backup" 从“C:\Data\”文件夹恢复BCD 启动配置文件。 储存项目操作指令/copy 项目拷贝 操作系统启动项目的拷贝: bcdedit /copy {cbd971bf-b7b8-4885-951a-fa03044f5d71} /d "Copy of entry" /create 新建项目 创建操作系统载入程序项目的NTLDR(Ntldr): bcdedit /create {ntldr} /d "Earlier Windows OS Loader" 创建存储器磁碟另外的选择项项目: bcdedit /create {ramdiskoptions} /d "Ramdisk options" 创建一个新的操作系统启动项目:

bcdedit /create /d "Windows Vista" /application osloader 创建一个新的调试器: bcdedit /create {dbgsettings} /d "Debugger Settings" /delete 删除项目 删除指定的操作系统项目: bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71} 删除指定的操作系统项目但启动时不显示项目(彻底删除): bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71} /cleanup 删除指定的操作系统项目但启动时显示项目: bcdedit /delete {cbd971bf-b7b8-4885-951a-fa03044f5d71} /nocleanup 删除操作系统载入程序项目的NTLDR: bcdedit /delete {ntldr} /f 项目选择操作指令 /deletevalue 删除项目选择项。 删除启动管理的bootmgr选择项项目: bcdedit /deletevalue {bootmgr} bootsequence 删除(WinPE)操作系统的数值开机项目: bcdedit /deletevalue winpe 删除来自指定的操作的Windows PE 数值系统开机项目: bcdedit /deletevalue {cbd971bf-b7b8-4885-951a-fa03044f5d71} winpe

19252-storm入门到精通-storm1

Storm简介

Storm简介 ?实时计算需要解决一些什么问题?实现一个实时计算系统?Storm基本概念 ?Storm使用场景 ?Storm分组机制

Storm简介 ?实时计算需要解决一些什么问题 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计这个大哥就要骂娘了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子、鞋子,根本对他今天寻找泳镜的行为视而不见,估计这哥们心里就会想推荐你妹呀。其实稍微了解点背景知识的码农们都知道,这是因为后台系统做的是每天一次的全量处理,而且大多是在夜深人静之时做的,那么你今天白天做的事情当然要明天才能反映出来啦。

Storm简介 ?实现一个实时计算系统 全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop 以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识。否则最近这两年也不会有 s4,storm,puma这些实时计算系统如雨后春笋般冒出来啦。先抛开s4,storm,puma这些系统不谈,我们首先来看一下,如果让我们自己设计一个实时计算系统,我们要解决哪些问题。

BCDEDIT命令详解

BCDEDIT命令详解 案例:bcdedit添加系统启动项 使用BCDEDIT命令,编辑启动项,方便、快捷,只需记住几条命令,必要时替换即可。 以下是一个案例: 标识符 {de329298-0dd8-11e0-90b6-8af61b7989dc} device partition=G: path \Windows\system32\winload.exe description Windows 7 Ultimate osdevice partition=G: systemroot \Windows 要实现添加以上启动项信息,可依次键入以下命令: bcdedit /create {35f41e64-23c5-11e0-b95b-fe17cc1d8647} /d “Windows 7 Ultimate” /application osloader bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} device partition=G: bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} path \Windows\system32\winload.exe bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} systemroot \Windows bcdedit /set {35f41e64-23c5-11e0-b95b-fe17cc1d8647} osdevice partition=G: bcdedit /displayorder {35f41e64-23c5-11e0-b95b-fe17cc1d8647} /addfirst 附,关闭Hyper-V,让windows运行VMWare。 Hyper-V和VMWare共存。打开cmd,键入: bcdedit /copy {default} /d“Windows Server 2008 Without Hyper-V” (windows会自动生成一个guid,注意记下)

BCDEdit命令详解

BCDEdit命令详解 BCD简介 启动配置数据Boot Configuration Data (BCD) 文件提供了一个用于描述启动应用程序和启动应用程序设置的存储。该存储中的对象和元素可有效地替换 Boot.ini。 BCDEdit 是一个管理 BCD 存储的命令行工具,是编辑 Windows Vista 和更新版本的 Windows 的启动配置的主要工具。该工具与 Windows Vista 分发一起包含在%WINDIR%\System32 文件夹中。它有多种功能,包括创建新存储、修改现有存储以及添加启动菜单选项等。BCDEdit 与以前Windows 版本上的Bootcfg.exe 的本质功能相同,但它有两个主要改进: ? BCDEdit 比 Bootcfg.exe 可提供更广范围的启动选项。 ? BCDEdit 具有改进的脚本支持。 注意:需要管理员权限才能使用 BCDEdit 修改 BCD。否则,会提示“无法打开启动配置数据存储。拒绝访问。”

一个典型的BCD 存储的内部层次结构 (Figure from Boot Configuration Data in Windows Vista ) boot.ini 和BCD 之间的关系 Bcdedit 命令行选项(命令)详解 BCDEdit 命令的格式: BCDEdit /命令 [参数1] [参数2] ... 查看帮助: bcdedit /?——显示 BCDEdit 命令列表,及可用的摘要。 bcdedit /? 命令——显示特定命令的详细帮助。例如,要显示 export 命令的详细帮助,可输入:bcdedit /? Export ,其结果如下:

分析日干旺衰

分析日干旺衰 易学爱好者都知道八字预测最关键的一步是分析日干旺衰,受古人的影响,易学爱好者都认为分析日干旺衰时,首先遵循“十干生旺死绝表”所规定的十个天干在十二月令中的旺衰状态论日干之旺弱,其次,看日干在年月日时四个地支中的旺衰状况,即:得令、得势、得助、得生。此法延用了千余年,然而,此法在实践中检验看并不准确,如何正确地分析日干旺衰呢? 八字中的日干是旺还是弱,就看八字中日干之外的七个字对日干的影响了。七个字均帮扶日干或日干多受帮扶,少受克泄耗,日干会很旺。七个字均克泄耗日干,少受帮扶或不受帮扶,日干肯定很弱。七个字中有的帮扶日干,有的克泄耗日干,如果帮扶日干的总力量大于克泄耗日干的总力量,日干以旺论,反之以日干弱论。 日干旺,旺到什么程度?日干弱,弱到什么程度,就看印比力量的总和与财官伤力量的总和相差多少了,差距大,日干就很旺或很弱。印比力量的总和与财官伤力量的总和越接近,此八字的组合就越吉,但也绝无双方力量相同的情况。因为年干、年支、时支离日干较远,对日干的影响自然就会稍小,月干、月支、日支、时干靠近日干,对日干的作用最直接,自然对日干的影响也稍大。对日干作用力的大小,不仅取决于每个字距离日干的远近,还取决于每个字自身力量的

大小。自身力量大的字,对日干的作用力就大;自身力量弱的字,对日干的作用力就小。这七个字中,月令的力量最大,根据涵辰的实践摸索,如果把所有加在日干上的七个字的力量,看作100分的话,月令独占50分! 这是决定日干旺衰的一个极重要的量的规定,有了这一点,便可以准确地判定日干旺衰了。 为什么月令对日干旺衰的影响决定50%,老老实实地说,涵辰从理论上也讲不清楚,只是在实践中摸索出这个量,并通过大量实践检验,准确无误。为了解决这个疑问,涵辰曾向天文知识中寻找答案,很遗憾,到目前仍然没有彻底解决,这也是本杂志目前不能填补天文 知识这一空白的一个遗憾! 既然月令对日干影响如此之大,如何看日干在月令中的旺弱呢 ? 只要月令是日干的印比,日干在本命局中就有了50%旺的可能,反过来,月令是日干的财官伤,日干在本命局中,就有了50%弱的可能。有了这个50%的判断后,日干究竟属旺还是属弱,有以下几种 情况: 1 、日干在月令中旺50%,若月干、日支、时干三项中再有一项帮扶日干,七个字中加在日干身上的帮身之力,就超过50%,日 干以旺论。 2 、日干在月令中弱 50%,若月干、日支、时干三项中再有一项克制日干,七个字中作用在日干身上的克泄耗之力,就会超过50 %,日干以弱论。

bcdedit命令的使用

BCDEDIT - 启动配置数据存储编辑器 Bcdedit.exe 命令行工具用于修改启动配置数据存储。启动配置数据存储包含启动配置参数并控制操作系统的启动方式。这些参数以前位于Boot.ini 文件中(在基于BIOS 的操作系统中)或位于稳定RAM 项中(在基于可扩展固件接口的操作系统中)。可以使用Bcdedit.exe 在启动配置数据存储中添加、删除、编辑和附加项。 对存储执行的命令 ================================ /createstore 新建空的启动配置数据存储。 /export 将系统存储的内容导出到文件。以后可以使用该文件还原系统存储的状态。/import 使用/export 命令创建的备份文件来还原系统存储的状态。 /sysstore 设置系统存储设备(仅影响EFI 系统,在重新启动后不再有效, 且仅用于系统存储设备不确定的情况下)。 对存储中的项执行的命令 =========================================== /copy 复制存储中的项。 /create 在存储中新建项。 /delete 删除存储中的项。 /mirror 创建存储中项的镜像。 运行bcdedit /? ID 可获得有关这些命令使用的标识符的信息。 对项选项执行的命令 ====================================== /deletevalue 删除存储中的项选项。 /set 设置存储中的项选项值。 运行bcdedit /? TYPES 可获得这些命令使用的数据类型的列表。 运行bcdedit /? FORMATS 可获得有效数据格式的列表。 控制输出的命令 ============================ /enum 列出存储中的项。 /v 命令行选项,完整显示项标识符,而不是使用已知标识符的名称。 单独使用命令/v 可完整显示活动类型的项标识符。 单独运行"bcdedit" 等同于运行"bcdedit /enum ACTIVE"。 控制启动管理器的命令 ======================================

编辑Bcdedit

Bcdedit Vista系统常用英文专业词语解释大全 在Windows Vista中的一个命令行工具,用于建立和重新配置bootloader,后者无须再使用boot.ini文件。 使用BCDEdit修改Windows Vista的系统启动菜单 在之前基于NT的Windows系统中,Windows使用Ntldr作为Boot Loader来启动系统, ——所谓boot loader,在指在内核运行之前执行的一段小程序,系统通过它来初始化硬件设备、建立内存空间的映射图等,将系统的软硬件环境设置成一个合适的状态,为最终调用操作系统内核准备好正确的环境。——在启动过程中,Ntldr 使用Boot.ini 文件来确定在启动/引导过程中要显示哪些操作系统选项,我们对启动选项的设置可以通过修改boot.ini文件中相应内容实现。操作系统 在Windows Vista中,微软引入了一种全新的boot loader架构, Windows Boot Manager (Bootmg r.exe)。与Ntldr严重地依赖于硬件不同的是,Windows Vista中的新架构可以实现完整的硬件独立性,且能够与多种操作系统无缝结合,让Windows Vista的启动/引导过程更加快速与安全。同时,将之前Windows 系统中由Boot.ini管理的内容移交给新的Boot Configuration Data (BCD : 启动设置数据),当然,也提供了新的启动选项编辑工具,BCDEdit (BCDEdit.exe),来管理启动设置。 BCDEdit : Windows Vista启动设置编辑工具 在传统的基于BIOS的计算机中,如果只安装Windows Vista,除了极早期的Windows Vista测试版本外,您将会发现 Boot.ini 文件已经彻底从系统中消失;如果系统中安装了Windows Vista和之前的Windows 系统如Windows XP,虽然仍可找到 Boot.ini 文件,不过,这个文件只作用于那些系统,而不会对 Windows Vista的启动有任何影响。 在基于EFI (Extensible Firmware Interface : 可扩展固件接口,以后采用这种接口的PC会越来越多 )的计算机中,Boot.ini 文件则更不复存在,在基于EFI的系统中,启动选项被贮存在主板的存储器中。此时要修改启动选项,要么通过能够读写NVRAM的工具如NvrBoot,要么使用上文提到的BCDEdit。

Bcdedit简介

Bcdedit简介 Vista系统常用英文专业词语解释大全。 在Windows Vista中的一个命令行工具,用于建立和重新配置bootloader,后者无须再使用boot.ini文件。 使用BCDEdit修改Windows Vista的系统启动菜单 在之前基于NT的Windows系统中,Windows使用Ntldr作为Boot Loader 来启动系统, ——所谓boot loader,在指在内核运行之前执行的一段小程序,系统通过它来初始化硬件设备、建立内存空间的映射图等,将系统的软硬件环境设置成一个合适的状态,为最终调用操作系统内核准备好正确的环境。——在启动过程中,Ntldr 使用Boot.ini 文件来确定在启动/引导过程中要显示哪些操作系统选项,我们对启动选项的设置可以通过修改boot.ini文件中相应内容实现。操作系统在Windows Vista中,微软引入了一种全新的boot loader架构,Windows Boot Manager (Bootmgr.exe)。与Ntldr严重地依赖于硬件不同的是,Windows Vista中的新架构可以实现完整的硬件独立性,且能够与多种操作系统无缝结合,让Windows Vista的启动/引导过程更加快速与安全。同时,将之前Windows 系统中由Boot.ini管理的内容移交给新的Boot Configuration Data (BCD : 启动设置数据),当然,也提供了新的启动选项编辑工具,BCDEdit (BCDEdit.exe),来管理启动设置。 BCDEdit : Windows Vista启动设置编辑工具 在传统的基于BIOS的计算机中,如果只安装Windows Vista,除了极早期的Windows Vista测试版本外,您将会发现Boot.ini 文件已经彻底从系统中消失;如果系统中安装了Windows Vista和之前的WIndows系统如Windows XP,虽然仍可找到Boot.ini 文件,不过,这个文件只作用于那些系统,而不会对Windows Vista的启动有任何影响。 在基于EFI (Extensible Firmware Interface : 可扩展固件接口,以后采用这种接口的PC会越来越多)的计算机中,Boot.ini 文件则更不复存在,在基于EFI 的系统中,启动选项被贮存在主板的存储器中。此时要修改启动选项,要么通过能够读写NVRAM的工具如NvrBoot,要么使用上文提到的BCDEdit。 由此可见,在Windows Vista中,想要再像之前Windows XP中那样通过一个简单的文本编辑器来修改Boot.ini的方式来管理启动选项已经不可能了,要对启动设置进行修改,只能使用命令格式相对要复杂得多的BCDEdit。 此外,微软也在Windows Vista 中提供了可通过WMI (Windows Management Instrumentation : Windows管理规范)调用的BCD 类,通过它可以用编程的方式修改BCD数据,不过,相信对绝大多数用户而言,这更是不可能的任务。 启动BCDEdit 需要注意的是,BCDEdit不是一个运行于图形界面下的程序,而是一个命令行工具,该文件(Bcdedit.exe) 位于“\Windows\System 32”目录下。 要执行BCDEdit,首先应进入命令行窗口,并要将操作用户并提升至管理员权限。 在命令行窗口中,转到系统目录如“C:/windows/system32”下,然后输入“bcdedit”即可。 BCDEdit命令简介

论Storm分布式实时计算工具

龙源期刊网 https://www.360docs.net/doc/29375119.html, 论Storm分布式实时计算工具 作者:沈超邓彩凤 来源:《中国科技纵横》2014年第03期 【摘要】互联网的应用催生了一大批新的数据处理技术,storm分布式实时处理工具以其强大的数据处理能力、可靠性高、扩展性好等特点,在近几年得到越来越广泛的关注和应用。 【关键词】分布式实时计算流处理 1 背景及特点 互联网的应用正在越来越深入的改变人们的生活,互联网技术也在不断发展,尤其是大数据处理技术,过去的十年是大数据处理技术变革的十年,MapReduce,Hadoop以及一些相关 的技术使得我们能处理的数据量比以前要大得多得多。但是这些数据处理技术都不是实时的系统,或者说,它们设计的目的也不是为了实时计算。没有什么办法可以简单地把hadoop变成一个实时计算系统。实时数据处理系统和批量数据处理系统在需求上有着本质的差别。 然而大规模的实时数据处理已经越来越成为一种业务需求了,而缺少一个“实时版本的hadoop”已经成为数据处理整个生态系统的一个巨大缺失。而storm的出现填补了这个缺失。Storm出现之前,互联网技术人员可能需要自己手动维护一个由消息队列和消息处理者所组成的实时处理网络,消息处理者从消息队列取出一个消息进行处理,更新数据库,发送消息给其它队列等等。不幸的是,这种方式有以下几个缺陷: 单调乏味:技术人员花费了绝大部分开发时间去配置把消息发送到哪里,部署消息处理者,部署中间消息节点—设计者的大部分时间花在设计,配置这个数据处理框架上,而真正关心的消息处理逻辑在代码里面占的比例很少。 脆弱:不够健壮,设计者要自己写代码保证所有的消息处理者和消息队列正常运行。 伸缩性差:当一个消息处理者的消息量达到阀值,需要对这些数据进行分流,配置这些新的处理者以让他们处理分流的消息。 Storm定义了一批实时计算的原语。如同hadoop大大简化了并行批量数据处理,storm的这些原语大大简化了并行实时数据处理。storm的一些关键特性如下: 适用场景广泛:storm可以用来处理消息和更新数据库(消息流处理),对一个数据量进行持续的查询并返回客户端(持续计算),对一个耗资源的查询作实时并行化的处理(分布式方法调用),storm的这些基础原语可以满足大量的场景。

管理启动项 - Windows 7中的BCDEDIT命令

管理启动项- Windows 7中的BCDEDIT命令 管理启动项 - Windows7中的BCDEDIT命令 在之前基于NT的Windows系统中,Windows使用Ntldr作为Boot Loader来启动系统,——所谓boot loader,在指在操作系统内核运行之前执行的一段小程序,系统通过它来初始化硬件设备、建立内存空间的映射图等,将系统的软硬件环境设置成一个合适的状态,为最终调用操作系统内核准备好正确的环境。——在启动过程中,Ntldr 使用Boot.ini 文件来确定在启动/引导过程中要显示哪些操作系统选项,我们对启动选项的设置可以通过修改boot.ini文件中相应内容实现。 在Vista和Windows7中,微软引入了一种全新的boot loader架构, Windows Boot Mana ger (Bootmgr.exe)。与Ntldr严重地依赖于硬件不同的是,Vista和Windows7中的新架构可以实现完整的硬件独立性,且能够与多种操作系统无缝结合,让Windows Vista的启动/引导过程更加快速与安全。同时,将之前Windows 系统中由Boot.ini管理的内容移交给新的Boot Configuration Data (BCD : 启动设置数据),当然,也提供了新的启动选项编辑工具,BCDEdit (BCDEdit.exe),来管理启动设置。 BCDEdit : Vista和Windows 7启动设置编辑工具 在传统的基于BIOS的计算机中,如果只安装Vista和Windows 7,除了极早期的Vist a和Windows 7测试版本外,您将会发现 Boot.ini 文件已经彻底从系统中消失;如果系统中安装了Vista和Windows 7和之前的WIndows系统如Windows XP,虽然仍可找到 Boot.i ni 文件,不过,这个文件只作用于那些系统,而不会对 Vista和Windows 7的启动有任何影响。 在基于EFI (Extensible Firmware Interface : 可扩展固件接口,以后采用这种接口的PC会越来越多 )的计算机中,Boot.ini 文件则更不复存在,在基于EFI的系统中,启动选项被贮存在主板的存储器中。此时要修改启动选项,要么通过能够读写NVRAM的工具如N vrBoot,要么使用上文提到的BCDEdit。 由此可见,在Vista和Windows 7中,想要再像之前Windows XP中那样通过一个简单的文本编辑器来修改Boot.ini的方式来管理启动选项已经不可能了,要对启动设置进行修改,只能使用命令格式相对要复杂得多的BCDEdit。 此外,微软也在Vista和Windows7中提供了可通过WMI (Windows Management Instr umentation : Windows管理规范)调用的 BCD 类,通过它可以用编程的方式修改BCD数据,不过,相信对绝大多数用户而言,这更是不可能的任务。 启动BCDEdit 需要注意的是,BCDEdit不是一个运行于图形界面下的程序,而是一个命令行工具,该文件 (Bcdedit.exe) 位于“\Windows\System32”目录下。

win7硬盘安装详解(可格式化)

1.下载cn_windows_7_ultimate_x86_dvd.iso 最好下载纯净版,官方原版什么的。 2.用winrar或者虚拟光驱解压或提取到d盘根目录文件夹为D:\win7 3.把文件夹中的boot.wim和boot.sdi复制到d盘根目录,解压后D:\win7(boot.wim在sources 文件夹可以找到,boot.sdi在boot文件夹可以找到) 4.用记事本保存下列文字,该记事本文件名为winre.bat(txt格式改成bat格式) @echo off REM REM {ad6c7bc8-fa0f-11da-8ddf-0013200354d8} REM set RAMDISK_OPTIONS={ad6c7bc8-fa0f-11da-8ddf-0013200354d8} REM REM {572bcd56-ffa7-11d9-aae0-0007e994107d}, GUID for the WinPE boot entry REM set WINPE_GUID={572bcd56-ffa7-11d9-aae0-0007e994107d} REM REM Set Timeout REM bcdedit.exe -timeout 5 REM REM Create Ramdisk device options for the boot.sdi file REM bcdedit.exe -create %RAMDISK_OPTIONS% -d “Ramdisk Device Options” -device bcdedit.exe -set %RAMDISK_OPTIONS% ramdisksdidevice partition=D: bcdedit.exe -set %RAMDISK_OPTIONS% ramdisksdipath \boot.sdi REM REM Create WinRE boot entry REM bcdedit.exe -create %WINPE_GUID% -d “Windows RE” -application OSLOADER bcdedit.exe -set %WINPE_GUID% device ramdisk=[D:]\boot.wim,%RAMDISK_OPTIONS% bcdedit.exe -set %WINPE_GUID% path \windows\system32\boot\winload.exe bcdedit.exe -set %WINPE_GUID% osdevice ramdisk=[D:]\boot.wim,%RAMDISK_OPTIONS% bcdedit.exe -set %WINPE_GUID% systemroot \windows bcdedit.exe -set %WINPE_GUID% detecthal yes bcdedit.exe -set %WINPE_GUID% nx optin bcdedit.exe -set %WINPE_GUID% winpe yes bcdedit.exe -displayorder %WINPE_GUID% /addlast

中华易第五期 李涵辰

中华易第五期李涵辰 中华易第五期 分析日干旺衰、八字分析、大运流年与命局的作用关系 例一:2003年学习班学员命例 比枭日元印 辛卯己亥辛酉戊戌(子丑空) 印杀官财才 戊戌丁酉丙申乙未甲午 分析日干旺衰,定格局,区分用忌神。 辛金日干生于亥水月,月令亥水泄日干,日干弱于月令,日干在命局中有50%弱的可能,日支酉金本为帮身的字,月令亥水泄日支酉金,时支戌土脆日支酉金,日支酉金无力帮日干,日干弱。 日干弱断定了,但格局却不能立即准确断定确切,因为日干弱时格局有两种可能:身弱用印比、从弱格。年干辛金与日干隔不作用,不帮日干辛金。月干己土在局中无力无根,不能帮扶日干。时干戊土正印坐下有戌土为根帮扶,戊土正印有力生日干辛金,在《八字预测真踪》中涵辰说道,印在局中有根不从弱,所以断本命身弱用印比,时干戊土为用神。根据本命局的特殊组合,月干己土反断为忌神,年干辛金泄

月干己土对日干起了好作用,年干辛金为用神。 时干戊土为正官,为用神靠近日干,官命。在戊土旺时提升。月干己土偏印为忌神,在己土弱的大运上会有名气。 丙申大运中,丙火大运同性生时干戊土,同性作用力大,本大运戊土有力,正官吉,本大运中可提升。在涵辰八字预测体系中有一断语:同性作用力大,异性作用力无。丙火不生月干己土,本运中己土弱,己土为偏印,为名气,弱时出名,本运中日干本人名声好。月干己土还代表偏业、偏财,本运中己土忌神弱,可断本运中偏业吉,发偏财。 日干辛金为时干正官的工作环境,日干辛金旺制时干戊土时,工作环境不好。丙火大运不克日干辛金,日干辛金旺,有力制时干戊土对戊土正官起了坏作用,本运中工作相对较艰苦。丙火同样也不克年干辛金,年干辛金为朋友,辛金旺时,朋友对我关照多,辛金旺制月干己土,朋友在偏业方面给了我帮助。 丙申大运中,时干戊土旺,正官吉,大运丙火旺的流年上会升官。我们会很容易地断在76、78、84年提升。答:78年升为团支部副书记。 丙申大运/戊午流年 丙火与戊土为虚实作用,大运流年虚实作用时,首先以实被作用论。虚神丙火大运生流年实神戊土,戊土旺当官。午火流年克申金大运,申金弱不耗局中戌土,戌土旺,正官的

相关文档
最新文档