sakai2.7.0/1开发相关问题及解决方法

本文档是个人亲身的开发总结,望能帮助有需要的朋友。

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行设置登录页面数据。

 

待续...

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值