基于GAE的权限管理系统10 Beta参考文档.docx

上传人:b****6 文档编号:7348805 上传时间:2023-01-23 格式:DOCX 页数:33 大小:1.94MB
下载 相关 举报
基于GAE的权限管理系统10 Beta参考文档.docx_第1页
第1页 / 共33页
基于GAE的权限管理系统10 Beta参考文档.docx_第2页
第2页 / 共33页
基于GAE的权限管理系统10 Beta参考文档.docx_第3页
第3页 / 共33页
基于GAE的权限管理系统10 Beta参考文档.docx_第4页
第4页 / 共33页
基于GAE的权限管理系统10 Beta参考文档.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

基于GAE的权限管理系统10 Beta参考文档.docx

《基于GAE的权限管理系统10 Beta参考文档.docx》由会员分享,可在线阅读,更多相关《基于GAE的权限管理系统10 Beta参考文档.docx(33页珍藏版)》请在冰豆网上搜索。

基于GAE的权限管理系统10 Beta参考文档.docx

基于GAE的权限管理系统10Beta参考文档

基于GAE的权限管理系统1.0Beta

参考文档

桂林电子科技大学CSIP软件部

蒋丹枫

2011-1-18

1GAE简介3

1.1什么是GAE3

1.2GAE的特点4

1.3GAE支持的语言4

2如何将项目部署到GAE上7

2.1第一步,注册GoogleAccount7

2.2第二步,在GAE上创建Application空间7

2.3第三步,创建简单的GAE项目8

2.4第四步,部署Application到GAE9

2.4.1利用集成GAE插件的eclipse工具部署Application9

2.4.2命令行方式部署Application10

3基于GAE的WebApplication项目开发11

3.1开发环境搭建11

3.1.1使用Google提供的eclipse插件11

3.1.2MyEclipse开发环境配置12

3.2WebApplication目录结构13

3.3对象关系映射14

3.3.1一对多关系映射15

3.3.2多对多关系映射20

3.3.3ID生成策略20

3.4分页查询22

3.5树状结构存储和展现23

3.6整合Struts225

3.7整合JSTL26

4GAE项目开发中需要注意的问题26

5基于GAE的权限管理系统的设计与实现29

1GAE简介

云计算概念是由Google提出的,这是一个美丽的网络应用模式。

狭义云计算是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源;广义云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的服务。

这种服务可以是IT和软件、互联网相关的,也可以是任意其他的服务,它具有超大规模、虚拟化、可靠安全等独特功效;“云计算”图书版本也很多,都从理论和实践上介绍了云计算的特性与功用。

云计算(CloudComputing)是网格计算(GridComputing)、分布式计算(DistributedComputing)、并行计算(ParallelComputing)、效用计算(UtilityComputing)、网络存储(NetworkStorageTechnologies)、虚拟化(Virtualization)、负载均衡(LoadBalance)等传统计算机技术和网络技术发展融合的产物。

它旨在通过网络把多个成本相对较低的计算实体整合成一个具有强大计算能力的完美系统,并借助SaaS、PaaS、IaaS、MSP等先进的商业模式把这强大的计算能力分布到终端用户手中。

CloudComputing的一个核心理念就是通过不断提高“云”的处理能力,进而减少用户终端的处理负担,最终使用户终端简化成一个单纯的输入输出设备,并能按需享受“云”的强大计算处理能力!

云计算的核心思想,是将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务。

(XX百科)

云计算这一概念被提出之后,很多知名IT公司都相继推出或者准备推出自己的云计算平台产品,如亚马逊的AWS/EC2、微软的WindowsAzure、Adobe公司的Flash云平台服务、阿里巴巴的阿里云等等。

虽然云计算有席卷天下之势,但还处于起步阶段,有待于发展。

目前对国内开放并且有免费配额的只有Google公司的GAE。

1.1什么是GAE

GAE(GoogleAppEngine)是Google云计算的一部分,是一个互联网应用服务引擎,开发人员可以使用GAE的API开发互联网应用,而带宽、主机全都不用担心,Google都提供给你了。

目前免费用户拥有500M存储空间、每月500万次PV,对于一般的应用应该足够了。

你可以用GAE来托管你的开心网、校内的应用,不用再为没有主机发愁了。

  相信会有一天,有很多开源的GAE应用可供使用,有GAE版的wordpress,GAE版的Discuz,GAE版的Mambo等等。

我们不用再为建设一个小型网站去租用主机,不用去选择托管商,不用管是电信还是网通、台湾还是美国,不在丢出白花花的银子。

从架构上看,GAE也是非常值得学习的。

GAE提供了一套API,帮助你获取网络数据、发送邮件、数据存储、图片操作、缓存数据,相信以后还会有更多的API推出。

开发人员在GAE的框架内开发,不用再考虑CPU、内存、分布等复杂和难以控制的问题,初级的程序员按照GAE的规范也可以写出高性能的应用。

当然,实现高性能也是有代价的,如不能使用socket,文件操作,数据查询必须有索引,不支持同时两个不等式做条件的查询等。

对于开发而言,多了些约束,少了些选择,可以让开发更加简单,更关注业务。

(XX百科)

GAE主页

1.2GAE的特点

GoogleAppEngine是Google推出的一项WebHosting服务,可以让您非常简单地创建Web应用,免费建立个人网站。

相比其他的WebHosting服务,GAE有下列独到之处。

1.将Web应用部署到Google的基础设施之上。

Google的各种服务,如搜索引擎、Gmail等都是运行在Google成千上万的服务器上的,具有强大的伸缩性和扩展性。

当应用部署到GAE后,就会和Google的所有应用一样,运行在相同的硬件平台上,并且自动具有高伸缩性和扩展性。

诸如在Web应用中经常会使用的负载均衡、集群等技术,GAE都会帮您搞定。

2.提供数据存储服务。

GAE中已经提供了自己的一种存储服务--Datastore。

这样,在部署Web应用时,就不需要考虑数据库的安装、调试等工作,也不需要考虑数据库存储空间的问题(因为datastore基本上可以理解为一个存储空间无限大的数据库),这样会节省我们大量的工作。

3.集成了GoogleUser认证和Gmail等服务。

GAE中集成了Gmail、GoogleUser认证、URLFetch、Memcached及图片操作(PIL)等多种API,可以让Web应用非常方便地使用Google的各种服务。

4.GAE几乎是免费的。

GAE服务分为免费和付费两种,差别在于资源的配额不同。

每个用户可以免费创建10个应用,每个应用的文件数量不超过1000(笔者亲自测试为3000)个,每个文件大小不超过1M,存储空间为500M。

CPU、带宽等资源大约可以支持每月500万的PV。

对于超过这些配额的应用,GAE会进行收费。

对于大部分的Web应用来说,每月500万的PV已经相当大了,所以GAE可以说几乎是免费的。

另外服务限制的另一示例是查询返回的结果数,一个查询最多可返回1,000条结果。

(以上均来自互联网)

1.3GAE支持的语言

Google于2008年4月8日正式发布GAE平台,当时只支持Python语言。

整整一年之后开始支持Java,相信在不久的将来会提供更多的语言支持,特别是对PHP的支持一直受到很多程序员的期待。

原引国外论坛的程序员的话说就是:

PHPsupportisamust!

笔者对于Python不是很了解,因此热衷于熟悉的Java语言。

而GAE对于Java语言平台的很多框架和技术都存在很多限制。

以下是GAE对Java平台的支持清单:

JavaEnterpriseEdition(JEE)

不支持完整的JavaEE规范,但是支持很多独立的部分.

Servlet

支持version2.4,包括HTTPS.

JavaServerPages(JSP)

基本上是完全支持,包括JSTL.

JavaPersistenceAPI(JPA)

支持.但实际开发过程中遇到很多问题,支持程度没有JDO好,GAE的Eclipse插件默认使用的就是JDO,而不是JPA。

JavaMail

支持,但有一些限制.

JavaBeans™ActivationFramework(JAF)

支持.

XMLProcessing

支持,包括 DOM,SAX,和XSLTAPIs.

JavaServerFaces(JSF)

未知Unknown.

Java™AuthenticationandAuthorizationService(JAAS)

未知Unknown.

JavaDatabaseConnectivity(JDBC)

不支持-theAppEngine数据存储不是关系型存储,使用JDO或JPA.

WebServices

目前不支持JAX-RPCorJAX-WS.

JavaManagementExtensions(JMX)

不支持.

JavaEE™ConnectorArchitecture(JCA)

不支持.

JavaNamingandDirectoryInterface(JNDI)

不支持.

JavaMessageService(JMS)

不支持.替代包括HTTP-based通讯架构.

EnterpriseJavaBeans(EJB)

不支持.替代entitybeans包括JDO和JPA.

RemoteMethodInvocation(RMI)

不支持.替代包括HTTP-based通讯架构.

OtherLibraries

Spring

支持。

可以使用SpringonAppEngine,作为例子,可以查看autoshoppedemo.但经过亲自测试,关于事务的处理支持度不好。

Hibernate

不支持。

目前不能直接使用Hibernate。

AppEngine的数据存储和SQL的差别非常大,所以无法让标准的Hibernate运行在AppEngine中。

但是AppEngine支持JPA,你能转换Hibernate代码使用JPA.

Struts2

不支持,但可以通过修改安全策略的方法使GAE支持Struts2。

GAE对于安全方面的验证过于严谨,默认情况下不支持Struts2。

ApacheCommonsFileUpload

 streamingAPIaddedinversion1.2.1能够运行.

传统的API不支持,因为依赖java.io.File.

(以上清单来源于互联网)

2如何将项目部署到GAE上

由于GAE对很多流行的JavaEE平台相关技术都不支持,所以很遗憾没有办法直接将原有的JavaWeb项目直接部署到GAE上,必须经过二次编码改造。

为了能让读者快速体验GAE,这里先简单介绍一下如何快速将WebApplication项目部署到GAE上。

在开发部署WebApplication项目之前,必须注册googleaccount并在GAE上创建爱你Application的部署空间。

具体项目开发教程官方链接地址:

2.1第一步,注册GoogleAccount

首先需要注册一个谷歌账号,必须是Email地址,可以直接申请goolge的gmail邮箱或直接用其他的邮箱注册。

注册页面链接:

2.2第二步,在GAE上创建Application空间

(1)登录Google账户

(2)点击MyApplications,进入创建Application页面:

(3)点击CreateApplication按钮,进入输入页面。

给Application指定标识符(Indentifier)和标题:

注意,每个账号最多能建立10个Application。

另外,标识符非常重要,必须全球唯一,而且今后开发的Application发布到GAE上时需要在配置文件中指定对应的标识符以及版本号,每个发布到GAE上的Application都可以有不同的版本号。

(4)创建Application过程中要用到手机短信验证,注意要在手机号前加前缀+86。

其余的不再赘述。

2.3第三步,创建简单的GAE项目

安装好GAE开发插件的Eclipse工具栏中会出现下图中圈出来的几个图标:

点击第一个蓝色的Google图标,即可新建webapplication项目

注意要把上图中UseGoogleWebToolkit选项取消掉,否则会报错。

新建好以后的webapplication项目的目录结构和一般的JavaWeb项目一样,只不过多了一些配置文件。

2.4第四步,部署Application到GAE

2.4.1利用集成GAE插件的eclipse工具部署Application

点击eclipse工具栏上像飞机引擎一样的图标,会弹出部署到GAE的输入对话框,如果你的application没有指定ID,会提示你先去指定ID,否则工具不知道你要上传的application是部署到GAE上的哪个Application空间。

同时要求输入GoogleAccount的用户名(Emial)和密码。

点击AppEngineprojectsetttings…链接,弹出另一个输入对话框,要求输入ApplicationID以及Version。

这里的ApplicatinID就是在GAE上创建的Application空间的Indentifier,做为互联网访问的URL的前缀(后缀均为),必须唯一。

填写完毕后点击OK,第一个对话框的错误提示消失,随即输入GoogleAccount的用户名(Emial)和密码,点击Deploy按钮即可上传至GAE。

2.4.2命令行方式部署Application

首先打开配置文件appengine-web.xml,在标签中填写ID和版本号:

保存后打开命令行窗口,进入GAE-JAVA-SDK下的bin目录,执行命令appcfgupdatewar(war指的是应用下的war目录,根据实际情况指定)即可上传,过程中会要求输入GoogleAccount的账号密码,对应输入即可。

需要注意的是,不论使用哪种方式部署,每个Application免费上传的配额是3000个文件,多于3000个会提示上传失败,笔者就遇到过这样的问题。

因此建议在开发程序的时候,应尽量减少文件数。

什么设计模式、分层思想等等在GAE平台都不大适用,因为会造成文件过多而无法部署。

3基于GAE的WebApplication项目开发

谷歌GAE/JDO开发文档

apache-JDOQL开发文档http:

//db.apache.org/jdo/jdoql.html

3.1开发环境搭建

3.1.1使用Google提供的eclipse插件

(1)下载eclipse3.5javaEE版;

(2)下载GAE-JAVA-SDK和eclipse开发插件;

下载地址:

点击GoogleAppEngineSDKforJava下载,下载页面地址:

在这里可以下载GAE的SDK(GoogleAppEngineSDKforJava)、开发插件(GooglePluginforEclipse)以及开发文档(GoogleAppEngineDocumentation)。

目前最新版本是1.4.0。

是有关如何安装和使用GAE插件的详细介绍。

用户可以根据自己的实际情况下载合适的版本,建议使用eclipse3.5

根据笔者亲自测试,每个插件版本都有相同的问题:

提示com/google/appengine/tools/enhancer/Enhance类找不到。

而且安装GAE插件后的Eclipse也极其不稳定,运行10分钟左右就会死掉,经常需要重启。

几经折腾,后来改用笔者一直习惯使用的IDE平台MyEclipse,版本为8.6。

我们可以借助GAE自动生成的配置文件和代码目录结构转移到MyEclipse中。

3.1.2MyEclipse开发环境配置

可以在MyEclipse新建类库Appengine-java-sdk-1.4.0,添加所需要的jar包:

appengine-java-sdk-1.4.0\lib下的appengine-tools-api.jar

appengine-java-sdk-1.4.0\lib\user下的所有jar包

appengine-java-sdk-1.4.0\lib\user\orm下的所有jar包

appengine-java-sdk-1.4.0\lib\shared下的所有jar包

appengine-java-sdk-1.4.0\lib\shared\jsp下的所有jar包

但是为了在后台命令行能直接运行服务器,需要将以上的包拷贝到war/WEB-INF/lib目录下。

将GAE插件自动生成的配置文件全部拷贝到MyEclipse创建的项目环境中来,包括src目录下的log4j.properties、META-INF下的jdoconfig.xml,War目录中WEB-INF下的appengine-web.xml、logging.properties以及web.xml。

另外,在没有GAE插件的自动构建功能的情况下,我们需要ant工具的帮助,配置文件build.xml可以在SDK中的例子中找到,如appengine-java-sdk-1.4.0\demos\guestbook,拷贝到项目中后修改SDK的路径即可。

3.2WebApplication目录结构

Eclipse插件生成的webApplication目录结构如下图所示:

其中jdoconfig.xml是JDO的持久化配置文件,appengine-web.xml是GAE特有的web配置文件,主要配置ApplicatinID、版本号等相关信息。

web.xml即传统JAVAWEB项目配置文件。

logging.properties为跟随appengine-web.xml的日志属性配置文件,这和src目录下的log4j.properties配置文件有何功能上的区别笔者也没有去具体深究。

appengine-web.xml文件记录的是application的标识符和版本号

另外需要注意的是,如果系统中对数据进行查询用到索引,则在war/WEB-INF目录下还有datastore-indexs.xml配置文件,配置autoGenerate="true"即可使用开发服务器自动产生的索引。

但是经过笔者实际部署到GAE,发现有的索引会部署失败,即在开发服务器上运行没有问题,update到GAE引擎上就出现问题,查看错误日志才知道是索引缺失,将开发环境中自动生成的文件datastore-indexes-auto.xml中的索引拷贝到datastore-indexs.xml文件中,然后重新部署,问题解决。

有关索引的配置,请参考官方文档:

当然,对GAE熟悉的朋友可以手工创建项目,按照其规定的目录结构生成并完成相关配置即可。

3.3对象关系映射

有关对象关系映射的说明,GAE的开发文档上已经说的很清楚,但是如果严格按照文档上的例子编写程序,会遇到各种各样莫名其妙的问题。

可以说,Google给出的GAE开发文档表面上没有问题,但实际操作起来有较多的错误,或者说GAE对Java的支持还存在众多的BUG。

Google官方文档只说明了使用的数据库持久化平台是DataNucleus,并没有明确指出后台使用的是哪一种数据库,但是根据Google的习惯以及网上一些学习者的说法,GAE使用的应该是Google内部一直在使用的分布式的结构化数据存储系统,即被Google内部称之为Bigtable的数据库。

据了解,Bigtable和传统的关系型数据库有着本质的区别。

Bigtable是为了分布式的海量数据业务处理而存在的,通常是处理分布在数千台普通服务器上的PB级的数据,所以本身在设计上就与传统的关系型数据库有所区别。

因此Bigtable和关系型数据库相比有很多与众不同的地方。

例如,Bigtable在数据存储上不支持事务,只保证对单条记录的原子性。

因为支持事务需要考虑串行化、事务的回滚等、死锁检测(一般认为,分布式环境中的死锁检测是不可能的,一般都用超时解决)等等复杂问题,会增加设计的复杂度,而且BigTable的开发者通过调研后发现其实大家对事务都没什么需求。

这就是为什么笔者在开发测试过程一直被事务提交问题困扰的原因,网上很多研究GAE的人解释说GAE只支持一个事务操作一个实体,其实是Bigtable不支持事务的缘故。

Bigtable还有其他的特性,有兴趣的读者可以去详细地了解。

既然Bigtable不是关系型数据库,当然就不存在所谓的对象关系映射(O-R-Mapping),根据官方的说法应该叫实体关系(EntityRelationship)。

但是为了迎合我们的习惯,还是沿用“对象关系映射”这一说法,便于理解。

除了GAE以外,Google的很多项目使用Bigtable存储数据,包括Web索引、GoogleEarth、GoogleFinance。

其实不管GAE后台使用的是什么数据库,只要给我们提供API,能实现一系列数据库操作即可。

像Hibernate一样,不仅有自己一套API,还可以自动生成数据库表,开发人员可以不用考虑数据库的具体设计,而是站在面向对象的角度去设计整个系统。

但是目前国内很多程序员都习惯了传统的数据库设计模式,即先画好数据库表的E-R图,规范化字段的名称和类型等一系列设计之后才开始编写程序,有利于对数据库的进一步优化。

但这也和编码前的UML设计工作是有些重复的。

GAE屏蔽到了数据库设计这一层,所以开发者要从传统的设计思路中转变过来。

笔者在网上找到一个实现对象关系映射的办法,也是在GAE开发文档的基础上修改的,但是还是存在诸多限制。

个人认为如果没有绝对的必要,直接使用冗余字段来维护实体之间的关系更加直接简便。

3.3.1一对多关系映射

以企业(Department)-员工(Employee)的一对多关系为例。

//一的一方企业类Depa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1