Build an 0.9.3 Rice KEW-Embedded Web Application Using m2eclipse

Overview

Use this recipe to build a skeleton web application named m2eclipseRice which has the Rice KEW and Rice KSB Services embedded in it. This recipe uses the Maven Integration for Eclipse aka m2eclipse to build the project.

Development Environment

Operating System

Windows XP


JDK

1.5.0_12


Maven

2.0.9

M2_HOME

C:\apache-maven-2.0.9

M2_OPTS

-Xms256m -Xmx512m

M2_REPO

C:\JavaLib\mvnrepository


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


Maven Integration

Maven Integration for Eclipse


Maven Integration for WTP

Build Sheet

  1. Create Maven Project
    Start Eclipse
    Select C:\Development\KualiRice.workspace as your workspace
    Go to File -> New -> Project -> Maven Project
    Accept the default Workspace location and click Next
    In the list of archetypes, select maven-archetype-webapp and click Next
    For Group Id, enter edu.ucdavis.iet (or whatever)
    For ArtifactId, enter m2eclipseRice and click Finish
    This creates a directory named m2eclipseRice (after the artifactId) in C:\Development\KualiRice.workspace

  2. Add Kuali dependencies
    In the project structure, find pom.xml
    Add the following code to pom.xml:
    pom.xml
    <dependencies>
    ...
      <dependency>
        <groupId>org.kuali.rice</groupId>
        <artifactId>rice-ksb</artifactId>
        <version>0.9.3</version>
      </dependency>
    </dependencies>
    
    <repositories>
      <repository>
        <id>kuali</id>
        <name>Kuali Repository</name>
        <url>https://test.kuali.org/maven/</url>
      </repository>
    </repositories>
    

  3. Configure the Kuali Service Bus Dispatcher Servlet
    Navigate to src/main/webapp/WEB-INF and find web.xml
    Add the following code to web.xml
    src/main/webapp/WEB-INF/web.xml
    <web-app>
      <display-name>m2eclipseRice</display-name>
      
      <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>
    
    </web-app>
    

  4. Create Rice Runtime Configuration File
    In src/main/resources, create a new file called m2eclipseRice-config.xml
    src/main/resources/m2eclipseRice-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">classpath: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>
    

  5. Embed the Kuali Service Bus and Kuali Enterprise Workflow
    In src/main/resources, create a new file called m2eclipseRice-RiceSpringBeans.xml
    Configure the Spring Beans as follows:
    src/main/resources/m2eclipseRice-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: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>
    

  6. Build WAR File
    In the project structure, right-click on pom.xml
    Select Run As -> Maven package
    m2eclipse will build \m2eclipseRice\target\m2eclipseRice.war


  7. Deploy M2Rice Application
    Copy \m2eclipseRice\target\m2eclipseRice.war to %CATALINA_HOME%\webapps
    Start Tomcat
    Open the URL: http://localhost:8080/m2eclipseRice/index.jsp

Reference

m2eclipse and WTP How To: http://docs.codehaus.org/display/M2ECLIPSE/WTP+mini+howto#WTPminihowto-Launchwebapplicationontheserver
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