公告

纯技术、纯爱好

我最近发表的评论

博客统计信息

用户名:achineseman
文章数:12
评论数:8
访问量:21406
无忧币:20
博客积分:561
博客等级:1
注册日期:2007-04-03

理解什么是框架
框架,即framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。
可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。
框架的概念最早起源于Smalltalk环境,其中最著名的框架是Smalltalk 80的用户..
类别:技术|阅读(615)|回复(2)|(1)阅读全文>>
“迭代”的概念,迭代:是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。
跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。
迭代式开发:迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
“迭代过程”:是这样一个过程,涉及到对一连串可执行的发布的管理。
“增量过程”:是这..
类别:技术|阅读(1034)|回复(1)|(0)阅读全文>>
2008-09-08 14:18:46
布局模板是处理portlets在页面上如何排放的方式。布局模板生成页面内容,在页面上的一个较大区域内能够
拖拽portlets。Liferay门户系统内置了几个页面布局模板,然而,你如果有复杂的页面(尤其是像首页这样的),你也许想要
定制自己的页面模板。
页面布局模板能够很容易的以“插件”的方式创建,他们包含了几个由简单的表格和CSS构成的文件,以及一个图像文件用于展示
局面的外观,这个图像在用户选择模板的菜单中被展示给用户。
类别:liferay|阅读(914)|回复(0)|(0)阅读全文>>
创建布局模板的做法类似与创建portlets和主题(theme),在插件开发的SDK中由一个布局的文件目录layouttpl ,所有的布局
模板都位于这个文件夹。要创建一个新的布局模板,可以像创建一个portlet和theme一样在这个文件夹下运行一个ant命令,在mac和liunix
上如下:
./create.sh <project name> “<layout template title>”
例如创建一个工程目录未3—columns和标题为“3 Columns”的布局模板:
./create.sh 3-columns “3 Columns”
在windows环境下应该..
类别:未分类|阅读(1068)|回复(2)|(0)阅读全文>>
Communities,社区,也就是组(在代码中写作:Groups)。
用户可以是一个或多个"组"(Groups)的成员."系统组(System Group)"是有系统自动创建的一个基本设置。这个组在代码
com.liferay.portal.service.impl.GroupLocalServiceImpl.checkSystemGroups() 163行被加入到数据库中。
每个用户可以有一个属于自己的私有组(例如:为每个用户创建一个组,这个组只有该用户这一个用户),之所以这样做
是因为,每个组都有自己的布局(Layout)设定,一个Layout表示了一个门户(Portal),每个用户都可以有自己的私有的门户. 每..
类别:liferay|阅读(807)|回复(0)|(0)阅读全文>>
2008-09-05 17:59:42
1、liferay中使用到的关键技术
这些技术是在liferay中使用到的(你知道的越多,做liferay开发越简单^_^)
JSR 168 (Java Portlet Specification) [url]http://jcp.org/aboutJava/communityprocess/final/jsr168/index.html[/url]
J2EE (Servlets and .JSPs, optionally EJBs if transactions needed)
Tomcat or JBoss (or numerous other application servers) [url]http://tomcat.apache.org/[/url]
Any SQL database (mySQL or numerous other SQL databases)
Struts + Tiles [url]http://struts.apache.org/[/url] (while..
类别:liferay|阅读(1227)|回复(0)|(0)阅读全文>>
2008-09-05 17:38:09
---理解和改进liferay
“guest”用户实际是一个匿名用户,在门户第一次被访问时,如果没有用户被识别(登录),这个“default”用户(也可以称作“guest”)被创建。这个用户被分配给一个com.liferay.portal.model.User 对象(存在在数据库中,hibernate),guest用户由一个默认的user ID,并且被分配值默认的组(group),具有默认的layout。一旦被保存在数据库里,这个默认的用户能够通过下面的代码找到:
 UserLocalServiceUtil.getDefaultUser(companyId).
这个默认用户的ID是有门户的“公司(company)”ID加上“.default”..
类别:liferay|阅读(849)|回复(0)|(0)阅读全文>>

这篇文章讲解了liferay中使用的权限管理系统的内部细节,涉及到数据库表以及实体之间的管理和权限管理的逻辑。
下面的ERD图(实体关图)展现了所有涉及到的实体关系:
liferay
主要实体
首先从表或者本人更喜欢称作实体的表开始,换言之,他们界定的实体定义了关于权限和角色的东东。
User_:用户
最明显主要的一个实体就是“用户”(Users)了。关于权限的一个总是被提及的问题是:"Does this user have permission to do this action on this thing?" ,用户就是执行某些操作完成某些任务的人。
Organization_:组织
用户只能够属于一个组织(Organization)或一个地区(Location)。这里使用了一个相同的数据模型表示Organzation和Location。基本上如果
列parentOrganizationId的值是-1,则表示一个Organization,否则就是一个Location。在逻辑上一个Location的父必须是一个Organization。
用户(Users)能够继承所属Organization或Location的权限(permissions/roles)
UserGroup:用户组
用户可以属于一个或多个的用户组,用户组仅仅是一堆用户的集合,不属于任何公司、任何组织、任何地区,仅仅只是为了方便分配角色或权限,而将具有共性(比如:具有相同的岗位或职务等)的一些用户进行分组。,用户能够从用户组继承权限(permissions/roles)。当前parentUserGroupId列未使用。
Group_:组
组Group)现在称作社区(Communities),用户可以属于一个或多个的社区,并且能够集成所属社区的权限和角色。注意在Group_表中,存在一个className和classPk列。如果某条记录的这两个列的值为空,则该条记录指的是一个社区。如果className的值是com.liferay.portal.model.User,则该条记录为一个私有的用户社区(只允许Power Users).如果className 的值是 com.liferay.portal.model.Organization,则这条记录表示了一个组织(Organization)或地区(Location)如果className 的值是 com.liferay.portal.model.UserGroup则表示这条记录记录的是一个UserGroup(用户组)。可以说:组(Group)是Organization和Location已经UserGroup的集合。
存在组(Group)用于记录Organizations/Locations 和UserGroups的原因在于:这样可以简化其他实体(比如权限(permissions)和角色(role))同用户(Users)之间的关系。
权限和角色(Permissions and Roles)
好,现在让我们看看这些表是怎样和权限关联起来的,首先我们要看一下“权限”(permission)是如何定义的,简单地说,权限就是在资源(RESOURCE)上的操作(ACTION)。权限能够被直接授予用户(USER)或通过不同的方式被继承。角色是权限的集合。让我们从“Resource_”表开始
Resource_ 表:
Resource_ 一个资源可以是在prtal中代表一个对象的,你要在上施加权限的任何东西。可以是一个portlet,一个社区(community),一个用户(User),一个消息公告,一个Blog实体...任何都可以。让我们先快速浏览一下Resource_表格的各个列:
    * resourceId = 资源的标识
    * companyId = 资源所属的公司ID
    * name = 资源对象的描述,如果资源描述的是一个portlet对象,则为这个portlet对象的portletId.如果是一个class, 则为带包名的class全名称。
    * typeId = 在当前,只是用来描述classes的权限,因此该列的值总是"class". 然而,在将来, 也许回用来描述files或folders授权,因此 typeId 的值可能会是 "file" or "folder".
    * scope = 这里可能的值是"company" (指 企业级"Enterprise Scope"), "group" (指 社区级"Community Scope"), or "individual" (指私人级"Individual Scope"). Why the different naming conventions? Because things change... The numeric values for scope (as found in the database) can be found in the class com.liferay.portal.model.impl.ResourceImpl
Permission_ 表
如前所述,权限(permission)是在资源上施加的操作,因此Permission_表有actionId和resourceId这两个列,像预料的一样,这里的resourceId列引用Resource_表的resourceId列。然而,actionId列不存在对应的Action_表,所有的actionId定义在ActionKeys类中。如何在资源上定义一个新的操作?可以阅读权限的实现代码。
Role_ 表,这个表定义了角色,实际上,这里只有一个主要的列是“name”,这是因为角色(roles)必须有一个独一无二的名称。
Roles_Permissions 角色-权限表
这是连接权限和角色的关系表,没有这里的连接,角色就没有用了...他们仅是一下空的容器。
分配用户到社区和组织(communities and organizations)
Users_Groups 表:是用户(User)和社区(Community)的关系表。你也许感到困惑,为什莫这里没有className和classPK列在这张表中,
这样的话我们就能够处理所有的实体(例如社区Communites, 组织Organization/地区Locations, 用户组UserGroups)。这很难解释...(原文就是这样:...too hard to explain, but trust us...it's better this way.)
Users_Orgs 用户-组织表
连接用户 User 到一个组织(Organization)/地区(Location.)的关系表
Users_UserGroups
连接用户 User 到一个用户组(UserGroup)的关系表
分配角色和权限
Users_Permissions 用户-权限 表
直接连接一个权限(Permission)到用户(User)的关系表.
Users_Roles 用户-角色 表
连接角色(Role)到用户(User)的关系表,用户有所属角色的所有权限(通过Roles_Permissions)
Groups_Permissions 组-权限 表
连接一个权限permission 到一个组 Group的关系表.还记得在前面提到过,一个Group_记录能够表示社区(Community),组织(Organization)/地区(Location)或是用户组(UserGroup)吗?好,通过这个表可以之间关联到所有这些实体,当然属于这些实体的用户能够继承他们的权限,需要注意的是,没有Orgs_Permissions 或 UserGroups_Permissions 表。Groups_Permissions足够处理这些事情,因此才是现在看起来比较简单
Groups_Roles 组-角色 表
连接角色(role)到组(Group)的关系表,像Groups_Permissions一样,组(Group)可以是社区、组织/地区或用户组(UserGroup),用户能够继承这些“组(Group)”对应的角色权限。
Groups_Orgs 组-组织 表
是连接组织(Organization)/地区(Location)的关系表,换言之,一个管理员(admin)能够分配任何组织或地区的所属用户到一个社区。
结果是:分配给社区的任何权限或角色能够被在组织或地区中选择的用户继承。
Groups_UserGroups 组-用户组
实际上像Groups_Orgs一样。只是针对UserGroup而已。
OrgGroupPermission 这个表在代码没有被使用到,实际上被用作“排除权限”,基本上来说,一个用户必须属于一个特定的地区(或组织,从liferay4.4开始)和一个特定的社区(Community)。虽然该表存在,但是在代码中并没有使用。
可以通过一个例子了解为什么这个选项是有用的,在一个社区(Community)中假设有一个留言板,管理员想要设置某一类的留言板能够给地区(Location)的用户留言,一次他点击“Permission”图标,选取了特定的地区(Location),现在所有的属于这个Location的用户都能够留言了,而不管他们是否属于这个社区。
在另外的场景下,管理员想要进行更多的限制,用户必须属于指定的组织才能发表留言,他就可以通过设置“排除权限”来完成。[/img]..
类别:技术|阅读(4204)|回复(1)|(0)阅读全文>>
2007-04-13 17:39:41
VideoLAN Client可以播放 MPEG-1、MPEG-2、MPEG-4、DivX、DVD/VCD、数字卫星频道、数字地球电视频道(digital terrestial television channels)、在许多操作系统下透过宽带 IPv4、IPv6 网络播放线上影片;此软件开发项目是由法国学生所发起的,参与者来自于世界各地,设计了多平台的支持,可以用于播放网络流媒体及本机多媒体文件,特别值得 一提的是它能直接播放未下载完整的多媒体文件,值得一试.
下载:VideoLan 0.8.6b test 1 for Windows (14.4 MB)
下载:VideoLan 0.8.6b test 1 for Linux (14.6 MB)
类别:未分类|阅读(94)|回复(0)|(0)阅读全文>>
2007-04-13 17:31:41
对于“非功能性需求”在需求分析阶段常常被忽略或没有被足够重视。尤其对于涉及到“数量”的地方常常时不加约束和笼统的给出甚至随意性的,这里给出一些可以采用的方法或应注意的事项
事务定义:一个业务流程可能会启动几个更小业务事务的实例,一个业务“流程”将由一个“应用程序”来实施,但它也可能由多个应用程序来实施。对于很多“数量”性的需求,都是需要确定业务量和大小信息,例如:
a、预计在一般时间和在高峰期将各有多少用户使用各个业务流程或应用程序?
B、什么时候是高峰期(根据情况确定每天、每周、每月等的高峰期..
类别:未分类|阅读(2198)|回复(1)|(0)阅读全文>>
 <<   1   2   >>   页数 ( 1/2 )