Intersult Live is a product for live deployment of files.

Problem Description#

When developing web projects, the flow of creation is interrupted by redployments. Especially in projects with dependencies, using maven or other build processes. Changing some XHTML or Java-Code causes build, build of dependencies, redeploy and loss of server state.

Solution#

Intersult Live connects resource and class loading to arbitrary paths. Each resource loading location, packed as JAR, WAR, EAR or unpacked can be mapped directly to a workspace location. Intersult Live is a very generic solution of resource loading redirect, thus it supports a large variety of application servers. It has been testet with Tomcat, JBoss and Glassfish without any problems.

State of Development#

The project is very new. Currently the following features are supported:
  • reloading of resources like .XHTML or .properties files
  • reloading of classes where with changes in method body only
  • redirection of JAR-Entries to individual files in workspace
  • redirection of JNDI-locations and other URLs

How it works#

  1. Download current version of http://repository.intersult.com/repository/com/intersult/live/1.0-SNAPSHOT/live-1.0-SNAPSHOT.jar from Intersult repository.
  2. Place on some path on you local file system, prefered having no spaces inside
  3. Add -noverify -javaagent:<path>\1.0-SNAPSHOT\live-1.0-SNAPSHOT.jar to your JVM-Options, where <path> is local path to live-1.0-SNAPSHOT.jar
  4. Restart your application server and watch for ##### Starting Intersult Live ##### on the output or logfile
  5. Place a live.xml in your WARs, EARs and JARs

Example in Pure Java#

<?xml version="1.0" encoding="UTF-8"?>
<live>
	<mapping source="C\:\Java\workspace-helios\com.intersult\public\jsf-desktop\target/classes" target="/"/>
</live>

The live.xml has to be located in the root directory of the resulting JAR file. It is independent using \ or / as path separators, paths are normalized.

Examples with Maven 2#

If you use maven 2 for the build process, it is very nice to generate source path into the live.xml. Just active resource filtering for properties files:
<project>
        ...
	<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<excludes>
					<exclude>**/*.properties</exclude>
				</excludes>
				<filtering>true</filtering>
			</resource>
		</resources>
	</build>
	...
</project>

After this step you are able to use ${...}-Expressions in live.xml files: Simply JAR:

<?xml version="1.0" encoding="UTF-8"?>
<live xmlns="http://intersult.com/live/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://intersult.com/live/1.0 http://repository.intersult.com/repository/com/intersult/live/1.0-SNAPSHOT/live.xsd ">
	<mapping source="${project.build.directory}/classes" target="/"/>
</live>

JAR with resources:

<?xml version="1.0" encoding="UTF-8"?>
<live xmlns="http://intersult.com/live/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://intersult.com/live/1.0 http://repository.intersult.com/repository/com/intersult/live/1.0-SNAPSHOT/live.xsd ">
	<mapping source="${project.build.directory}/classes" target="/">
		<exclude path="/META-INF*"/>
	</mapping>
	<mapping source="${basedir}/src/main/resources" target="/"/>
</live>

WAR:

<?xml version="1.0" encoding="UTF-8"?>
<live xmlns="http://intersult.com/live/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://intersult.com/live/1.0 http://repository.intersult.com/repository/com/intersult/live/1.0-SNAPSHOT/live.xsd">
	<mapping source="${project.build.directory}/classes" target="/WEB-INF/classes"/>
	<mapping source="${basedir}/src/main/webapp" target="/" loader="jndi:/localhost/${project.name}">
		<exclude path="/META-INF*"/>
	</mapping>
</live>

XML Schema#

The live.xml definitions above references the live.xsd schema from intersult.com repository. Manually you can access the XML Schema Definition (XSD) at live.xsd