Versions Compared

Key

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

Overview

Use this recipe to build a skeleton web application named M2Rice which has the Rice KEW and Rice KSB Services embedded in it.

Development Environment

Operating System

Windows XP


Application Server

localhost

Application Container

Tomcat 5.5.23

CATALINA_HOME

C:\Tomcat 5.5


IDE

Eclipse Ganymede 3.4.0

Workspace

C:\Development\KualiRice.workspace

Rice Source Directory

C:\Development\KualiRice.workspace\KualiRice0.9.3


Maven

2.0.9

M2_HOME

C:\apache-maven-2.0.9

M2_OPTS

-Xms256m -Xmx512m

M2_REPO

C:\JavaLib\mvnrepository

Maven Integration

m2eclipse

Update Site

http://m2eclipse.sonatype.org/update/

Build Sheet

  1. Create Maven Project
    Start Eclipse
    Go to File -> New -> Project -> Maven Project
    Check the Use default Workspace location box and click Next
    Select Internal as the catalog
    From the list of archetypes, select the maven-archetype-webapp Arctifact Id and click Next

    For Group Id, enter edu.ucdavis.iet
    For Artifact Id, enter M2Rice

    Click Finish

  2. Embed the Kuali Service Bus and Kuali Enterprise Workflow
    • Identify Rice dependencies
      Add the following to your pom.xml
      Code Block
      titlepom.xml
      <repository>
      	<id>kuali</id>
      	<name>Kuali Repository</name>
      	<url>https://test.kuali.org/maven/</url>
      </repository>
      
      <dependency>
      	<groupId>org.kuali.rice</groupId>
      	<artifactId>rice-ksb</artifactId>
      	<version>0.9.3</version>
      </dependency>
      

    • Configure KSB Dispatcher Servlet
      Add the following code to web.xml
      Code Block
      title/WEB-INF/web.xml
      <servlet>
        <servlet-name>remoting</servlet-name>
        <servlet-class>edu.iu.uis.eden.messaging.servlet.KSBDispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
      
      <servlet-mapping>
        <servlet-name>remoting</servlet-name>
        <url-pattern>/remoting/*</url-pattern>
      </servlet-mapping>
      

    • Create Rice runtime configuration file
      In the project structure, right-click on src/main/webapp/WEB-INF, then New -> File
      Name the file M2Rice-config.xml
      Code Block
      titlesrc/main/webapp/WEB-INF/M2Rice-config.xml
      <config>
      
          <!-- Core -->
          <param name="application.url">http://localhost:8080/M2Rice</param>
      
          <!-- Database -->
          <param name="datasource.url">jdbc:mysql://localhost:3306/kricedev</param>
          <param name="datasource.username">KRICEDEV</param>
          <param name="datasource.password">*** password ***</param>
          <param name="datasource.ojb.platform">MySQL</param>
          <param name="datasource.platform">org.kuali.rice.database.platform.MySQLPlatform</param>
          <param name="datasource.driver.name">com.mysql.jdbc.Driver</param>
          <param name="datasource.pool.validationQuery">select 1 from dual</param>
          <param name="datasource.pool.maxWait">30000</param>
          <param name="datasource.pool.minSize">2</param>
          <param name="datasource.pool.maxSize">5</param>
      
          <!-- KSB -->
          <param name="serviceServletUrl">${application.url}/remoting/</param>
          <param name="keystore.file">/usr/local/rice/rice.keystore</param>
          <param name="keystore.alias">*** key alias ***</param>
          <param name="keystore.password">*** password ***</param>
      
          <!-- KEW -->
          <param name="workflow.url">${application.url}/en</param>
          <param name="client.protocol">embedded</param>
          <param name="plugin.dir">/usr/local/rice/plugins</param>
          <param name="attachment.dir.location">/usr/local/rice/kew_attachments</param>
      
      </config>
      

    • Configure Spring Beans
      In the project structure, right-click on src/main/resources, then New -> File
      Name the file M2Rice-RiceSpringBeans.xml
      Code Block
      titlesrc/main/resources/M2Rice-RiceSpringBeans.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
      <beans>
      
      <bean id="config" class="org.kuali.rice.config.spring.ConfigFactoryBean">
        <property name="configLocations">
          <list>
            <value>classpath:WEB-INF/M2Rice-config.xml</value>
          </list>
        </property>
      </bean>
      
      <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties" ref="configProperties" />
      </bean>
      
      <bean id="configProperties" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" ref="config" />
        <property name="targetMethod" value="getProperties" />
      </bean>
      
      <bean id="rice" class="org.kuali.rice.config.RiceConfigurer">
        <property name="dataSource" ref="riceDataSource" />
        <property name="transactionManager" ref="jotm" />
        <property name="userTransaction" ref="jotm" />
        <property name="properties">
          <props>
            <prop key="message.entity">M2Rice</prop>
            <prop key="message.persistence">true</prop>
      
            <prop key="message.delivery">asynchronous</prop>
            <prop key="Routing.ImmediateExceptionRouting">false</prop>
            <prop key="RouteQueue.timeIncrement">1000</prop>
            <prop key="RouteQueue.maxRetryAttempts">3</prop>
            <prop key="useQuartzDatabase">true</prop>
            <prop key="ksb.org.quartz.scheduler.instanceId">AUTO</prop>
            <prop key="ksb.org.quartz.scheduler.instanceName">KSBScheduler</prop>
            <prop key="ksb.org.quartz.jobStore.isClustered">true</prop>
            <prop key="ksb.org.quartz.jobStore.tablePrefix">KR_QRTZ_</prop>
          </props>
        </property>
        <property name="modules">
          <list>
            <bean class="edu.iu.uis.eden.messaging.config.KSBConfigurer">
              <property name="serviceServletUrl" value="${serviceServletUrl}" />
            </bean>
            <bean class="org.kuali.workflow.config.KEWConfigurer">
              <property name="dataSource" ref="riceDataSource"/>
            </bean>
          </list>
        </property>
      </bean>
      
      <bean id="ksbConfigurer" class="edu.iu.uis.eden.config.spring.KSBSpringConfigurer">
      	<property name="clientProtocol" value="embedded" />
      	<property name="messageEntity" value="M2Rice" />
      	<property name="dataSource" ref="riceDataSource" />
      	<property name="transactionManager">
      		<ref bean="jotm" />
      	</property>
      	<property name="userTransaction">
      		<ref bean="jotm" />
      	</property>
      </bean>
      
      <bean id="riceDataSource" class="org.kuali.rice.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.maxSize}" />
      	<property name="minSize" value="${datasource.pool.minSize}" />
      	<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="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
      
      </beans>
      

Reference

Rice XML Configuration Subsystem: https://test.kuali.org/confluence/display/KULRICE/Rice+XML+Configuration+Subsystem
Advanced Configuration: https://test.kuali.org/confluence/display/KULRICE/Advanced+Installation+and+Configuration
KSB Module Configuration: https://test.kuali.org/confluence/display/KULRICE/KSB+Module+Configuration
Configuring your application to use KSB: https://test.kuali.org/confluence/display/KULRICE/Configuring+your+application+to+use+KSB
KEW Module Configuration: https://test.kuali.org/confluence/display/KULRICE/KEW+Module+Configuration#KEWModuleConfiguration-Embedded