Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

...

...

...

Project

Clone or download the source code from https://stash.uconn.edu/projects/KFS/repos/uconn-kfs.

Build

This version of KFS uses Apache Maven rather than Ant to build the application. 

Info

See https://maven.apache.org  for more information. To download Maven go to https://maven.apache.org/download.cgi

Jenkins

Jenkins uses the following Maven build command line

...

Jenkins assigns the value for -Dbuild.number in the BUILD_NUMBER variable.

Local

Use the following maven command to build KFS in your local environment

mvn  clean  package -DskipTests=true -Dtarget.environment=updev -Dtarget.url=http://localhost:8080 -Dbuild.number=17.2 (any value for -Dbuild.number is acceptible).

Database

Upgrade files are located in the  /uconn/upgrade-kfs7/db directory tree of the uconn-kfs project. This directory contains the liquibase-core-3.4.1.jar file as well as kfs and rice subdirectories.  Copy the entire db directory structure  to a server that can connect to the database servers. It is necessary to run the rice database scripts first as some kfs tables pull data from the rice schema.

/rice

  1. Update liquibase.properties file with appropriate url, username and password

  2. Run rice-runlog.sh to use liquibase to perform the updates.

/kfs

  1. Update liquibase.properties file with appropriate url, user and password

  2. Replace [env] in kfs/core/core-services-cf.sql with appropriate environment
  3. Run kfs-runlog.sh to use liquibase to perform the updates.

Server Configuration

Add -Dadditional.kfs.config.locations="/srv/uconn_configs/kfs-external-config.properties" to VM arguments.

Tomcat

Additional jar files.

Standalone requires a spring class loader TomcatInstrumentableClassLoader so the jar file needs to be in the $CATALINA_HOME/lib directory.  The file is available from mvnrepository,com  (https://mvnrepository.com/artifact/org.springframework/spring-instrument-tomcat). Select the appropriate version, download the jar file and place it into your $CATALINA_HOME/lib directory.

Info

In order to get rice to run locally you will need to place the spring-instrument-tomcat-4.3.18.RELEASE.jar and the correct version of ojdbc6.jar  in your $CATALINA_HOME/lib$CATALINA_HOME/lib directory.  Also put the file OJB.properties in your home directory.


Running KFS and Rice on different ports in the same instance of Tomcat

Tomcat Configuration

Create the following directories: (==> sym link)

...

It is imparitive that tomcat be configured to start whatever the Rice service engine first.

Application Deployment

Each application must be deployed in a different webapps directory... ../webapps/kfs-xxx.war  and ../webapps-localhost2/kr-xxx.war. The url designations in the rice-config.xml and kfs-external-config.properties do not need to change.




Standalone Rice Configuration

Directory structure

The directory /srv/uconn_configs/rice-config/ contains the following:

  • Files

    • rice-config.xml

    • log4j.properties

    • rice.keystore

    • rice.rsa

  • Directories
    • logs
    • plugins (for external workflow applications)

Configuration files


Code Block
languagexml
titlerice-config.xml
<!--
 Copyright 2008-2009 The Kuali Foundation
 
 Licensed under the Educational Community License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.opensource.org/licenses/ecl2.php
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<config>
   
    <!-- Application URL Configuration -->
    <!-- Please fill in values for these parameters! -->
    <param name="environment"><[environment]</param>
    <param name="app.context.name">kr-${environment}</param>
    <param name="context.names.rice">kr-${environment}</param>
    <param name="context.names.app">${app.context.name}</param>
     
    <param name="application.host">[rice server]</param>
    <param name="application.url">${application.host}/${context.names.rice}</param>
    <param name="workflow.url">${application.url}/kew</param>
    <param name="appserver.url">${application.host}</param>

    <param name="context.names.kfs">kfs-[environment]</param>
    <param name="kfs.url">[ kfs server ]/${context.names.kfs}</param>
    
    <!-- set some datasource defaults -->
    <param name="datasource.ojb.platform">Oracle9i</param>
    <param name="datasource.platform">org.kuali.rice.core.framework.persistence.platform.OracleDatabasePlatform</param>
	<!-- test Exadata database -->
    <param name="datasource.url">jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=YES)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=exa02-scan.uits.uconn.edu)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=kfsupdev.uits.uconn.edu)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=20)(DELAY=5))))</param>
    <param name="datasource.driver.name">oracle.jdbc.driver.OracleDriver</param>
    <param name="datasource.username">kr_[environment]</param>
    <param name="datasource.password">[ password ]</param>
    <param name="datasource.maximum.cached.preparedstatements">25</param>
    <!-- btm -->
    <param name="datasource.btm.journal">null</param>
    <param name="datasource.btm.acquisitionInterval">12</param> 
    <param name="datasource.btm.connectionTestTimeout">8</param>
    <param name="datasource.btm.acquisitionTimeout">242</param>
    <param name="datasource.btm.driverProperties.loginTimeout">6</param>
    <param name="datasource.btm.applyTransactionTimeout">false</param>
    <param name="datasource.btm.warnAboutZeroResourceTransaction">false</param>
    <param name="datasource.btm.pool.class">bitronix.tm.resource.jdbc.lrc.LrcXADataSource</param>
    <!-- obj -->
    <param name="datasource.ojb.sequence.manager">org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl</param>
    <param name="datasource.ojb.sequenceManager.className">org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl</param>
    <!-- connection pool  -->
    <param name="datasource.pool.maxActive">100</param>
    <param name="datasource.pool.minIdle">5</param>
    <param name="datasource.pool.initialSize">50</param>
    <param name="datasource.pool.maxSize">100</param>
    <param name="datasource.pool.minSize">5</param>
    <param name="datasource.pool.maxWait">3000</param>
    <param name="datasource.pool.validationQuery">select 1</param>
    <param name="datasource.pool.max.idle.time">3600</param>
    <param name="datasource.pool.max.life.time">4800</param>
    <param name="datasource.pool.isolation.level">READ_COMMITTED</param>
    <param name="datasource.pool.enable.jdbc4.connection.test">true</param>
    <param name="datasource.pool.share.transaction.connections">true</param>
    <param name="datasource.pool.class">${datasource.btm.pool.class}</param>
    <param name="connection.pool.impl">BitronixXa</param>
    <param name="datasource.pool.isolation.level">READ_COMMITTED</param>
    
    <!-- rice -->
    <param name="rice.datasource.url">${datasource.url}</param>
    <param name="rice.datasource.username">${datasource.username}</param>
    <param name="rice.datasource.password">${datasource.password}</param>
    <param name="rice.datasource.driver.name">${datasource.driver.name}</param>
    <param name="rice.datasource.pool.maxWait">${datasource.pool.maxWait}</param>
    <param name="rice.datasource.pool.minSize">${datasource.pool.minSize}</param>
    <param name="rice.datasource.pool.maxSize">${datasource.pool.maxSize}</param>
    <param name="rice.datasource.pool.maxActive">${datasource.pool.maxActive}</param>
    <param name="rice.datasource.validating.query">${datasource.pool.validationQuery}</param>
    <param name="rice.datasource.pool.accessToUnderlyingConnectionAllowed">true</param>
    <param name="rice.datasource.pool.minIdle">${datasource.pool.minIdle}</param>
    <param name="rice.datasource.pool.initialSize">${datasource.pool.initialSize}</param>
    
    <param name="rice.custom.ojb.properties">classpath:org/kuali/rice/core/ojb/RiceOJB.properties</param>
    
    <!-- necessary for kfs account infor web service -->
    <param name="kfs.datasource.url">${datasource.url}</param>
    <param name="kfs.datasource.username">kfs_[ environment ]</param>
    <param name="kfs.datasource.password">[ password ]</param>
    <param name="kfs.datasource.driver.name">${datasource.driver.name}</param>
    <param name="kfs.datasource.pool.maxWait">${datasource.pool.maxWait}</param>
    <param name="kfs.datasource.pool.minSize">${datasource.pool.minSize}</param>
    <param name="kfs.datasource.pool.maxSize">${datasource.pool.maxSize}</param>
    <param name="kfs.datasource.pool.maxActive">${datasource.pool.maxActive}</param>
    <param name="kfs.datasource.validating.query">${datasource.pool.validationQuery}</param>
    <param name="kfs.datasource.pool.accessToUnderlyingConnectionAllowed">true</param>
    <param name="kfs.datasource.pool.minIdle">${datasource.pool.minIdle}</param>
    <param name="kfs.datasource.pool.initialSize">${datasource.pool.initialSize}</param>
    <param name="kfsLocator.useAppContext">true</param>
   
    <!-- KSB remoting service definitions -->
    <param name="serviceServletUrl">${application.url}/remoting</param>

    <!-- directory -->
    <param name="rice.config.directory">/srv/uconn_configs/rice-config</param>    
    <param name="security.directory" override="false">${rice.config.directory}</param>
    <param name="settings.directory" override="false">${rice.config.directory}</param>
    <param name="plugin.dir">${rice.config.directory}/plugins</param>
    <param name="data.xml.root.location">${rice.config.directory}/kew/xml</param>
    <param name="attachment.dir.location">${rice.config.directory}/kew_attachments</param>
    <param name="attachments.directory" override="false">${attachment.dir.location}/${environment}/attachments</param>
    <param name="attachments.pending.directory" override="false">${attachments.directory}/pending</param>

     <param name="portal.css.files" override="false">rice-portal/css/portal.css,rice-portal/css/uconn_portal.css,krad/plugins/fancybox/jquery.fancybox-1.3.4.css,krad/plugins/rice/textpopout/popoutTextarea.css,krad/plugins/jgrowl/jquery.jgrowl.css</param>
  
    <!-- log4j settings -->
    <param name="log4j.settings.path">${rice.config.directory}/log4j.properties</param>
    <param name="log4j.settings.reloadInterval">5</param>

    <!-- Keystore and Encryption Configuration -->

    <param name="keystore.file">${rice.config.directory}/rice.keystore</param>
    <param name="keystore.alias">rice</param>
    <param name="keystore.password">r1c3pw</param>

    <!-- parameters for Aes 256 bit encryption -->
        <param name="encryption.key">[ encryption key ]</param>
        <param name="other.encryption.key">[ other encryption key ]</param>

    <!-- Mail Node Configuration -->
        <param name="mail.relay.server">localhost</param>
        <param name="mailing.list.batch">mailing.list.batch</param>
        
     <!-- CAS integration configuration  -->
      <param name="cas.context.name" override="false">cas</param>
       <param name="cas.rice.server.name">${application.host}</param> 
       <param name="cas.url">https://login.uconn.edu/${cas.context.name}</param>
       <param name="cas.require.https">false</param> 
       <param name="cas.validate.password">false</param> 

       <param name="filter.login.class">org.jasig.cas.client.authentication.AuthenticationFilter</param>
       <param name="filter.login.casServerLoginUrl">${cas.url}/login</param>
       <param name="filter.login.serverName">${cas.rice.server.name}</param>
       <param name="filtermapping.login.1">/*</param>

      <param name="filter.validation.class">org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</param>
       <param name="filter.validation.casServerUrlPrefix">${cas.url}</param>
       <param name="filter.validation.serverName">${cas.rice.server.name}</param>
       <param name="filtermapping.validation.2">/*</param>

       <param name="filter.caswrapper.class">org.jasig.cas.client.util.HttpServletRequestWrapperFilter</param>
       <param name="filtermapping.caswrapper.3">/*</param>
    
    <!-- end CAS integration configuration  -->

    <!--Dummy Login Filter - use if you don't want to go through CAS
        <param name="filter.login.class">org.kuali.rice.krad.web.filter.AutoLoginFilter</param>
        <param name="filtermapping.login.1">/*</param>
        <param name="filter.login.autouser">dac04010</param>
   -->
        <!-- Sample Application Flag -->
        <param name="sample.enabled">false</param>
        <param name="dev.mode">false</param> 

    <!-- ldap mappings  -->
        <param name="rice.ldapattr.entityId">uid</param>
        <param name="rice.ldapattr.principalName">uid</param>
        <param name="rice.ldap.principalAlwaysActive">true</param>
        <param name="rice.ldapattr.firstName">givenName</param>
        <param name="rice.ldapattr.middleName">initials</param>
        <param name="rice.ldapattr.lastName">sn</param>
        <param name="rice.ldapattr.fullName">cn</param>
        <param name="rice.ldapattr.displayName">displayName</param>
        <param name="rice.ldapattr.title">title</param>
        <param name="rice.ldapattr.email">mail</param>
        <param name="rice.ldapattr.phoneNumber">publishedTelephoneNumber</param>
        <param name="rice.pattern.phoneNumberKimFormat">%s-%s-%s</param>
         <param name="rice.ldapattr.date.of.birth">uconnPersonDateOfBirth</param>
        <param name="rice.pattern.phoneNumberLdapRegex">.*([0-9]{3}).*([0-9]{3}).*([0-9]{4})</param>
        <param name="rice.ldapattr.employeeId">uconnPersonEmplID</param>
        <param name="rice.ldapattr.payrollId">uconnPersonPayrollID</param> 
        <param name="rice.ldapattr.deptNumber">departmentNumber</param>   
        <param name="rice.ldapattr.deptName">uconnDepartment</param>
        <param name="rice.ldapattr.employeeType"></param>
        <param name="rice.ldapattr.employeeStatus"></param>
        <param name="rice.ldap.employeeTypeMappings"></param>   
        <param name="rice.ldapattr.building">buildingName</param>
        <param name="rice.ldapattr.street">street</param>
        <param name="rice.ldapattr.postalAddr">postalAddress</param>
        <param name="rice.ldapattr.city"></param>
        <param name="rice.ldapattr.state"></param>
        <param name="rice.ldapattr.country"></param>
        <param name="rice.ldapattr.zipCode"></param>
        <param name="rice.ldapattr.campus">l</param>
        <param name="rice.ldapattr.primaryAffiliation">eduPersonPrimaryAffiliation</param>
        <param name="rice.ldapattr.affiliation">eduPersonAffiliation</param>
          <param name="rice.ldapattr.uconnPerson.affiliation">uconnPersonAffiliation</param>
        <param name="rice.ldapattr.personEntitlement">eduPersonEntitlement</param>
        <param name="rice.ldap.affiliationMappings">STAFF=staff,FCLTY=faculty,STDNT=student,AFLT=affiliate</param>
        <param name="rice.ldap.campusMappings">Storrs=01,Hartford=02,Stamford=03,Torrington=04,Waterbury=05,Avery Point=06,Health Center=07,Extension Services=08</param>       
        <param name="rice.ldap.cityZipMappings">Storrs=06269,Hartford=06117,Stamford=06901,Torrington=06790,Waterbury=06702,Avery Point=06340,Health Center=06030,Extension Services=000000</param>
        <param name="rice.ldap.defaultCampusCode"></param>
        <param name="rice.ldap.defaultCityCode"></param>
        <param name="rice.ldap.defaultStateCode">CT</param>
        <param name="rice.ldap.defaultCountryCode">US</param>
        <param name="rice.ldap.defaultZipCode"></param>
        <param name="rice.ldapattr.unitNumber">uconnUnitNumber</param> 
        <param name="rice.ldapattr.uconnPublished">uconnPublished</param>
        <param name="rice.ldapattr.uconnPublished.email">uconnPublishedEmail</param>
        <param name="rice.ldap.objectClass">objectClass</param>
        <param name="rice.kim.entityTitleLength">20</param>
        <param name="rice.kim.employee.status.id">employee</param>
        <param name="rice.ldap.search.limit">5000</param>
      <!-- additional parameters -->
        <param name="organization.types">Division=4;VP Cabinet=5;AVP Dean=6;Discipline/Grouping=7;Department=8;Sub-Department 1=9;Sub-Department 2=T</param>
        <param name="organization.type.xref">executive=Division;unit=VP Cabinet,AVP Dean,Discipline/Grouping;department=Department,Sub-Department 1,Sub-Department 2</param>
        <param name="rice.default.chart.code">UC</param>
        <!-- role names for organization routing -->
        <param name="uconn.routing.departmentRole">Derived Role: UConn Dept Head</param>
        <param name="uconn.routing.unitRole">Derived Role: UConn Unit Head</param>
        <param name="uconn.routing.execRole">Derived Role: UConn Exec Head</param>
        <param name="uconn.routing.univHeadRole">Derived Role: UConn University Head</param>
        <param name="uconn.routing.subDeptRole">Derived Role: UConn SubDept Head</param>
        <param name="uconn.workflow.viewerRole">Derived Role: UConn Workflow Document Viewer</param>
        <param name="uconn.workflow.subDeptViewerRole">Derived Role: UConn SubDept Workflow Document Viewer</param>
        <param name="uconn.workflow.deptViewerRole">Derived Role: UConn Dept Workflow Document Viewer</param>
        <param name="uconn.workflow.unitViewerRole">Derived Role: UConn Unit Workflow Document Viewer</param>
        <param name="uconn.workflow.execViewerRole">Derived Role: UConn Exec Workflow Document Viewer</param>
  
        <!-- LDAP connection -->
       <param name="rice.ldap.username">uid=uits-kuali,ou=accounts,ou=ldap,dc=uconn,dc=edu</param>
       <param name="rice.ldap.password">[ ldap password ]</param>
       <param name="rice.ldap.url">ldap://ldap.uconn.edu</param>
       <param name="rice.ldap.base">dc=uconn,dc=edu</param>
       <!-- KPS-598 Jaggaer Single Sign On (SSO) - Roles and Orgs -->
        <param name="ldap.wrt.username">uid=uits-kuali,ou=accounts,ou=ldap,dc=uconn,dc=edu</param>
        <param name="ldap.wrt.password">[ ldap password </param>
        <param name="ldap.wrt.url">ldap://master.ldap.uconn.edu</param>
        <param name="ldap.wrt.base">dc=uconn,dc=edu</param>
            <!-- additional parameters -->
        <param name="organization.types">Division=4;VP Cabinet=5;AVP Dean=6;Discipline/Grouping=7;Department=8;Sub-Department 1=9;Sub-Department 2=T</param>
        <param name="organization.type.xref">executive=Division;unit=VP Cabinet,AVP Dean,Discipline/Grouping;department=Department,Sub-Department 1,Sub-Department 2</param>

        <param name="rice.default.chart.code">UC</param>
        <!-- role names for organization routing -->
        <param name="uconn.routing.departmentRole">Derived Role: UConn Dept Head</param>
        <param name="uconn.routing.unitRole">Derived Role: UConn Unit Head</param>
        <param name="uconn.routing.execRole">Derived Role: UConn Exec Head</param>
        <param name="uconn.routing.univHeadRole">Derived Role: UConn University Head</param>
    
        <param name="uconn.routing.subDeptRole">Derived Role: UConn SubDept Head</param>
        <param name="uconn.workflow.viewerRole">Derived Role: UConn Workflow Document Viewer</param>
        <param name="uconn.workflow.subDeptViewerRole">Derived Role: UConn SubDept Workflow Document Viewer</param>
        <param name="uconn.workflow.deptViewerRole">Derived Role: UConn Dept Workflow Document Viewer</param>
    
        <param name="uconn.workflow.unitViewerRole">Derived Role: UConn Unit Workflow Document Viewer</param>
        <param name="uconn.workflow.execViewerRole">Derived Role: UConn Exec Workflow Document Viewer</param>

        <!-- rice module configuration -->
        <param name="kim.mode" override="false">LOCAL</param>

        <!-- uconn module configuration  -->
        <param name="uconn.url" override="false">${application.url}/uconn</param>
        <param name="uconn.mode" override="false">LOCAL</param>
        <param name="uconn.soapExposedService.jaxws.security">false</param>
        <param name="uconn.ldapService.jaxws.security">false</param>
       <!-- webservice -->

       <param name="kim.soapExposedService.jaxws.security">false</param>
       <param name="rice.ksb.serviceRegistry.security">true</param>
        
        <!-- Allowed values for request parameter backLocation 
         To prevent nefarious hacking using the request parameter Rice only allows certain values for the 'backLocation' request parameter.
         This creates a problem for developers running KFS locally and pointing to the standalone Rice server. 
         Comment out the 'non production environments' block for production servers and conversely the ' non production environments' block for
 	     other environments.
        -->
		<param name="rice.backLocation.default.url">${application.url}</param>
 	   <!-- non production environments -->
       <param name="rice.dev.backLocation">http://localhost:8080</param>    
       <param name="rice.backLocation.allowed.regex">^(${application.url}|${kfs.url}|${rice.appserver.url}|${rice.dev.backLocation})(/.*|)</param>
      <!--end non production environments --> 
	  
	  <!-- production environments -->
       <param name="rice.backLocation.allowed.regex">^(${application.url}|${kfs.url}|${rice.appserver.url})(/.*|)</param>
	  <!-- end production environments -->
       
       
       <!-- additional spring beans files -->
       <param name="rice.kr.additionalSpringFiles">classpath:edu/uconn/kuali/rice/config/UConnKrOverrideSpringBeans.xml</param>       
       <param name="rice.kew.additionalSpringFiles">classpath:edu/uconn/kuali/rice/config/UConnKewOverrideSpringBeans.xml</param>
       <param name="rice.ksb.additionalSpringFiles">classpath:edu/uconn/kuali/rice/config/UConnKsbOverrideSpringBeans.xml</param>
       <param name="rice.kim.additionalSpringFiles">classpath:org/kuali/rice/kim/config/KIMLdapSpringBeans.xml,classpath:edu/uconn/kuali/rice/config/UConnKimOverrideSpringBeans.xml</param>
        <!-- end additional spring beans files -->

<!-- quartz -->
    <param name="useQuartzDatabase">true</param>    
 
</config>

...

Code Block
titlelog4j.properties
status = info
name= properties_configuration

# Give directory path where log files should get stored
property.basePath = /srv/uconn_configs/kfs-config/logs/

# ConsoleAppender will print logs on console
appender.console.type = Console
appender.console.name = consoleLogger
appender.console.target = SYSTEM_OUT
appender.console.layout.type = PatternLayout

# Specify the pattern of the logs
appender.console.layout.pattern = %d [%t] u:%X{user}/d:%X{docId} %-5p %c :: %m%n
#appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%c] [%M] [%l] - %msg%n


# RollingFileAppender will print logs in file which can be rotated based on time or size
appender.rolling.type = RollingFile
appender.rolling.name = fileLogger
appender.rolling.fileName= ${basePath}app.log
appender.rolling.filePattern= ${basePath}app_%d{yyyyMMdd}.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d [%t] u:%X{user}/d:%X{docId} %-5p %c :: %m%n
appender.rolling.policies.type = Policies

# Rotate log file each day and keep 5 days worth
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.delete.type = Delete
appender.rolling.strategy.delete.basePath = ${basePath}
appender.rolling.strategy.delete.maxDepth = 1
appender.rolling.strategy.delete.ifLastModified.type = IfLastModified
# Delete files older than 30 days
appender.rolling.strategy.delete.ifLastModified.age = 5d


# RollingFileAppender will print logs in file which can be rotated based on time or size
appender.memory.type = RollingFile
appender.memory.name = memoryLogger
appender.memory.fileName= ${basePath}memory.log
appender.memory.filePattern= ${basePath}app_%d{yyyyMMdd}.log.gz
appender.memory.layout.type = PatternLayout
appender.memory.layout.pattern = %d [%t] u:%X{user}/d:%X{docId} %-5p %c :: %m%n
appender.memory.policies.type = Policies

# Rotate log file each day and keep 5 days worth
appender.memory.policies.time.type = TimeBasedTriggeringPolicy
appender.memory.policies.time.interval = 1
appender.memory.policies.time.modulate = true
appender.memory.strategy.type = DefaultRolloverStrategy
appender.memory.strategy.delete.type = Delete
appender.memory.strategy.delete.basePath = ${basePath}
appender.memory.strategy.delete.maxDepth = 1
appender.memory.strategy.delete.ifLastModified.type = IfLastModified
# Delete files older than 30 days
appender.memory.strategy.delete.ifLastModified.age = 5d


# Mention package name here in place of example. Classes in this package or subpackages will use ConsoleAppender and RollingFileAppender for logging         

logger.MemoryMonitor.name = org.kuali.kfs.sys.MemoryMonitor
logger.MemoryMonitor.level = warn
logger.MemoryMonitor.additivity = false
logger.MemoryMonitor.appenderRef.rolling.ref = memoryLogger

logger.edu1.name = edu.uconn.kuali
logger.edu1.level = info
logger.edu1.additivity = false
logger.edu1.appenderRef.rolling.ref = fileLogger
logger.edu1.appenderRef.console.ref = consoleLogger

logger.org.name = org
logger.org.level = warn
logger.org.additivity = false
logger.org.appenderRef.rolling.ref = fileLogger
logger.org.appenderRef.console.ref = consoleLogger

logger.apache.name = org.apache.struts
logger.apache.level = info
logger.apache.additivity = false
logger.apache.appenderRef.rolling.ref = fileLogger
logger.apache.appenderRef.console.ref = consoleLogger

logger.rice.name = org.kuali.rice
logger.rice.level = info
logger.rice.additivity = false
logger.rice.appenderRef.rolling.ref = fileLogger
logger.rice.appenderRef.console.ref = consoleLogger

# Configure root logger for logging error logs in classes which are in package other than above specified package
rootLogger.level = info
rootLogger.additivity = false
rootLogger.appenderRef.rolling.ref = fileLogger
rootLogger.appenderRef.console.ref = consoleLogger



#### from old logger
logger.org.kuali.kfs.sys.context.Log4jConfigurer=WARN
logger.org.kuali.rice.core.framework.resourceloader.BaseResourceLoader=WARN
logger.org.kuali.rice.kew.util.PerformanceLogger=WARN
logger.org.kuali.rice.core.impl.config.property.JAXBConfigImpl=ERROR
logger.org.kuali.rice.krad.datadictionary.DataDictionary=WARN
logger.org.kuali.rice.core.api.resourceloader.GlobalResourceLoader=WARN
logger.org.springframework.aop.framework.Cglib2AopProxy=ERROR
logger.org.springframework.beans.factory.xml.XmlBeanDefinitionReader=WARN
logger.org.springframework.beans.factory.support.KualiDefaultListableBeanFactory=WARN
logger.org.springframework.context.annotation.ClassPathBeanDefinitionScanner=WARN

# OJB
logger.org.apache.ojb.broker=WARN
logger.org.apache.ojb.broker.metadata=WARN
logger.org.apache.ojb.broker.core.proxy=WARN
logger.org.apache.ojb.broker.core.proxy.IndirectionHandler=ERROR
logger.org.apache.ojb.broker.core.PersistenceBrokerImpl=WARN

# Spring Framework
logger.org.springframework.jdbc.core.JdbcTemplate=TRACE
logger.org.springframework.beans.factory=WARN
logger.org.springframework.context.support.ClassPathXmlApplicationContext=WARN

# DWR
logger.org.directwebremoting=WARN
logger.org.directwebremoting.impl.DefaultConverterManager=ERROR
logger.org.directwebremoting.convert.BeanConverter=ERROR
logger.org.directwebremoting.impl.DTDEntityResolver=ERROR
logger.org.directwebremoting.log.startup=ERROR

# KSB
logger.org.kuali.rice.ksb.messaging.serviceexporters=WARN
logger.org.kuali.rice.ksb.messaging.BusClientFailureProxy=WARN

# KFS : Quiet Down Standard Messages
logger.org.kuali.rice.kew.impl.rule.RuleServiceImpl=WARN
logger.org.kuali.kfs.coa.document.validation.impl=WARN
logger.org.kuali.kfs.module.cg.document.validation.impl=WARN
logger.org.kuali.rice.krad.document.DocumentBase=INFO
logger.org.kuali.rice.kns.web.struts.form.pojo.PojoPropertyUtilsBean=ERROR
logger.org.kuali.rice.krad.bo.PersistableBusinessObjectBase=ERROR
logger.org.kuali.kfs.integration=ERROR
logger.org.kuali.rice.kim.service.impl.PersonServiceImpl=ERROR
logger.org.displaytag=ERROR
logger.org.kuali.rice.kns.web.struts.action.KualiAction=ERROR
logger.org.kuali.rice.ksb.messaging.serviceproxies.MessageSendingTransactionSynchronization=WARN
logger.org.apache.struts.util.PropertyMessageResources=ERROR

# Some logging in this service should only have been at WARN level
# but nothing important for KFS is logged from these services
logger.org.kuali.rice.kim.service.impl.ResponsibilityServiceImpl=FATAL
logger.org.kuali.rice.kns.web.struts.action.KualiInquiryAction=FATAL

logger.org.apache.ws=ERROR
logger.org.apache.xml=ERROR
logger.org.quartz=WARN
logger.org.apache.cxf=WARN

KFS Configuration

Directory structure

The directory /srv/uconn_configs contains the following

...

Code Block
languagebash
titleclean-up-directories
#!/bin/sh
var="$1"
if test -z "$var" 
    then
        echo "must specify either dev or prd"
    else
        rm -rfv  /srv/uconn_configs/kfs-config/work/$var/ 
        rm -rfv /srv/uconn_configs/kfs-config/sa_forms/
        rm -rfv /srv/uconn_configs/kfs-config/ears/
        rm -rfv /srv/uconn_configs/kfs-config/j2ee/
fi


Configuration flies

There are two main  extermal configuration files kfs-external-config.properties and security properties.  The kfs-external-config.properties file contains basic configuration that are subject to change such as the environment, application host url, and rice url.  The non production base url is https://kualinp.uconn.edu, the production url is https://kuali.uconn.edu.  The complete url for UAT would be https://kualinp.uconn.edu/kfs-uat for KFS and https://kualinp.uconn.edu/kr-uat form Rice.

...

Code Block
titleinstitutional-config.properties
uconn.build.number=${buildNumber} ${timestamp} UTC
uconn.institution.id=UCONN
bc.verson=${kfs.bc.version}
kuali.version=${kfs.version}


## modes for stand alone rice
core.mode=LOCAL
kew.mode=EMBEDDED
kim.mode=EMBEDDED
coreservice.mode=REMOTE
ken.mode=REMOTE
ksb.mode=REMOTE
location.mode=REMOTE

production.environment.code=prd

property.files=classpath:org/kuali/rice/krad/ApplicationResources.properties,classpath:org/kuali/rice/krad/KRAD-ApplicationResources.properties,classpath:org/kuali/rice/kew/ApplicationResources.properties,classpath:org/kuali/rice/ksb/ApplicationResources.properties,classpath:org/kuali/rice/kim/ApplicationResources.properties,classpath:org/kuali/rice/krms/ApplicationResources.properties,classpath:org/kuali/rice/core/web/cache/CacheApplicationResources.properties,classpath:org/kuali/kfs/coa/coa-resources.properties,classpath:org/kuali/kfs/fp/fp-resources.properties,classpath:org/kuali/kfs/gl/gl-resources.properties,classpath:org/kuali/kfs/pdp/pdp-resources.properties,classpath:org/kuali/kfs/sys/sys-resources.properties,classpath:org/kuali/kfs/sec/sec-resources.properties,classpath:org/kuali/kfs/vnd/vnd-resources.properties,classpath:org/kuali/kfs/module/ar/ar-resources.properties,classpath:org/kuali/kfs/module/bc/bc-resources.properties,classpath:org/kuali/kfs/module/cam/cam-resources.properties,classpath:org/kuali/kfs/module/cg/cg-resources.properties,classpath:org/kuali/kfs/module/ec/ec-resources.properties,classpath:org/kuali/kfs/module/ld/ld-resources.properties,classpath:org/kuali/kfs/module/external/kc/kc-resources.properties,classpath:org/kuali/kfs/module/purap/purap-resources.properties,classpath:edu/uconn/kuali/kfs/ApplicationResources.properties
property.test.files=classpath:test-configuration.properties
service.registry.url=ServiceRegistry.do
spring.source.files=classpath:org/kuali/rice/core/CommonSpringBeans.xml,\
    classpath:kfs-cache-config.xml,\
    classpath:spring-kfs-imported-rice-beans.xml,\
    classpath:spring-additional-rice-beans.xml,\
    classpath:org/kuali/kfs/sys/spring-sys.xml,\
    classpath:org/kuali/kfs/coa/spring-coa.xml,\
    classpath:org/kuali/kfs/fp/spring-fp.xml,\
    classpath:org/kuali/kfs/gl/spring-gl.xml,\
    classpath:org/kuali/kfs/pdp/spring-pdp.xml,\
    classpath:org/kuali/kfs/vnd/spring-vnd.xml,\
    classpath:org/kuali/kfs/sec/spring-sec.xml,\
    classpath:org/kuali/kfs/sec/spring-sec-gl-overrides.xml,\
    classpath:org/kuali/kfs/integration/spring-integration.xml,\
    classpath:org/kuali/kfs/module/cg/spring-cg.xml,\
    classpath:org/kuali/kfs/module/ar/spring-ar.xml,\
    classpath:org/kuali/kfs/module/purap/spring-purap.xml,\
    classpath:org/kuali/kfs/module/purap/spring-sec-purap-overrides.xml,\
    classpath:org/kuali/kfs/module/cam/spring-cam.xml,\
    classpath:org/kuali/kfs/module/ld/spring-ld.xml,\
    classpath:org/kuali/kfs/module/bc/spring-bc.xml,\
    classpath:org/kuali/kfs/module/ec/spring-ec.xml,\
    classpath:org/kuali/kfs/module/ld/spring-sec-ld-overrides.xml,\
    classpath:edu/uconn/kuali/kfs/coa/spring-coa.xml,\
    classpath:edu/uconn/kuali/kfs/cr/spring-cr.xml,\
    classpath:edu/uconn/kuali/kfs/fp/spring-fp.xml ,\
    classpath:edu/uconn/kuali/kfs/gl/spring-gl.xml ,\
    classpath:edu/uconn/kuali/kfs/module/ar/spring-ar.xml ,\
    classpath:edu/uconn/kuali/kfs/module/bc/spring-bc.xml,\
    classpath:edu/uconn/kuali/kfs/module/cam/spring-cam.xml ,\
    classpath:edu/uconn/kuali/kfs/module/cg/spring-cg.xml ,\
    classpath:edu/uconn/kuali/kfs/module/goe/spring-goe.xml ,\
    classpath:edu/uconn/kuali/kfs/module/ld/spring-ld.xml ,\
    classpath:edu/uconn/kuali/kfs/module/purap/spring-purap.xml,\
    classpath:edu/uconn/kuali/kfs/pdp/spring-pdp.xml ,\
    classpath:edu/uconn/kuali/kfs/pdp/spring-pdp-bottomline.xml ,\
    classpath:edu/uconn/kuali/kfs/prje/spring-prje.xml ,\
    classpath:edu/uconn/kuali/kfs/sec/spring-sec-gl-overrides.xml ,\
    classpath:edu/uconn/kuali/kfs/sec/spring-sec.xml ,\
    classpath:edu/uconn/kuali/kfs/sys/spring-sys.xml ,\
    classpath:edu/uconn/kuali/kfs/tax/spring-tax.xml ,\
    classpath:edu/uconn/kuali/kfs/vnd/spring-vnd.xml ,\
    classpath:edu/uconn/kuali/rice/config/UConnSpringBeans.xml, \
    classpath:edu/uconn/kuali/kfs/module/purap/huskybuy/spring-huskybuy.xml,\
    classpath:edu/uconn/kuali/kfs/integration/concur/spring-concur.xml , \
    classpath:org/kuali/rice/kim/config/KIMLdapSpringBeans.xml\

    ${javamelody.spring.file}
spring.test.files=classpath:org/kuali/kfs/sys/spring-test-env-beans.xml,classpath:org/kuali/kfs/sys/spring-sys-unit-test.xml,classpath:org/kuali/kfs/sys/spring-sys-test.xml,classpath:org/kuali/kfs/gl/spring-gl-test.xml,classpath:org/kuali/kfs/module/ar/spring-ar-test.xml,classpath:org/kuali/kfs/module/purap/spring-purap-test.xml,classpath:org/kuali/kfs/module/cam/spring-cam-test.xml

# Web File Configuration
kns.javascript.files=krad/plugins/jquery/jquery-1.6.3.js,krad/plugins/cookie/jquery.cookie.js,kr/scripts/core.js,kr/scripts/core-override.js,kr/scripts/dhtml.js,kr/scripts/my_common.js,kr/scripts/jscalendar-1.0/calendar.js,kr/scripts/jscalendar-1.0/lang/calendar-en.js,kr/scripts/jscalendar-1.0/calendar-setup.js,dwr/engine.js,dwr/util.js,dwr/interface/PersonService.js,kr/scripts/objectInfo.js,scripts/rice-overrides.js

portal.javascript.files=krad/plugins/jquery/jquery-1.6.3.js,krad/plugins/cookie/jquery.cookie.js,krad/plugins/scrollto/jquery.scrollTo-1.4.2-min.js,krad/plugins/blockUI/jquery.blockUI.js,kr/scripts/my_common.js,krad/plugins/easydrag/jquery.easydrag.js,krad/plugins/fancybox/jquery.fancybox-1.3.4.pack.js,krad/plugins/easing/jquery.easing-1.3.pack.js,krad/plugins/jgrowl/jquery.jgrowl.js,krad/scripts/portal.initialize.js,rice-portal/scripts/easyXDM/easyXDM.js
# Struts Configuration
rice.struts.message.resources=org.kuali.rice.krad.ApplicationResources,org.kuali.rice.krad.KRAD-ApplicationResources,org.kuali.rice.kew.ApplicationResources,org.kuali.rice.ksb.ApplicationResources,org.kuali.rice.kim.ApplicationResources,org.kuali.rice.krms.ApplicationResources,org.kuali.rice.core.web.cache.CacheApplicationResources,org.kuali.kfs.coa.coa-resources,org.kuali.kfs.fp.fp-resources,org.kuali.kfs.gl.gl-resources,org.kuali.kfs.pdp.pdp-resources,org.kuali.kfs.sys.sys-resources,org.kuali.kfs.vnd.vnd-resources,org.kuali.kfs.sec.sec-resources,org.kuali.kfs.module.ar.ar-resources,org.kuali.kfs.module.bc.bc-resources,org.kuali.kfs.module.cam.cam-resources,org.kuali.kfs.module.cg.cg-resources,org.kuali.kfs.module.ec.ec-resources,org.kuali.kfs.module.external.kc.kc-resources,org.kuali.kfs.module.ld.ld-resources,org.kuali.kfs.module.purap.purap-resources,edu.uconn.kuali.kfs.ApplicationResources

# the files that define the struts context for the struts module
rice.kfs.struts.config.files=/WEB-INF/struts-config.xml,/WEB-INF/uconn-struts-config.xml
# the files that define the kim struts context for the struts module
rice.kim.struts.config.files=/kim/WEB-INF/struts-config.xml,/kim/WEB-INF/uconn-struts-config.xml
# the files that define the kr struts context for the struts module
rice.kr.struts.config.files=/kr/WEB-INF/struts-config.xml,/kr/WEB-INF/uconn-kr-struts-config.xml

# properties for Action List notification
email.reminder.lifecycle.enabled=false
enable.nonproduction.data.unmasking=true

# Logging/Debugging Properties
memory.monitor.threshold=.85

# KSB Properties
message.persistence=true
message.delivery=async
threadPool.size=20
RouteQueue.maxRetryAttempts=3
RouteQueue.timeIncrement=1000
kim.callback.service.bus.security.enabled=true
kew.callback.service.bus.security.enabled=true
cache.service.bus.security.enabled=true
soap.service.default.service.bus.security.enabled=true

# quartz properties
useQuartzDatabase=false
use.quartz.scheduling=true
use.quartz.jdbc.jobstore=false
batch.schedule.cron.expression=00 00 23 ? * *
batch.quartz.thread.pool.size=8
batch.quartz.trigger.check.interval=30000

batch.quartz.thread.pool.size=8
batch.quartz.trigger.check.interval=30000
skip.batch.directory.initiation=false
#
bus.refresh.rate=120
rice.cxf.client.connectionTimeout=30000
rice.cxf.client.receiveTimeout=120000
rice.cxf.client.allowChunking=false

# KEW Properties
rice.kew.enableKENNotification=false
actionlist.outbox=false
data.xml.pollIntervalSecs=30
initialDelaySecs=60
secure.workflowdocument.javaservice.endpoint=true
secure.workflowutility.javaservice.endpoint=true
secure.workflowutility.soapservice.endpoint=true
simpleDocumentActionsService.security=true
Routing.ImmediateExceptionRouting=true

dailyEmail.active=false
weeklyEmail.active=false
dailyEmail.cronExpression=0 0 1 * * ?
weeklyEmail.cronExpression=0 0 2 ? * 2

# rice properties
rice.kew.ignoreUnknownPrincipalIds=true
rice.core.additionalSpringFiles=
rice.coreservice.additionalSpringFiles=
rice.kr.additionalSpringFiles=classpath:spring-rice-krad-overrides.xml,classpath:edu/uconn/kuali/rice/config/UConnKrOverrideSpringBeans.xml
rice.kim.additionalSpringFiles=classpath:org/kuali/rice/kim/config/KIMLdapSpringBeans.xml
rice.kew.additionalSpringFiles=classpath:edu/uconn/kuali/rice/config/UConnKewOverrideSpringBeans.xml
#,classpath:org/kuali/rice/kew/config/KewEmbeddedSpringBeans.xml
rice.ksb.additionalSpringFiles=classpath:edu/uconn/kuali/rice/config/UConnKsbOverrideSpringBeans.xml
rice.location.additionalSpringFiles=
rice.kim.entityTitleLength=20
uconn.ldap.dept.cd.length=4

encrypt.attributes.properties.file=work/db/fieldsToEncrypt.properties

# this is a custom UConn property needed for running batch jobs via Control-M
job.status.directory=/home/kfsctmuser

jaggaer.role.approver=Approver
jaggaer.role.shopper=Shopper
jaggaer.dynamic.approvers=KFS-CAM:CAM Manager;KFS-SYS:Contracts & Grants Processor
jaggaer.urn=urn:sciquest.com:solutions.sciquest.com:
jaggaer.urn.role.identifier=role:

# additional parameters 
organization.types=Division=4;VP Cabinet=5;AVP Dean=6;Discipline/Grouping=7;Department=8;Sub-Department 1=9;Sub-Department 2=T
organization.type.xref=executive=Division;unit=VP Cabinet,AVP Dean,Discipline/Grouping;department=Department,Sub-Department 1,Sub-Department 2

# additional css files that should be available to every non-portal page in the application
institution.css.files=,css/uconn.css

# maintenance conversin upgrade rules
maintainable.conversion.rule.file=classpath:edu/uconn/kuali/kfs/sys/config/MaintainableXMLUpgradeRules.xml


# Default Option for Action List User Perferences.
userOptions.default.color=white
# email options: no, daily, weekly, immediate
userOptions.default.email=immediate
userOptions.default.notifyPrimary=yes
userOptions.default.notifySecondary=no
userOptions.default.openNewWindow=yes
userOptions.default.actionListSize=10
userOptions.default.refreshRate=15
userOptions.default.showActionRequired=yes
userOptions.default.showDateCreated=yes
userOptions.default.showDocumentType=yes
userOptions.default.showDocumentStatus=yes
userOptions.default.showInitiator=yes
userOptions.default.showDelegator=yes
userOptions.default.showTitle=yes
userOptions.default.showWorkgroupRequest=yes
userOptions.default.showClearFYI=yes
userOptions.default.showLastApprovedDate=no
userOptions.default.showCurrentNode=no
userOptions.default.useOutBox=yes

# delegatorFilterOnActionList: "Secondary Delegators on Action List Page" or "Secondary Delegators only on Filter Page"
userOptions.default.delegatorFilterOnActionList=Secondary Delegators on Action List Page
# primaryDelegatorFilterOnActionList: "Primary Delegates on Action List Page" or "Primary Delegates only on Filter Page"
userOptions.default.primaryDelegatorFilterOnActionList=Primary Delegates on Action List Page

http.session.timeout.minutes=90

# Testing-only Properties
core.spring.source.files=classpath:spring-kfs-imported-rice-beans.xml,classpath:spring-additional-rice-beans.xml,classpath:org/kuali/rice/core/CommonSpringBeans.xml,classpath:kfs-cache-config.xml,classpath:org/kuali/kfs/sys/spring-sys.xml,classpath:org/kuali/kfs/coa/spring-coa.xml,classpath:org/kuali/kfs/fp/spring-fp.xml,classpath:org/kuali/kfs/gl/spring-gl.xml,classpath:org/kuali/kfs/pdp/spring-pdp.xml,classpath:org/kuali/kfs/vnd/spring-vnd.xml
core.spring.test.files=classpath:org/kuali/kfs/sys/spring-test-env-beans.xml,classpath:org/kuali/kfs/sys/spring-sys-unit-test.xml,classpath:org/kuali/kfs/sys/spring-sys-test.xml,classpath:org/kuali/kfs/gl/spring-gl-test.xml

integration.spring.files=,classpath:org/kuali/kfs/integration/spring-integration.xml

# Web-services enable/disable
accountCreationServiceSOAP.expose=false

 # uconn specific
uconn.routing.departmentRole=Derived Role: UConn Dept Head
uconn.routing.unitRole=Derived Role: UConn Unit Head
uconn.routing.execRole=Derived Role: UConn Exec Head
uconn.routing.univHeadRole=Derived Role: UConn University Head
uconn.routing.subDeptRole=Derived Role: UConn SubDept Head
uconn.workflow.viewerRole=Derived Role: UConn Workflow Document Viewer
uconn.workflow.subDeptViewerRole=Derived Role: UConn SubDept Workflow Document Viewer
uconn.workflow.deptViewerRole=Derived Role: UConn Dept Workflow Document Viewer
uconn.workflow.unitViewerRole=Derived Role: UConn Unit Workflow Document Viewer
uconn.workflow.execViewerRole=Derived Role: UConn Exec Workflow Document Viewer

unifier.production.api.url=https://opunib.grove.ad.uconn.edu/UWS
unifier.test.api.url=https://puint.grove.ad.uconn.edu/UnifierWS

aim.production.api.url=http://thebroker.uconn.edu:8080/AiMIntegrationBrokerWS/wsdl/PurchaseOrderWebServiceImpl.wsdl
aim.test.api.url=http://thebrokertest.uconn.edu:8080/AiMIntegrationBrokerWS/wsdl/PurchaseOrderWebServiceImpl.wsdl

#Jaggaer Huskybuy url properties.
b2b.test.prvalidation.url=https://usertest-messages.sciquest.com/apps/Router/PRValidationReceive
b2b.production.prvalidation.url=https://integrations.sciquest.com/apps/Router/PRValidationReceive
b2b.test.custom.field.url=https://usertest-messages.sciquest.com/apps/Router/CustomFieldXMLImport
b2b.production.custom.field.url=https://integrations.sciquest.com/apps/Router/CustomFieldXMLImport
b2b.test.supplier.sync.url=https://usertest-messages.sciquest.com/apps/Router/TSMSupplierXMLImport
b2b.production.supplier.sync.url=https://integrations.sciquest.com/apps/Router/TSMSupplierXMLImport
b2b.test.invoice.status.url=https://usertest-messages.sciquest.com/apps/Router/InvoiceStatusMessage
b2b.production.invoice.status.url=https://integrations.sciquest.com/apps/Router/InvoiceStatusMessage
b2b.test.user.url=https://usertest-messages.sciquest.com/apps/Router/OrgUserImport
b2b.production.user.url=https://integrations.sciquest.com/apps/Router/OrgUserImport
b2b.test.requisition.url=https://usertest-messages.sciquest.com/apps/Router/PRXMLImport
b2b.production.requisition.url=https://integrations.sciquest.com/apps/Router/PRXMLImport
b2b.test.jaggaer.url=https://usertest.sciquest.com/apps/Router/SAMLAuth/UConnFullSuite
b2b.production.jaggaer.url=https://solutions.sciquest.com/apps/Router/SAMLAuth/UConnFullSuite




Post Deployment

XML Ingestion

It is necessary to