Welcome to RPM - Rolf's Project Management.
This project aims to demonstrate how to use The Lift-framework to implement an application with uses Domain Driven Design and technologies like Spring, Spring Security (with remember-me), JPA (Hibernate), Oval Validation, jQuery-UI and the PostgreSQL RDBMS. It also shows how one can use other frameworks with Lift, example is with JSF, and use Lift-backed AJAX-dialogs and comet on a JSF-page
Features:
- URI-based locale selection
- Dynamic, type-safe, form-fields with in-place validation and optional AJAX-callbacks on "field-change"
- Type-safe i18n
- Modern (technical, not looks) and responsive GUI for editing entities in a jQuery-dialog
- AJAX-spinner which follows mouse on AJAX-requests
- Execute custom JavaScript when different radio-buttons (in same group) are checked
- In this demo it just toggles the value of a text below the radio-buttons
- Oval integration, http://oval.sf.net
- Modularize the code into functional domains by having a PersistenceUnit spread across multiple maven-modules and have Spring wire it up correctly
- Uses scala-jpa
- JPA-entities written in Scala with Scala-based Enumerations and Option-types in JPA-entities with custom Hibernate-converters
- Automatic lazy-load lazy-associations without using custom AOP-trickery (new in Hibernate-4.1.7)
- Automatic registering JodaTime types in Hibernate (note: Doesn't work on Option[DateTime] type where custom user-type is needed)
- Use Option in (JPA) domain-object's properties *and* associations to completely avoid _null_
- Spring Security with remember me and integration with Lift
- Blog, with nested comments and comment-votes
- The blog-view is always in sync (using Comet), no need to refresh to see new posts, comments or updated votes
- Nice GUI
- Useful functionality
- Testing
- PostgreSQL 9.0 or later is required to run this application.
- A Maven-3 installation. You need the oss.sonatype.org repo in order to get lift-2.5-SNAPSHOT, like this example ~/.m2/settings.xml
<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <profiles> <profile> <id>mydefaultprofile</id> <repositories> <repository> <id>oss-sonatype</id> <url>https://oss.sonatype.org/content/groups/public/</url> <snapshots> <enabled>true</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories> </profile> </profiles> <activeProfiles> <activeProfile>mydefaultprofile</activeprofile> </activeprofiles> </settings>
DB-configuration: Ensure these properties are set to match your DB-settings, configured in /spring/props/infrastructure.properties
infrastructure.datasource.RPM.serverName=localhost infrastructure.datasource.RPM.port=5432 infrastructure.datasource.RPM.username=your-username infrastructure.datasource.RPM.password=xxx
Issue the following commands to bootstrap the application:
$ cd <checked out sources> $ createdb rpm $ mvn install # have a cup of coffee while downloading the Internet if this is your 1st Maven-project. $ cd web $ MAVEN_OPTS="-XX:MaxPermSize=256m -Xmx512m -javaagent:$HOME/.m2/repository/org/springframework/spring-instrument/3.1.2.RELEASE/spring-instrument-3.1.2.RELEASE.jar" mvn tomcat7:run $ psql -f bootstrap/sampledata.sql rpm
Notes on bootstrapping the application: It's crucial to run the sampledata.sql script *after* starting tomcat because Hibernate will generate the relevant tables upon boot. The Spring-context needs a loadtime-weaver to be able to inject Spring-beans into non-Spring-managed classes (like snippets), so ensure that spring-instrument gets added as a javaagent.
Open a web-browser on http://localhost:8080/rpm/en/projects or http://localhost:8080/rpm/no/projects (for Norwegian) and login with:
username: admin password: Fish123
NB: Testing is completely non-existent, on purpose.