编译和运行uPortal完全源代码版本,需要满足下列条件:
tar -xvf apache-maven-2.2.x-bin.tar.gz
export M2_HOME=/path/to/apache-maven/apache-maven-2.2.x
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
export JAVA_HOME=/path/to/java/jdk1.6.x
export PATH=$JAVA_HOME/bin:$PATH
mvn --version
Windows下Maven的安装
tar -xvf apache-ant-1.7.x-bin.tar.gz
export ANT_HOME=/path/to/apache-ant-1.7.x
export JAVA_HOME=/usr/local/jdk-1.6.x
export PATH=$PATH:$ANT_HOME/bin
ant -version
下载 uPortal源码, 解压文件(源文件的目录要位于tomcat容器之外)
tar -xvf uPortal-4.0.2.tar.gz
下面进行安装部署前的配置:
第一步 配置build.properties文件
uPortal的编译需要build.properties文件,用来描述部署环境,该文件可以在uPortal项目的根目录下找到
cp build.properties.sample build.properties
server.home=D:/project/xjtu/tomcat-7.0.22
第二步 配置过滤器
## HSQL Configuration
environment.build.hsql.port=8887
## Database Connection Settings (Uncomment the Maven Filters section in rdbm.properties)
environment.build.hibernate.connection.driver_class=oracle.jdbc.OracleDriver
environment.build.hibernate.connection.url=jdbc:oracle:thin:@192.168.200.66:1521:kyy
environment.build.hibernate.connection.username=a2_portal
environment.build.hibernate.connection.password=a1b2c3
environment.build.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
# uPortal server configuration properties
environment.build.uportal.server=localhost:8080
environment.build.uportal.protocol=http
environment.build.uportal.context=/ #这里部署到ROOT下面只写/
environment.build.uportal.email.fromAddress=portal@university.edu
# CAS server configuration properties
environment.build.cas.server=localhost:8080
environment.build.cas.protocol=http
• 默认情况下uPortal4使用 local.properties过滤文件,但是你也可以创建你自己的过滤文件,然后在编译/部署的时候使用一个参数来指定你想使用的文件即可。
例如:我可以创建一个新的过滤文件名字为:test.properties并设置了所有的服务器信息指向我的测试服务器,然后在编译和部署uPortal时我可以使用参数:-Denv=test即可。
注意:使用参数时用的是文件名.properties前面的部分,此参数同时应用于ant和maven
在不同的filter文件之间进行切换时,你要确保使用clean命令。(参考下面的命令)
ant clean deploy-ear -Denv=test
mvn clean install -Denv=test
第三步 配置数据库
在部署uPortal之前,我们需要在rdbm.properties文件中设置和配置JDBC属性,下面是oracle的配置例子:
获得驱动
自Oracle JDBC的驱动在Maven库中不可用,它必须通过手动放置在你要安装uPortal的机器上的本地库中,你可以在每个机器上分别安装,也可以为所有的机器设置maven的项目库进行使用。
首先要确认你是否已经在你的机器上安装了oracle客户端和Oracle JDBC的驱动程序,如果已经安装了oracle,它将会放置在$ORACLE_HOME中,你可以用下面的命令显示驱动:
ls $ORACLE_HOME/lib/
如果你不能找到它,就下载正确版本的Oracle JDBC驱动包,当你获得了驱动jar文件后,你需要将它安装在你的本地maven库中,使用下面的命令安装:
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.3.0 -Dpackaging=jar -DgeneratePom=true -Dfile=D:/ojdbc14-10.2.0.3.0.jar
命令中的-DgroupId, -DartifactId 和 –Dversion选项取决你的环境,它们必须匹配正确的jar供应商、名称和版本,以免在安装的路上发生冲突。-Dfile为你的Oracle JDBC驱动包位置,你必须包含文件的所在目录,并且文件不能存在于你的maven运行环境中
打开/uPortal/pom.xml,大约在82行有如下代码:
<!-- The final name of the uPortal web-application -->
<uportal.docbase>uPortal</uportal.docbase>
<project-site-path>/uportal/${project.version}</project-site-path>
<!-- The JDBC Driver used by uPortal -->
<jdbc.groupId>hsqldb</jdbc.groupId>
<jdbc.artifactId>hsqldb</jdbc.artifactId>
<jdbc.version>${hsqldb.version}</jdbc.version>
我们需要在这里添加oracle驱动的group, artifact 和 version,和上面mvn install:install-file命令行中的保持一致。
修改后的代码如下:(应用部署在ROOT下面,所以uportal.docbase要改为ROOT)
<!-- The final name of the uPortal web-application -->
<uportal.docbase>ROOT</uportal.docbase>
<project-site-path>/uportal/${project.version}</project-site-path>
<!-- The JDBC Driver used by uPortal -->
<jdbc.groupId>com.oracle</jdbc.groupId>
<jdbc.artifactId>ojdbc14</jdbc.artifactId>
<jdbc.version>10.2.0.3.0</jdbc.version>
JDBC配置
编辑uPortal-4/uportal-war/src/main/resources/properties/rdbm.properties,打开oracle配置的注释并修改URL,用户名和密码,像下面这样:
##### Oracle 10g - example
hibernate.connection.driver_class=oracle.jdbc.OracleDriver
hibernate.connection.url=jdbc:oracle:thin:@192.168.200.66:1521:kyy
hibernate.connection.username=a2_portal
hibernate.connection.password=a1b2c3
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
测试配置
运行ant的dbtest任务,将会告诉你所配置的数据库是否正确
ant dbtest
如果配置正确,显示的结果类似下面的内容:
[java] Connected To: jdbc:oracle:thin:@yourserver:1521:uportal
[java] Supports:
[java] Outer Joins: true
[java] Transactions: true
[java] {ts metasyntax: true
[java] TO_DATE(): false
[java] Database name: 'Oracle'
[java] Database version: 'Oracle Database 11g Release 11.1.0.0.0 - Production'
[java] Driver name: 'Oracle JDBC driver'
[java] Driver version: '10.2.0.3.0'
[java] Driver class: 'Oracle JDBC driver'
[java] Connection URL: 'jdbc:oracle:thin:@yourserver:1521:uportal'
[java] User: 'USERNAME'
[java] Type Mappings: [Type[genericType=TIMESTAMP,local=DATE]]
[java] supportsANSI92EntryLevelSQL: true
[java] supportsANSI92FullSQL: false
[java] supportsCoreSQLGrammar: true
[java] supportsExtendedSQLGrammar: true
[java] supportsTransactions: true
[java] supportsMultipleTransactions: true
[java] supportsOpenCursorsAcrossCommit: false
[java] supportsOpenCursorsAcrossRollback: false
[java] supportsOpenStatementsAcrossCommit: false
[java] supportsOpenStatementsAcrossRollback: false
[java] supportsStoredProcedures: true
[java] supportsOuterJoins: true
[java] supportsFullOuterJoins: true
[java] supportsLimitedOuterJoins: true
[java] supportsBatchUpdates: true
[java] supportsColumnAliasing: true
[java] supportsExpressionsInOrderBy: true
[java] supportsOrderByUnrelated: true
[java] supportsPositionedDelete: false
[java] supportsSelectForUpdate: true
[java] supportsUnion: true
[java] supportsUnionAll: true
[java] getMaxColumnNameLength: 30
[java] getMaxColumnsInIndex: 32
[java] getMaxColumnsInOrderBy: 0
[java] getMaxColumnsInSelect: 0
[java] getMaxColumnsInTable: 1000
[java] getMaxConnections: 0
[java] getMaxCursorNameLength: 0
[java] getMaxIndexLength: 0
[java] getMaxRowSize: 2000
[java] getMaxStatements: 0
[java] getMaxTableNameLength: 30
[java] getMaxTablesInSelect: 0
[java] getMaxUserNameLength: 30
[java] getSearchStringEscape: //
[java] getStringFunctions: ASCII,CHAR,CONCAT,LCASE,LENGTH,LTRIM,REPLACE,RTRIM,SOUNDEX,SUBSTRING,UCASE
[java] getSystemFunctions: USER
[java] getTimeDateFunctions: HOUR,MINUTE,SECOND,MONTH,YEAR
[java] Table Types: SYNONYM,TABLE,VIEW
[java] SQL Types: INTERVALDS,INTERVALYM,TIMESTAMP WITH LOCAL TIME ZONE,TIMESTAMP WITH TIME ZONE,
NUMBER,NUMBER,NUMBER,LONG RAW,RAW,LONG,CHAR,NUMBER,NUMBER,NUMBER,FLOAT,REAL,VARCHAR2,DATE,DATE,
TIMESTAMP,STRUCT,ARRAY,BLOB,CLOB,REF
BUILD SUCCESSFUL
执行到此处遇到问题
运行ant dbtest,build失败
报下面的错误,无法通过(具体错误信息参考uportal-war\target\surefire-reports\ org.jasig.portal.events.JpaPortalEventStoreTest.txt)
org.springframework.dao.InvalidDataAccessApiUsageException: YEAR; nested exception is java.lang.IllegalArgumentException: YEAR
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:286)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:104)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
…………….
经查找,可以执行下面的命令,跳过测试,最后显示build成功。(其它影响未知)
ant dbtest -Dmaven.test.skip=true
第四步 配置tomcat
共享库
uPortal将库文件放在了CATALINA_BASE/shared/lib下面,tomcat6默认没有启用库文件从该目录加载,解决此问题你需要编辑CATALINA_BASE/conf/catalina.properties文件,修改以"shared.loader="开始的一行,改为下面的形式:
#Enabling shared libraries in CATALINA_BASE/conf/catalina.properties
shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
共享session
Jasig portlets,还有其它的JSR-168规范的portlets要求可以在portal应用和portlet应用之间共享用户session数据,启用tomcat的这一属性,你必须添加emptySessionPath="true"这个参数在使用的connector中(在CATALINA_BASE/conf/server.xml中进行配置),如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" emptySessionPath="true"/>
第五步 部署uPortal
警告:运行下面的命令意味着初始化数据库并删除所有的表,如果你在一个已经存在的库上运行,你的数据将会丢失
运行下面的命令部署uPortal和加载数据库
ant initportal
执行到此处遇到问题
同上,执行测试时报错,修改成下面的命令跳过测试
ant initportal -Dmaven.test.skip=true
[java] ERROR Exception while importing file [D:\project\xjtu\uPortal-4.0.2\
uportal-war\src\main\data\required_entities\profile\defaultTemplateUser_default.
profile.xml]
….
….
[java] Caused by: javax.script.ScriptException: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: org.jasig.portal.io.xml.profile.ProfileImportHelper($Proxy103, $Proxy107, java.lang.Long, java.lang.Long, java
.math.BigDecimal, java.math.BigDecimal)
…….
经查找,初始化数据库完成后,执行db-import时发生的错误使用ProfileImportHelper类导入模板数据时总是无法通过
解决方法:
编辑uPortal-4.0.2\uportal-war\src\main\resources\org\jasig\portal\io下的
import-profile_v3-2.crn 大约在79行的位置:(红色部分为修改的重点)
<subtasks>
<with-attribute key="profileImportHelper" value="${groovy(new org.jasig.portal.io.xml.profile.ProfileImportHelper(stylesheetDescriptorDao, stylesheetUserPreferencesDao, STRUCTURE_STYLESHEET_ID, THEME_STYLESHEET_ID, USER_ID, PROFILE_ID))}">
<!-- User (Profile) Parameters: structure... -->
<node-iterator xpath="structure/parameter">
改成下面的形式:
<subtasks>
<with-attribute key="profileImportHelper" value="${groovy(new org.jasig.portal.io.xml.profile.ProfileImportHelper(stylesheetDescriptorDao, stylesheetUserPreferencesDao, STRUCTURE_STYLESHEET_ID, THEME_STYLESHEET_ID, USER_ID.intValue(), PROFILE_ID.intValue()))}">
<!-- User (Profile) Parameters: structure... -->
<node-iterator xpath="structure/parameter">
第六步 启动tomcat
Windows下面运行startup.bat,运行过程中可能出现内存溢出,修改catalina.bat,加入
set JAVA_OPTS=-Xms512m -Xmx768m -XX:PermSize=256m -XX:MaxPermSize=512m
tomcat server.xml配置加入下面代码:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/>
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" acceptCount="100" enableLookups="false"
redirectPort="8443" emptySessionPath="true" URIEncoding="UTF-8"/>