Electronic Joint Business

Solution for E-Business

hibernate

多租户技术与 Hibernate 4.0 (一)

在多租户技术中,租户(tenant)是指使用系统或电脑运算资源的客户,其所使用的是供应商所开发或配置的应用系统或运算资源等。供应商所设计的应用系统会容纳数个以上的用户在同一个环境下使用,为此应用程序与运算环境必须要特别设计,除了可以让系统平台可以允许同时让多份相同的应用程序同时执行外,保护租户数据的隐私与安全也是多租户技术的关键之一。

多租户是决定 SaaS 效率的关键因素。多租户技术在实际业务上运用的成功且广为人知的案例之一,是由 Salesforce.com 所创建的 CRM 应用系统。在这样一个典型的企业 SaaS 环境中,用户是指某个特定组织的员工组成的多个组,这个组织就是所谓的租户。

在未出现 SaaS 之前,组织会购买一个软件应用程序供自己的成员使用;组织的员工就是应用程序的用户,而该组织就是所有者。在 SaaS 和云的世界中,许多组织都将使用同一个应用程序,组织是租户,而非所有者,但是组织的员工仍然是用户的身份。每名用户都具体关联到一个特定租户(组织),而 SaaS 为每个租户分别提供一份应用程序的副本,以供他们的用户使用,同时只允许每个组织自己的成员访问其组织的数据。

可见,多租户技术有下列特色:

  • 由于多个租户共用一个应用程式或运算环境,其相关的硬件成本,操作系统与相关软件的授权成本都可由多个租户一起分担,对供应商来说可以有效降低成本。
  • 通过不同的数据源管理手段,多租户技术的数据可以用不同的方式进行数据隔离,而良好的数据隔离方法可以降低供应商的维护成本(包含设备与人力),而供应商可以在合理的授权范围内取用这些数据分析,以作为改善服务的依据。
  • 多租户架构下所有使用者都共用相同的软件环境,因此在软件版本变动时可以只发布一次,就能在所有租户的环境上生效。
  • 具多租户架构的应用软件虽可定制化,但定制化难度较高,通常需要平台层与工具的支持,才可降低定制化的复杂度。

传统 Web 应用和 SaaS 应用的区别
传统 web 应用程序和支持云的 SaaS 应用程序的主要区别,在于两个容量利用特性:

>>> 阅读全文

 

, , , ,

Hibernate常见映射关系及例子

Hibernate关联关系映射比较庞杂而难以是正确配置正确的。这里我们用Person和Address作为例子,从单向关系映射开始,然后考虑双向关系映射,由浅至深讲述一遍典型的案例。
一、 单向关联(Unidirectional associations)

1. 多对一(many to one)
单向many-to-one关联是最常见的单向关联关系。
场景:每个公司员工,都有一个所在分公司的地址。每个分公司的地址可以分别为不同的员工所共有。

<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
not-null="true"/>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>

2. 一对一(one to one)
基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束

 

Spring 配置 1-2-3 之二 配置Hibernate

在上一篇介绍中,我们为SSH应用配置了许多基础设施,比如日志服务、数据源、环境设置等等,现在我们将开始配置最经常使用的两种数据库工具Hibernate和Ibatis。使用Hibernate 问题之一是使用Hibernate Framework访问数据库的客户应用必须依赖Hibernate APIs如Configuration, SessionFactory and Session. 这些个对象在应用代码中持续扩散。而且应用代码必须用手工维护和管理这些对象。但是在Spring的环境,业务对象通过IOC的帮助下是能够通过配置完成的,简单地说,一个对象状态能够从应用代码中分离。意思是现在使用Hibernate 对象作为Spring Beans是可能的,他们能够得到Spring提供的所有方便。

配置Hibernate
集成Spring与Hibernate依赖于以下这些Jars:

  • org.springframework.aop
  • org.springframework.transaction
  • aopalliance
  • org.springframework.orm
  • aspectjweaver
  • hibernate3
  • jta,dom4j,slf4j-api,ehcache-core

作为最佳实践,我们把所有与Hibernate相关的配置选项保存在/WEB-INF/settings/Hibernate.properties这个配置文件中。可以参考相应的文档进行编写。这些配置将传递给Hibernate的SessionFactory。

在Spring 2.0中,我们可以用新的Schema写法:

<util:properties id="hibernateProperties" location="/WEB-INF/settings/hibernate.properties">
                <prop key="hibernate.show_sql">true</prop>
        </util:properties>

注意,这里多配置了个属性“hibernate.show_sql” 只是为了展示如何用Schema写法中添加属性键值对而已,实际开发中,并不鼓励这么做。这样的写法和Spring 1.0的DTD写法是等价的:

>>> 阅读全文

 

,