Monday, 19 September 2011

Deploying Applications to Weblogic Using Maven

When developing JEE applications as part of the development cycle, it’s important to deploy to a development server before running end to end or integration tests. This blog demonstrates how to deploy your applications to your Weblogic server using Maven and, it transpires that there are at least two ways of doing this.

The first way is using a the weblogic-maven-plugin available from Oracle and you can find an article on how to install this available on the Oracle website. The unfortunate thing about this is that Oracle don’t deploy their JARs to a Maven repository, which means that you have to do some jiggery-pokery messing around setting up your local repository. The Oracle article defines three steps: creating a plug-in jar using the wljarbuilder tool, extracting the pom.xml and then installing the results to your local repository using mvn install:install-file. In order to use this plug-in, you’ll need to add the following to your program’s POM file:

<plugin> 
    <groupId>com.oracle.weblogic</groupId> 
        <artifactId>weblogic-maven-plugin</artifactId> 
        <version>10.3.4</version> 
        <configuration> 
            <adminurl>t3://localhost:7001</adminurl>
            <user>weblogic</user> 
            <password>your-password</password> 
            <upload>true</upload> 
            <action>deploy</action> 
            <remote>false</remote> 
            <verbose>true</verbose> 
            <source>../marin-tips-ear/target/marin-tips.ear</source> 
            <name>${project.build.finalName}</name> 
        </configuration> 
        <executions> 
            <execution> 
                <phase>install</phase> 
                <goals> 
                    <goal>deploy</goal> 
                </goals> 
            </execution> 
        </executions> 
    </plugin> 

The second method of deploying an application to your Weblogic server is by using a ‘good-ol’ Ant script. This method is simpler as you don’t need to bother creating plug-in JARs or installing them in your local repository. The POM file additions are:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
        <execution>
            <id>deploy-to-server</id>
            <phase>pre-integration-test</phase>
            <configuration>
                <tasks>
                <property environment="env"/>
                <taskdef name="wldeploy" classpath="/Users/Roger/Weblogic/wls1035_dev/wlserver/server/lib/weblogic.jar"
                      classname="weblogic.ant.taskdefs.management.WLDeploy"/>
                <wldeploy action="deploy" verbose="true" source="../marin-tips-ear/target/marin-tips.ear"
                      name="marin-tips" user="weblogic" password="password"
                      adminurl="t3://localhost:7001"
                      targets="myserver"/>
            </tasks>
            </configuration>
            <goals>
                <goal>run</goal>
            </goals>
        </execution>
    </executions>
</plugin>    

I prefer the old fashioned Ant way more purely because it’s less hassle and adheres to the Keep It Simple Stupid rule of programming as, unless Oracle make their JAR files available on some repository, then extra set-up steps aren’t really an improvement.

2 comments:

Anonymous said...

Thanks for the writeup!

When you say the ant-way is "less hassle" though, it looks to me its primarily because you use that hardcoded classpath /Users/Roger/...

Much worse, imho, since it means the pom.xml only works on your machine, and needs to be modified by every other programmer working in the project -- just the kind of awkward stuff mvn was designed to avoid.

Roger Hughes said...

Thanks for the comment and a good observation. You should remember that these are only samples and so, yes, I have hard coded the classpath, URL and other bits and pieces. In a real world project, whatever the solution chosen, I’d make use of a Maven profile, so that the hard coded values were replaced by the usual ${variable} notation, and/or ensure that all developer machines use a common configuration. The use of Ant is just personal preference (and I’m not a big fan of Ant) - if Oracle did organise some public Maven repositories, I’d use them, and the weblogic-maven-plugin in a flash.