Embedded Client Configuration

Pre-Requisites
  1. Completed Kuali Rice SLAs and T&Cs
  2. User Accounts to Rice Databases
  3. PSL Firewall Access
  4. Data Center Firewall Access
  5. Access to IET Subversion Repository
  6. Access to IET Maven Repository
  7. Access to JIRA
Initial Setup

Setup Project Directories

  1. Create a directory where you will store working copies of files to be checked out from Subversion, such as <PATH>/subversion

Checkout Sample Embedded Client Project

  1. Navigate to <PATH>/subversion
  2. [<PATH>/subversion]$ svn co https://mware.ucdavis.edu/svn/kuali/RiceApplications/sample-embedded-client/trunk/sample-embedded-client
    

Checkout the Kuali Impex Tool

[<PATH>/subversion]$ svn co https://test.kuali.org/svn/kul-cfg-dbs/trunk

This creates a directory <PATH>/subversion/trunk. To make the directory structure more readable, rename trunk to kul-cfg-dbs.


Checkout the Sample Embedded Client Database Configuration Files

[<PATH>/subversion]$ svn co https://test.kuali.org/svn/rice-cfg-dbs/rice-client-db/branches/rice-release-1-0-0-br

This creates a directory <PATH>/subversion/rice-release-1-0-0-br. To make the directory structure more readable, rename rice-release-1-0-0-br to rice-client-db.


Prepare Database Import Configuration

  1. Copy <PATH>/subversion/kul-cfg-dbs/impex/impex-build.properties to <HOME>/impex-build.properties
  2. Set the following property values in /wiki/spaces/UCDK/pages/119111688:

    Property

    Sample Value

    svn.module

    rice-cfg-dbs

    svn.base

    branches/rice-release-1-0-0-br

    torque.schema.dir

    <PATH>/subversion/rice-client-db

    drivers.directory

    <path to your client database JDBC driver> Use forward slashes, even in Windows!!!

    import.torque.database.url

    jdbc:oracle:thin:@<DB Host>.ucdavis.edu:1521:<DB SID>

    import.torque.database.user

    <user you will log in as> SYS, schema, etc.

    import.torque.database.schema

    <SCHEMA> Must be in UPPER CASE

    import.torque.database.password

    <password>


Set Environment Variables

  1. Navigate to <HOME>/subversion/kul-cfg-dbs/impex
  2. Set JAVA_HOME
    [<PATH>/subversion/kul-cfg-dbs/impex]$ export JAVA_HOME=<path to Java>
    
  3. Set the classpath
    [<PATH>/subversion/kul-cfg-dbs/impex]$ export classpath=<PATH>/subversion/kul-cfg-dbs/impex/lib
    

Execute the Database Import

  • If you're starting with a blank database:
    [<PATH>/subversion/kul-cfg-dbs/impex]$ ant import
    
  • If you're adding to an existing database:
    1. [<PATH>/subversion/kul-cfg-dbs/impex]$ ant create-ddl
      
    2. [<PATH>/subversion/kul-cfg-dbs/impex]$ ant dataxml-to-sql
      
    3. Navigate to <PATH>/subversion/rice-client-db/sql and execute the generated SQL statements.
    4. Navigate to <PATH>/subversion/rice-client-db/datasql and execute the generated SQL statements.

If you are updating the Database Configuration Files project from Kuali's Subversion repository and updating your client Rice database structure, delete <PATH>/subversion/rice-cfg-dbs/sql and /datasql subdirectories before running ant import, ant create-ddl, or ant dataxml-to-sql.

Spring Configuration
~/sample-embedded-client/src/main/resources/edu/sampleu/embedded/config/SpringBeans.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	<property name="properties" ref="configProperties" />
</bean>

<bean id="config" class="org.kuali.rice.core.config.spring.ConfigFactoryBean">
	<property name="configLocations">
		<list>
			<value>classpath:edu/sampleu/embedded/config/sample-embedded-client-config.xml</value>
		</list>
	</property>
</bean>
	
<bean id="configProperties" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
	<property name="targetObject" ref="config" />
	<property name="targetMethod" value="getProperties" />
</bean>

<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean">
	<property name="defaultTimeout" value="${transaction.timeout}"/>
</bean>
	
<bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
	<property name="transactionManager" ref="jotm"/>
	<property name="userTransaction" ref="jotm"/>
</bean>

<bean id="dataSource" class="org.kuali.rice.core.database.XAPoolDataSource">
	<property name="transactionManager" ref="jotm" />
	<property name="driverClassName" value="${datasource.driver.name}" />
	<property name="url" value="${datasource.url}" />
	<property name="maxSize" value="${datasource.pool.size}" />
	<property name="minSize" value="${datasource.initialSize}" />
	<property name="maxWait" value="${datasource.pool.maxWait}" />
	<property name="validationQuery" value="${datasource.pool.validationQuery}" />
	<property name="username" value="${datasource.username}" />
	<property name="password" value="${datasource.password}" />
</bean>

<bean id="nonTransactionalDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	<property name="driverClassName" value="${datasource.driver.name}" />
	<property name="url" value="${datasource.url}" />
	<property name="maxActive" value="${datasource.pool.maxActive}" />
	<property name="minIdle" value="${datasource.minIdle}" />
	<property name="initialSize" value="${datasource.initialSize}" />
	<property name="validationQuery" value="${datasource.pool.validationQuery}" />
	<property name="username" value="${datasource.username}" />
	<property name="password" value="${datasource.password}" />
	<property name="accessToUnderlyingConnectionAllowed" value="${datasource.accessToUnderlyingConnectionAllowed}" />
</bean>

<bean id="standaloneDataSource" class="org.kuali.rice.core.database.XAPoolDataSource">
	<property name="transactionManager" ref="jotm" />
	<property name="driverClassName" value="${standalone.datasource.driver.name}" />
	<property name="url" value="${standalone.datasource.url}" />
	<property name="maxSize" value="${standalone.datasource.pool.size}" />
	<property name="minSize" value="${standalone.datasource.initialSize}" />
	<property name="maxWait" value="${standalone.datasource.pool.maxWait}" />
	<property name="validationQuery" value="${standalone.datasource.pool.validationQuery}" />
	<property name="username" value="${standalone.datasource.username}" />
	<property name="password" value="${standalone.datasource.password}" />
</bean>

<bean id="whitePagesDataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${datasource.driver.name}"/>
        <property name="url" value="${the.db.where.my.privileged.whitepages.db.username.lives.url}"/>
        <property name="username" value="${my.privileged.whitepages.db.username}"/>
        <property name="password" value="${my.privileged.whitepages.db.password}"/>
</bean>

<bean id="ldapPersonContextSource" class="org.springframework.ldap.core.support.LdapContextSource">
    	<property name="url" value="${ldap.url}" />
    	<property name="base" value="${ldap.base}" />
    	<property name="pooled" value="${ldap.pool}" />
    	<property name="userDn" value="${my.ldap.service.account}" />
    	<property name="password" value="${my.ldap.service.account.password}" />
</bean>

<bean id="ldapListingsContextSource" class="org.springframework.ldap.core.support.LdapContextSource">
    	<property name="url" value="${ldap.url}" />
    	<property name="base" value="${ldap.listings.base}" />
    	<property name="pooled" value="${ldap.pool}" />
    	<property name="userDn" value="${my.ldap.service.account}" />
    	<property name="password" value="${my.ldap.service.account.password}" />
</bean>

<bean id="rice" class="org.kuali.rice.core.config.RiceConfigurer">
	<property name="dataSource" ref="dataSource" />
	<property name="nonTransactionalDataSource" ref="nonTransactionalDataSource"/>
	<property name="serverDataSource" ref="standaloneDataSource"/>
	<property name="transactionManager" ref="jotm" />
	<property name="userTransaction" ref="jotm" />
	<property name="serviceNamespace" value="RSEC" />
	<property name="environment" value="dev" />
	<property name="rootConfig" ref="config" />
	<property name="ksbConfigurer">
		<bean class="org.kuali.rice.ksb.messaging.config.KSBConfigurer">
			<property name="serviceServletUrl" value="${serviceServletUrl}" />
		</bean>
	</property>
	<property name="kewConfigurer">
		<bean class="org.kuali.rice.kew.config.KEWConfigurer">
			<property name="clientProtocol" value="local" />
		</bean>
	</property>
	<property name="knsConfigurer">
		<bean class="org.kuali.rice.kns.config.KNSConfigurer"/>
	</property>
	<property name="kimConfigurer">
		<bean class="org.kuali.rice.kim.config.KIMConfigurer"/>
	</property>
	<property name="kcbConfigurer">
		<bean class="org.kuali.rice.kcb.config.KCBConfigurer"/>
	</property>
	<property name="additionalSpringFiles">
		<value>classpath:edu/ucdavis/iet/kuali/rice/kim/config/UCDKIMSpringBeans.xml</value>
	</property>
</bean>
</beans>
Rice Configuration
~/sample-embedded-client/src/main/resources/edu/sampleu/embedded/config/sample-embedded-client-config.xml
<config>
	<!-- LDAP Settings -->
	<param name="ldap.url">ldaps://ldap.ucdavis.edu</param>
	<param name="ldap.base">ou=People,dc=ucdavis,dc=edu</param>
	<param name="ldap.pool">true</param>
	<param name="ldap.user">uid=my_ldap_uid,ou=Special Users,dc=ucdavis,dc=edu</param>
	<param name="ldap.password">my_ldap_password</param>
		
	<!-- Client Database Settings -->
	<param name="datasource.ojb.platform">MySQL</param>
	<param name="datasource.platform">org.kuali.rice.core.database.platform.MySQLPlatform</param>
	<param name="datasource.url">jdbc:mysql://localhost:3306/MyDB</param>
	<param name="datasource.driver.name">com.mysql.jdbc.Driver</param>
	<param name="datasource.pool.validationQuery">select 1</param>
	<param name="datasource.pool.maxWait">30000</param>
	<param name="datasource.pool.size">30</param>
	<param name="datasource.pool.maxActive">50</param>
	<param name="datasource.minIdle">7</param>
	<param name="datasource.initialSize">7</param>
	<param name="datasource.accessToUnderlyingConnectionAllowed">true</param>
	<param name="datasource.username">embeddeduser</param>
	<param name="datasource.password">embeddedpassword</param>
	
	<!--  Rice Standalone Database Settings -->
	<param name="standalone.datasource.ojb.platform">Oracle9i</param>
	<param name="standalone.datasource.platform">org.kuali.rice.core.database.platform.OraclePlatform</param>
	<param name="standalone.datasource.url">jdbc:oracle:thin:@dbhost.ucdavis.edu:1521:SID</param>
	<param name="standalone.datasource.driver.name">oracle.jdbc.driver.OracleDriver</param>
	<param name="standalone.datasource.pool.validationQuery">select 1 from dual</param>
	<param name="standalone.datasource.pool.maxWait">30000</param>
	<param name="standalone.datasource.pool.size">30</param>
	<param name="standalone.datasource.pool.maxActive">50</param>
	<param name="standalone.datasource.minIdle">7</param>
	<param name="standalone.datasource.initialSize">7</param>
	<param name="standalone.datasource.accessToUnderlyingConnectionAllowed">true</param>
	<param name="standalone.datasource.username">riceuser</param>
	<param name="standalone.datasource.password">ricepassword</param>
	
	<!--  log4j Settings -->
	<param name="log4j.reload.minutes">5</param>
	<param name="log4j.settings.path">classpath:META-INF/log4j.properties</param>

	<!--  Bus Configuration  -->
	<param name="dev.mode">false</param>
	<param name="message.persistence">true</param>
	<param name="message.delivery">async</param>
	<param name="Routing.ImmediateExceptionRouting">true</param>
	<param name="RouteQueue.timeIncrement">60000</param>
	<param name="RouteQueue.maxRetryAttempts">6</param>

	<!--  Quartz Configuration  -->
	<param name="useQuartzDatabase">true</param>
	<param name="ksb.org.quartz.scheduler.instanceName">Embedded KSB Scheduler</param>
	<param name="ksb.org.quartz.scheduler.instanceId">AUTO</param>
<!--	<param name="ksb.org.quartz.jobStore.tablePrefix">KRSB_QRTZ_</param>-->
<!--	<param name="ksb.org.quartz.jobStore.isClustered">true</param>-->
	<param name="ksb.org.quartz.threadPool.threadCount">5</param>
	<param name="ksb.org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</param>

	<!--  Workflow Upload Configuration (for stand-alone)  -->
	<param name="data.xml.pollIntervalSecs">30</param>
	<param name="initialDelaySecs">10</param>
	<param name="simpleDocumentActionsService.security">true</param>
	<param name="secure.workflowdocument.javaservice.endpoint">true</param>
	<param name="secure.workflowutility.javaservice.endpoint">true</param>
	<param name="keystore.file">security/rice.keystore</param>
	<param name="keystore.alias">rice</param>
	<param name="keystore.password">r1c3pw</param>
	
	<param name="transaction.timeout">600</param>
	<!-- Standalone Server URL -->
	<param name="serviceServletUrl">http://ricehost.ucdavis.edu/rice-context/remoting</param>
	
	<!-- XML ingester directories -->
	<param name="data.xml.root.location">/opt/ears/${environment}/en/xml</param>
	<param name="data.xml.pending.location">${data.xml.root.location}pending</param>
	<param name="data.xml.loaded.location">${data.xml.root.location}loaded</param>
	<param name="data.xml.problem.location">${data.xml.root.location}problem</param>
	<param name="attachment.dir.location">/opt/ears/</param>
	
	<!-- External Configuration Files -->
	<param name="config.location">classpath:META-INF/common-config-defaults.xml</param>
<!--	<param name="config.location">/usr/local/rice/embedded-client-config.xml</param>-->
</config>
Required Libraries
  1. rice-api-1.0.0
  2. rice-impl-1.0.0
  3. iet-commons-ldap-1.0.0
  4. ucd-kim-impl-1.0.0
  5. asm 3.0
  6. spring-ldap-core 1.3.0.RELEASE
Removed Libraries
  1. asm-1.5.3
  2. asm-attrs-1.5.3
  3. cglib-2.1

Reference: CXF: Dependency Incompatibility with Hibernate

Maven Configuration
~/sample-embedded-client/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.kuali.rice</groupId>
<artifactId>embedded-client</artifactId>
<packaging>jar</packaging>
<name>embedded-client</name>
<version>1.0.0</version>
<build>
	<plugins>
		<plugin>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.5</source>
				<target>1.5</target>
			</configuration>
		</plugin>
	</plugins>
</build>

<properties>
  	<iet-commons-ldap.version>1.0.0</iet-commons-ldap.version>
  	<ucd-kim-impl.version>1.0.0RC1</ucd-kim-impl.version>
  	<rice.version>1.0.0-SNAPSHOT</rice.version>
	<asm.version>3.0</asm.version>
</properties>

<dependencies>
	<dependency>
    		<groupId>edu.ucdavis.iet.commons</groupId>
    		<artifactId>iet-commons-ldap</artifactId>
    		<version>${iet-commons-ldap.version}</version>
    		<exclusions>
    			<exclusion>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-tx</artifactId>
    			</exclusion> 	
    			<exclusion>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-beans</artifactId>
    			</exclusion>     
    			<exclusion>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-core</artifactId>
    			</exclusion>   		
    		</exclusions>
  	</dependency>
  	<dependency>
    		<groupId>edu.ucdavis.iet.kuali.rice</groupId>
    		<artifactId>ucd-kim-impl</artifactId>
    		<version>${ucd-kim-impl.version}</version>
    		<exclusions>
    			<exclusion>
    				<groupId>asm</groupId>
    				<artifactId>asm</artifactId>
    			</exclusion> 	
    			<exclusion>
    				<groupId>asm</groupId>

    				<artifactId>asm-attrs</artifactId>
    			</exclusion>     
    			<exclusion>
    				<groupId>cglib</groupId>
    				<artifactId>cglib</artifactId>
    			</exclusion>   		
    		</exclusions>	    		
  	</dependency>   	
  	<dependency>
		<groupId>asm</groupId>
		<artifactId>asm</artifactId>
		<version>${asm.version}</version>
	</dependency>	  		
	<dependency>
		<groupId>org.kuali.rice</groupId>
		<artifactId>rice-api</artifactId>
		<version>${rice.version}</version>
	</dependency>
	<dependency>
		<groupId>org.kuali.rice</groupId>
		<artifactId>rice-impl</artifactId>
		<version>${rice.version}</version>			 			
	</dependency>
	<dependency>
        	<groupId>javax.servlet</groupId>
           	<artifactId>servlet-api</artifactId>
        	<version>2.4</version>
        	<scope>provided</scope>
        </dependency>
	</dependencies>

<repositories>
	<repository>
		<id>kuali</id>
		<name>Kuali Repository</name>
		<url>https://test.kuali.org/maven</url>
	</repository>
</repositories>

</project>