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
- 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
- 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>
- Configure the Kuali Service Bus Dispatcher Servlet
Navigate to src/main/webapp/WEB-INF and find web.xml
Add the following code to web.xmlsrc/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>
- Create Rice Runtime Configuration File
In src/main/resources, create a new file called m2eclipseRice-config.xmlsrc/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>
- 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>
- Build WAR File
In the project structure, right-click on pom.xml
Select Run As -> Maven package
m2eclipse will build \m2eclipseRice\target\m2eclipseRice.war
- 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