本文档是个人亲身的开发总结,望能帮助有需要的朋友。
sakai2.7.0开发相关
一:安装 具体安装步骤请参考JAVAEYE网站中的网页 《710642_sakai2.7源代码及bigbulebutton安装手册》, 该文章详细说明了SAKAI2.7.0的安装、编绎、发布、运行等。需要注意的是各操作中的版本及参数设置, 如 JDK为1.5,TOMCAT为5.5,Maven为2.0等信息。 注意:使用MAVEN构建SAKAI2.7.0时,MAVEN的JDK版本需为1.5,经测试1.6或更高无法构建。 二:开发 前提,在第一步中的所有操作都已成功完成. 1:使用myeclipse的安装插件功能,从地址 http://source.sakaiproject.org/appbuilder/update/ ,该插件目前最新版本为0.8.8,但生成的却是2.6.0的配置。 下载并安装sakai app builder,该插件的功能主要是可以自动生成sakai项目的框架与简单示例, 详细使用信息请搜索. 2(可选):安装m2eclipse插件,该插件为eclipse的maven插件,用于导入maven项目,执行maven命令等功能. 在菜单栏中选择Help, 然后选择Install New Software…,接着你会看到一个Install对话框, 点击Work with:字段边上的Add按钮,你会得到一个新的Add Repository对话框, 在Name字段中输入m2e,Location字段中输入http://m2eclipse.sonatype.org/sites/m2e, 然后点击OK。Eclipse会下载m2eclipse安装站点上的资源信息。 等待资源载入完成之后,我们再将其全部展. 3(在第二步的基础上,可选):关闭IDE(myeclipse)自带的Maven插件功能,点击菜单栏中的Windows, 然后选择Preferences,在弹出的对话框中,展开左边的Maven项, 选择Installation子项,在右边的面板中,我们能够看到有一个默认的Embedded Maven安装被选中了, 点击Add…然后选择我们的Maven安装目录M2_HOME, 添加完毕之后选择这一个外部的Maven. 4:创建一个简单的JSP sakai项目. 42.1:新建一个sakai app project,Project Type为:JSP,Implementations为:Hello World app, Sakai version为:K1(2.6.x+),Maven version为:Maven 2.0 4.2:更改项目根目录下的pom.xml文件,找到 artifactId 为 master的位置,把它的 version 更改为当前使用的版本号(目前我们使用的是2.7.0) 4.3:定位到项目的 tool 目录下的pom.xml文件,把 <dependency> <groupId>org.sakaiproject</groupId> <artifactId>sakai-jsp-adapter</artifactId> <version>0.8-M2</version> <scope>runtime</scope> </dependency> 更改为如下: <dependency> <groupId>org.sakaiproject</groupId> <artifactId>sakai-jsp-adapter</artifactId> <version>0.8-M2</version> <scope>runtime</scope> <exclusions> <exclusion> <groupId>org.sakaiproject</groupId> <artifactId>sakai-tool-api</artifactId> </exclusion> </exclusions> </dependency> 把 <!-- Sakai util dependency --> <dependency> <groupId>org.sakaiproject</groupId> <artifactId>sakai-util</artifactId> <version>${sakai.version}</version> <scope>runtime</scope> </dependency>这部分给注释掉。 4.4:右键项目根目录,选择Run As-->Maven Install命令构建项目,成功执行后,刷新项目, 从项目的tool-->target目录考贝生成的 项目名-tool-版本号.war 文件到tomcat的WeppApp中, 启动Tomcat. 4.5:进入sakai,打开一个功能(具有"站点设置"菜单),点击 站点设置 ,在下面出现的列表中的功能, 选择刚发布的功能(名称与 项目-->src-->tool-->webApp-->tools-->sakai.项目名称.xml 文件中的 title 值一样), 选中它,保存所有后,在左边的菜单中即会出现项目. 4.6:修改web.xml文件中的 <!-- <init-param> <param-name>main-page</param-name> <param-value>/</param-value> </init-param> --> 解注释并改为: <init-param> <param-name>main-page</param-name> <param-value>/你想要的默认显示的页面地址</param-value> </init-param> ,不做该步,在第进入该tool时,显示为错误页面。 4.7:自动发布到tomcat中。 在myeclipse中,右键项目 选择Run As-->Maven build...,在弹出的对话框中, 找到Goals对应的输入框,输入命令: clean install sakai:deploy -Dmaven.tomcat.home=你的tomcat的根目录 -Dmaven.test.skip=如果需测试则为:true,反之为:false. 然后点击 Apply,再点击Run运行。通过以上操作, 当前的sakai应用(简单的sakai应用或完整的CRUD应用),sakai会自动按约定打好包,并自动布署到 tomcat中、加载、运行。 5:创建一个 CURD 的sakai项目. 5.1:新建一个sakai app project,输入一个项目名称,Project Type为:JSP, Implementations为:Full CRUD app,Options:可以不勾选EntityBroker, Sakai version为:K1(2.6.x+),Maven version为:Maven 2.0. 5.2:按照 “创建一个简单的JSP sakai项目” 的 2.2 一直到 2.3步。 5.3:进入 pack/src/webapp/WEB-INF 目录,修改 components.xml 文件中的bean配置: <!-- create a logic bean, give it the dao from above --> <bean id="org.sakaiproject.demo.logic.DemoLogic" class="org.sakaiproject.demo.logic.DemoLogicImpl" init-method="init"> <property name="dao" ref="org.sakaiproject.demo.dao.DemoDao" /> <property name="externalLogic" ref="org.sakaiproject.demo.logic.ExternalLogic" /> </bean> 为: <!-- create a logic bean, give it the dao from above --> <bean id="org.sakaiproject.demo.logic.DemoLogic" class="org.sakaiproject.demo.logic.DemoLogicImpl" init-method="init"> <property name="dao" ref="org.sakaiproject.demo.dao.DemoDaoTarget" /> <property name="externalLogic" ref="org.sakaiproject.demo.logic.ExternalLogic" /> </bean> 主要是因为它生成的dao属性的引用bean,不是我们dao属性接口的实现类。 该问题在在运行时侯才发现的,因我们的配置文件中有对该dao接口的实现 (org.sakaiproject.demo.dao.DemoDaoTarget),所以换成它即可。 5.4:找到位于impl\src\java目录中的PreloadDataImpl.java(如果有的话),修改方法preloadItems为如下: (看不到图片的请注释该方法里的代码即可)
5.5:参考2.6步骤,布置应用到tomcat中。如果tomcat目前是启动的,那先停止再启动, 因为sakai目前(当前的测试结纶)还无法热加载sakai的component组件, 因为在我们开发的 CRUD app中,是一部分是sakai的component组件, 它主要是用到加载到sakai的全局的bean容器中,以供其它的 app 调用。基于它无法自动热 加载component部分,所以才需要在用2.6中的命令布署后,重新启动一次tomcat。 5.6:把新开发的 CRUD 应用挂载到sakai中。 操作步骤请参考 2.5 步的操作说明。 注意:如果当前的CRUD应用没有包括当前使用数据的驱动, 请复制所操作的数据库驱动的jar包到tomcat的common的lib目录中。 sakai发布到本地/远程tomcat服务器: 在sakai工程的根目录使用maven命令:mvn clean install sakai:deploye -Dmaven.tomcat.home= 本地的tomcat根路径,如:d:\program files\tomcat 或者 网络路径 \\远程主机IP\tomcat根目录(前提你是有该机的能够创建文件权限的登录用户与密码)。
在 share中的TOOl API jar包中不能包含如:generic-dao(无法引用到的类,tomcat类访问层次限制)。
在开发sakai的tool中,其项目的主pom.xml文件中对API的依赖配制的scope 需为 provided,因为在impl与tool中的pom.xml中有对该主pom.xml文件继承,在这些文件中也对api做了 依赖配制,如果在构建时,没有声明在主pom.xml文件中声明api的scope为provided则会把api的jar包生成到impl与tool中,在运行时,出就出现api的类被两个不同的类加载器所加载 ,在获得sping对该类的bean时,就会出现ClassCaseException.
如果是jsp与servlet的tool,在jsp或servlet中需调用spring的 WebApplicationContextUtils来获得bean时,那么在tool中的pom.xml文件中需要对spring的jar包进行依 赖,该依赖的scope得为provided,否则在运行时就会出现 Context attribute is not of type WebApplicationContext: org.springframework.web.context.support.XmlWebApplicationContext@26f5a7: display name [Root WebApplicationContext]; startup date [Fri Jun 17 08:32:31 GMT 2011]; parent: org.sakaiproject.util.SakaiApplicationContext@1954f89 异常 。
site开发
请求主要处理类为:org.sakaiproject.site.tool.SiteAction,它里面定义了一系列的方法,其重要的数据库操作类为:org.sakaiproject.site.impl.DbSiteService,
当然还有很多(目前没深究,所以觉的多)其它处理类与方法。
决定使用哪一个SITE的模板文件的方法为:org.sakaiproject.site.tool.SiteAction.buildContextForTemplate,
该方法也有把服务器数据设置到velocity的VM文件在前台可以访问的数据。
把前台FORM接收的数据填充到服务器的SITE相关属性的方法为:org.sakaiproject.site.tool.SiteAction.updateSiteInfo,
它获得前台FORM中的数据填充到类名为SiteInfo的类中,然后再把该类保存SessionState的一个实现类 org.sakaiproject.event.impl.UsageSessionServiceAdaptor$SessionStateWrapper 的缓存中,
用于分步提交时再获取进行进一步的设置,
最后时再取出,设siteInfo中的数据设置到Site的实现类中,调用相关方法进行保存。
org.sakaiproject.site.impl.DbSiteService.readSqlResultRecord方法负责从 SQL查询的结果集中提取数据组装成一个Site的实现类BaseSite,是调用BaseSite的构造方法进行实现的。然后再返回...
注意,如果当前sakai有用到entitybroker组件,那么为Site接口添加方法后,类D:\soft\java\sakai\sakai_AllSource\entitybroker\tags\entitybroker-1.3.13\core-
providers\src\java\org\sakaiproject\entitybroker\providers\model\EntitySite.java
作为Site的实现类也需要实现所添加的方法。
登录页面数据设置位置
类package org.sakaiproject.portal.charon.handlers.SiteHandler 方法includeSiteNav第1364行,第includeSiteNav行重载方法includeSiteNav可获得是否登录的属性。类
org.sakaiproject.portal.charon.SkinnableCharonPortal方法includeLogin第1461行设置登录页面数据。
待续...