Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Table of Contents

Overview

This document is intended to supplement the Kuali Rice 2.1.2 Installation Guide and aid the creation of an embedded rice client application. The information on this page is targeted for the Rice 2.1.2 release.

Running a Rice client application in Embedded Mode means:

  • one or more Rice modules - in particular, KEW and KIM - is are executing from within the client application
  • the client application has direct access to the Rice Standalone Server database

...

  1. A database account with access to the Rice database
  2. Procure the UC Davis-specific JARs for the modules you will be embedding along with any of their associated dependencies using either of the following methods:
    • Download ucd-rice-standalone-server-impl WAR from Artifactory , selecting the most recent version. This WAR contains all dependencies.
    • Download JARs for the specific module from this location in the Artifactory , selecting the most recent version. For a

Properties Configuration

We use a simple XML configuration to declare properties as key-value pairs. For example:

Code Block
borderStylesolid
title/usr/local/rice/rice-config.xml

<config>
    <param name="datasource.ojb.platform">Oracle</param>
    <param name="datasource.platform">org.kuali.rice.core.database.platform.OraclePlatform</param>
    <param name="datasource.url">jdbc:oracle:thin:@dbhost.ucdavis.edu:1521:SID</param>
    <param name="datasource.driver.name">oracle.jdbc.driver.OracleDriver</param>
    <param name="datasource.pool.validationQuery">select 1 from duak</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">my_db_user</param>
    <param name="datasource.password">my_db_password</param>
<config>
Info
titleConfiguration File Options
  • Default Rice Configuration
    • By default Rice looks for rice-config.xml in /usr/local/rice/ at launch time. Externalizing the configuration out to the file system allows us to substitute different values for different properties in different environments. We don't need to create a configuration file for say, the TEST vs. the PROD environment, and then build the application (i.e. the same WAR can be deployed in any instance).
    • See a full-blown set of sample properties .
  • Other Kuali Application Configurations
    • Kuali COEUS

Core Data Source Configuration

Kuali Rice uses Java Open Transaction Manager, so we declare the appropriate beans.

Code Block
borderStylesolid
titleclasspath:edu/ucdavis/myapp/config/application-data.xml

<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>

We must declare three data sources:

  1. A transactional data source where the local client application's Rice tables are located. This is required by JOTM.
    Code Block
    borderStylesolid
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    
    <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>
    
  2. A non-transactional data source pointing to those same Rice tables. This is required by Quartz.
    Code Block
    borderStylesolid
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    
    <bean id="nonTransactionalDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="url" value="${datasource.url}"/>
        <property name="username" value="${datasource.username}"/>
        <property name="password" value="${datasource.password}"/>
        <property name="driverClassName" value="${datasource.driver.name}" />
        <property name="initialSize" value="${datasource.initialSize}" />
        <property name="minIdle" value="${datasource.minIdle}" />
        <property name="maxActive" value="${datasource.maxActive}" />
        <property name="maxWait" value="${datasource.maxWait}" />
        <property name="validationQuery" value="${datasource.validationQuery}" />
        <property name="testOnBorrow" value="${datasource.testOnBorrow}" />
        <property name="testOnReturn" value="${datasource.testOnReturn}" />
        <property name="testWhileIdle" value="${datasource.testWhileIdle}" />
        <property name="accessToUnderlyingConnectionAllowed" value="${datasource.accessToUnderlyingConnectionAllowed}" />
    </bean>
    
    Tip

    To take advantage of pooling capabilities, testOnBorrow should be set to true.

  3. A transactional data source pointing to the database of the Rice Standalone Server. Code Block
    borderStylesolid
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    <bean id="standaloneDataSource" class="org.kuali.rice.core.database.XAPoolDataSource"> <property name="transactionManager" ref="jotm" /> <property name="driverClassName" value="${standalone.datasource.driver.name}" /A certificate for the machines hosting the client application that will be connecting to the Rice Standalone Server.

Rice Libraries

In Rice 1.0.x, there were only two main jars, rice-api and rice-impl. With the modularity work there are more api jars corresponding to service apis and framework components. Additionally, the implementation module has been split (though there is still a shared implementation module as not all components of the Rice implementation have been fully modularized as of the Rice 2.x.x release). This work was done according to the design outlined at the following page: Modularity Design

The libraries and their dependencies required for the modules which your application will be using must be included in your client application. Ideally you only include the modules of rice you are using. In practice, you may need to include them all until rice's modularity work is complete. The only modules rice recommends compiling against are api & framework modules.

Below is a list of the old 1.0.3.3 libraries and their 2.x.x counterparts:

Old Library

New Library

rice-api-1.0.3.3.jar

rice-core-api-2.x.x.jar

 

rice-core-framework-2.x.x.jar

 

rice-core-service-api-2.x.x.jar

 

rice-core-service-framework-2.x.x.jar

 

rice-edl-framework-2.x.x.jar

 

rice-ken-api-2.x.x.jar

 

rice-kew-api-2.x.x.jar

 

rice-kew-framework-2.x.x.jar

 

rice-kim-api-2.x.x.jar

 

rice-kim-framework-2.x.x.jar

 

rice-kns-2.x.x.jar

 

rice-krad-app-framework-2.x.x.jar

 

rice-krad-web-framework-2.x.x.jar

 

rice-krms-api-2.x.x.jar

 

rice-krms-framework-2.x.x.jar

 

rice-ksb-api-2.x.x.jar

 

rice-location-api-2.x.x.jar

 

rice-location-framework-2.x.x.jar

rice-impl-1.0.3.3.jar

rice-impl-2.x.x.jar

 

rice-core-impl-2.x.x.jar

 

rice-core-service-impl-2.x.x.jar

 

rice-edl-impl-2.x.x.jar

 

rice-kew-impl-2.x.x.jar

 

rice-kim-impl-2.x.x.jar

 

rice-krms-impl-2.x.x.jar

 

rice-ksb-client-impl-2.x.x.jar

 

rice-ksb-server-impl-2.x.x.jar

 

rice-location-impl-2.x.x.jar

rice-sampleapp-1.0.3.3.jar

rice-core-service-web-2.x.x.jar

 

rice-core-web-2.x.x.jar

 

rice-ksb-web-2.x.x.jar

 

rice-location-web-2.x.x.jar

Properties Configuration

We use a simple XML configuration to declare properties as key-value pairs. For example:

Code Block
title/usr/local/rice/rice-config.xml
borderStylesolid

<config>
    <param name="datasource.ojb.platform">Oracle9i</param>
    <param name="datasource.platform">org.kuali.rice.core.framework.persistence.platform.OraclePlatform</param>
    <param name="datasource.url">jdbc:oracle:thin:@ldap://oraldap1.ucdavis.edu:389/rice_test,cn=OracleContext,dc=ucdavis,dc=edu</param>
    <param name="datasource.driver.name">oracle.jdbc.driver.OracleDriver</param>
    <param name="datasource.pool.validationQuery">select 1 from duak</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">my_db_user</param>
    <param name="datasource.password">my_db_password</param>
<config>
Info
titleConfiguration File Options
  • Default Rice Configuration
    • By default Rice looks for rice-config.xml in /usr/local/rice/ at launch time. Externalizing the configuration out to the file system allows us to substitute different values for different properties in different environments. We don't need to create a configuration file for say, the TEST vs. the PROD environment, and then build the application (i.e. the same WAR can be deployed in any instance).
    • See a set of sample properties .
  • Other Kuali Application Configurations
    • Kuali COEUS is a fully enabled rice application. The Kuali COEUS config file, kc-config.xml , is included here for reference.

Core Data Source Configuration

Kuali Rice uses Java Open Transaction Manager, so we declare the appropriate beans.

Code Block
titleclasspath:edu/ucdavis/myapp/config/application-data.xml
borderStylesolid

<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean">
    <property name="

...

defaultTimeout" value="${

...

transaction.

...

timeout}"

...

/>
</bean>

...

	

We must declare three data sources:

  1. A transactional data source where the local client application's Rice tables are located. This is required by JOTM.
    Code Block
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    borderStylesolid
    
    <bean id="dataSource" class="org.kuali.rice.core.framework.persistence.jdbc.datasource.XAPoolDataSource">
        <property name="minSizetransactionManager" valueref="${standalone.datasource.initialSize}jotm" />
        <property name="maxWaitdriverClassName" value="${standalone.datasource.pool.maxWaitdatasource.driver.name}" />
        <property name="url" value="${datasource.url}" />
        <property name="validationQuerymaxSize" value="${standalone.datasource.pool.validationQuerysize}" />
        <property name="usernameminSize" value="${standalone.datasource.usernameinitialSize}" />
        <property name="passwordmaxWait" value="${standalonedatasource.datasourcepool.passwordmaxWait}" />
    </bean>
    

KIM Service Configuration

The UCD KIM Identity Service fetches Entity and Principal information from UCD LDAP and, optionally, Display Name from White Pages. It is instantiated by declaring classpath:edu/ucdavis/kuali/rice/kim/config/ucd-kim-wp-service.xml if using White Pages, or classpath:edu/ucdavis/kuali/rice/kim/config/ucd-kim-service.xml if not using White Pages, in the Spring context.

Data Source Configuration

KIM Identity Service requires two LDAP data sources:

  1. A data source pointing to the dc=ucdavis,dc=edu tree to retrieve entries in the ou=People and ou=Listings schemas.
    Code Block
    borderStylesolid
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    
    <bean id="ldapContextSource
        <property name="validationQuery" value="${datasource.pool.validationQuery}" />
        <property name="username" value="${datasource.username}" />
        <property name="password" value="${datasource.password}" />
    </bean>
    
  2. A non-transactional data source pointing to those same Rice tables. This is required by Quartz.
    Code Block
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    borderStylesolid
    
    <bean id="nonTransactionalDataSource" class="org.springframeworkapache.ldapcommons.coredbcp.support.LdapContextSource"BasicDataSource" destroy-method="close">
        <property name="url" value="${ldapdatasource.url}" />
        <property name="baseusername" value="${ldapdatasource.baseusername}" />
        <property name="userDnpassword" value="${ldapdatasource.userpassword}" />
        <property name="passworddriverClassName" value="${ldapdatasource.driver.passwordname}" />
        <property name="pooledinitialSize" value="false${datasource.initialSize}" />
    </bean>
    
    A data source pointing to the dc=it,dc=ucdavis,dc=edu tree server to retrieve entries in the ou=Accounts schema.
    Code Block
    borderStylesolid
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    
    <bean id="ldapItContextSource" class="org.springframework.ldap.core.support.LdapContextSource"    <property name="minIdle" value="${datasource.minIdle}" />
        <property name="maxActive" value="${datasource.maxActive}" />
        <property name="urlmaxWait" value="${ldapdatasource.it.urlmaxWait}" />
        <property name="basevalidationQuery" value="${ldapdatasource.it.basevalidationQuery}" />
        <property name="userDntestOnBorrow" value="${ldapdatasource.it.usertestOnBorrow}" />
        <property name="passwordtestOnReturn" value="${ldapdatasource.it.passwordtestOnReturn}" />    	
        <property name="pooledtestWhileIdle" value="false${datasource.testWhileIdle}" />
      </bean> 

Optionally, KIM Identity Service provides access to the PEOPLE_DISPLAY_NAME view in the ORG schema in Mothra. whitePagesDataSource

...

borderStylesolid
titleclasspath:edu/ucdavis/myapp/config/application-data.xml

...

  1.  <property name="accessToUnderlyingConnectionAllowed" value="${datasource.accessToUnderlyingConnectionAllowed}" />
    </bean>
    
    Tip

    To take advantage of pooling capabilities, testOnBorrow should be set to true.

  2. A transactional data source pointing to the database of the Rice Standalone Server.
    Code Block
    titleclasspath:edu/ucdavis/myapp/config/application-data.xml
    borderStylesolid
    
    <bean id="standaloneDataSource" class="org.kuali.rice.core.framework.persistence.jdbc.datasource.XAPoolDataSource">
        <property name="

...

  1. transactionManager" 

...

  1. ref=

...

  1. "jotm" />
        <property name="driverClassName" value="${

...

  1. standalone.datasource.driver.name}" />
        <property name="

...

  1. url" value="${

...

  1. standalone.datasource.

...

  1. url}" />
        <property name="

...

  1. maxSize" value="${

...

  1. standalone.datasource.pool.

...

  1. size}" />
        <property name="

...

  1. minSize" value="${

...

  1. standalone.datasource.

...

  1. initialSize}" />
        <property name="maxWait" value="${

...

  1. standalone.datasource.pool.maxWait}" />
        <property name="validationQuery" value="${

...

  1. standalone.datasource.pool.validationQuery}" />
        <property name="

...

  1. username" value="${

...

  1. standalone.datasource.

...

  1. username}" />
        <property name="

...

  1. password" value="${

...

  1. standalone.datasource.

...

  1. password}" />
    

...

Tip

To take advantage of pooling capabilities, testOnBorrow should be set to true.

KEW Service Configuration

...

  1. </bean>
    

KEW Service Configuration

As of 1.0.1.1-UCD-SR1d, Rice applications will no longer encrypt workflow document content. This is accomplished by disabling encryption using the out-of-the-box non-encryption implementation (org.kuali.rice.core.serviceimpl.implencryption.NoEncryptionEncryptionServiceImpl). It is instantiated by declaring classpath:edu/ucdavis/kuali/rice/kimkew/config/ucd-kew-service.xml in the Spring context.

Consequently, the encryption.key property is no longer required.

...

KRAD Service Configuration

  1. Maintenance Document Encryption
    • As of 1.0.1.1-UCD-SR1d, Rice applications will no longer encrypt maintenance document content.
    • This is accomplished by disabling encryption using the out-of-the-box non-encryption implementation (org.kuali.rice.core.service.impl.encryption.NoEncryptionEncryptionServiceImpl).
    • Disable encryption by declaring the classpath:edu/ucdavis/kuali/rice/kimkrad/config/ucd-knskrad-service.xml Spring file (see UCD Spring Bean Configuration).
    • Remove (or comment out) references to the encryption.key property (e.g. in rice-config.xml, kc-config.xml, embedded-client-config.xml, etc.).
    Configure Rice Application Configuration Service
  2. A client application must declare which package prefixes it is responsible for servicing.
  3. If not, then it will by default, try to handle requests over the service bus for Rice objects (those prefixed with org.kuali.rice).
  4. The application.url needs to be set such that the requester knows which server is handling the request.
  5. Override the Rice Application Configuration Service like so: Code BlockborderStylesolidtitlemy-

UCD Spring Bean Configuration

Declare the UCD-implemented Rice services:

Code Block
title/usr/local/rice/rice-config.xml
borderStylesolid

    <param name="

...

rice.kr.

...

additionalSpringFiles"

...

>classpath:edu/

...

borderStylesolid
titlemyRiceSpringBeans.xml

...

ucdavis/kuali/rice/krad/config/ucd-krad-service.xml</param>
    

...

<param name="

...

rice.kew.additionalSpringFiles">classpath:edu/ucdavis/kuali/rice/kew/config/ucd-kew-service.xml</param>
  1. If you're using Spring's ContextLoaderListener, declare them in web.xml
    Code Block
    titlesrc/main/webapp/WEB-INF/web.xml
    borderStylesolid
    
    <listener>
        
    <list>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            
    <value>edu
    ..
    ucdavis
    .
    myapplicationprefix</value>
    
            
    </list>
    classpath:edu/ucdavis/kuali/rice/kim/config/ucd-krad-service.xml
        
    </property> </bean>

UCD Spring Bean Configuration

Declare the UCD-implemented Rice services using either of the following methods:

  1. Declare them as part of the rice.additionalSpringFiles property and pass that as a token into the rice bean
    Code Block
    borderStylesolid
    title/usr/local/rice/rice-config.xml
    
    <param name="rice.additionalSpringFiles">classpath:edu/ucdavis/kuali/rice/kim/config/ucd-kim-service.xml,classpath:edu/ucdavis/kuali/rice/kim/config/ucd-kew-service.xml,classpath:edu/ucdavis/kuali/rice/kim/config/ucd-kns-service.xml</param>
    
    Code Block
    borderStylesolid
    titleclasspath:edu/ucdavis/myapp/config/rice-common.xml
    
    <bean id="rice" class="org.kuali.rice.core.config.RiceConfigurer">
    ...    classpath:edu/ucdavis/kuali/rice/kew/config/ucd-kew-service.xml
            ...
        </param-value>
    </context-param>
    

CoreConfigurer Bean Configuration

Finally, we declare the coreConfigurer bean and inject all of the core data source beans.

Code Block
titleclasspath:edu/ucdavis/myapp/config/rice-common.xml
borderStylesolid


   <bean id="coreConfigurer" class="org.kuali.rice.core.impl.config.module.CoreConfigurer">
    <property name="dataSource" ref="dataSource" />
    <property name="

...

nonTransactionalDataSource"

...

  

...

ref="nonTransactionalDataSource" />
    

...

borderStylesolid
titleclasspath:edu/ucdavis/myapp/config/rice-common.xml
<property name="serverDataSource" ref="standaloneDataSource"/>
    <property name="transactionManager" ref="jotm" />
    <property name="userTransaction" ref="jotm" />
  </bean>
  <bean id="

...

ksbConfigurer" class="org.kuali.rice.ksb.

...

messaging.config.

...

KSBConfigurer" />

...


  <bean 

...

id="kradConfigurer" class="org.kuali.rice.krad.config.KRADConfigurer" />
  <bean 

...

Code Block
borderStylesolid
titlesrc/main/webapp/WEB-INF/web.xml

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        ...
        classpath:edu/ucdavis/kuali/rice/kim/config/ucd-kim-service.xml
        classpath:edu/ucdavis/kuali/rice/kew/config/ucd-kew-service.xml
        classpath:edu/ucdavis/kuali/rice/kns/config/ucd-kns-service.xml
        ...
    </param-value>
</context-param>

Rice Bean Configuration

Finally, we declare the rice bean and inject all of the core data source beans into it along with any required additional Spring files.

Code Block
borderStylesolid
titleclasspath:edu/ucdavis/myapp/config/rice-common.xml

<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="${service.namespace}" />
    <property name="environment" value="${environment}" />
    <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>${rice.additionalSpringFiles}</value>
    </property>
</bean>
id="coreServiceConfigurer" class="org.kuali.rice.coreservice.impl.config.CoreServiceConfigurer" />
  <bean id="kimConfigurer" class="org.kuali.rice.kim.config.KIMConfigurer" />
  <bean id="kewConfigurer" class="org.kuali.rice.kew.config.KEWConfigurer" />
  <bean id="kenConfigurer" class="org.kuali.rice.ken.impl.config.KENConfigurer" />
  <bean id="edlConfigurer" class="org.kuali.rice.edl.impl.config.EDLConfigurer" />
  <bean id="krmsConfigurer" class="org.kuali.rice.krms.config.KRMSConfigurer" />
  <bean id="locationConfigurer" class="org.kuali.rice.location.impl.config.LocationConfigurer" />
 

Additional Rice Resources

  • The Kuali Rice 2.1.2 Installation Guide
    The installation guide contains useful information on all aspects of the Rice application from configuration of the standalone server to creation of a template rice client application and is a recommended additional resource for setting up your client application. If you use the maven command for creating a client application, be sure to update the -Darchetypeversion=2.1.2
    Code Block
    
     mvn archetype:generate -DarchetypeGroupId=org.kuali.rice -DarchetypeArtifactId=rice-archetype-quickstart -DarchetypeVersion=2.1.2