Update Glassfish 3.0 to use Jersey 1.3

September 6th, 2010

In order to update Glassfish 3.0 to use Jersey 1.3 we had to write over the Jersey files in the “modules” subfolder of the glassfish installation.

Here are some maven dependencies for the required files:

   <properties>
      <jersey.version>1.3</jersey.version>
      <jackson.version>1.5.6</jackson.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-server</artifactId>
         <version>${jersey.version}</version>
      </dependency>
      <dependency>
         <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-client</artifactId>
         <version>${jersey.version}</version>
      </dependency>
      <dependency>
         <groupId>com.sun.jersey</groupId>
         <artifactId>jersey-json</artifactId>
         <version>${jersey.version}</version>
      </dependency>
      <dependency>
         <groupId>com.sun.jersey.glassfish.v3.osgi</groupId>
         <artifactId>jersey-gf-server</artifactId>
         <version>${jersey.version}</version>
      </dependency>
     <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-xc</artifactId>
        <version>${jackson.version}</version>
     </dependency>
     <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-jaxrs</artifactId>
        <version>${jackson.version}</version>
     </dependency>
     <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>${jackson.version}</version>
     </dependency>
     <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>${jackson.version}</version>
     </dependency> 
   </dependencies>

And here is a assembly plugin snippet which will rename the dependencies the way glassfish expects them to be named

   <dependencySets>
      <dependencySet>
         <outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
         <outputDirectory>modules</outputDirectory>
      </dependencySet>
   </dependencySets>

Serving static content and Jersey

September 2nd, 2010

If you want to serve static content from the same WAR as Jersey resources, it is possible to configure Jersey to run as a filter rather than a Servlet.

You can then define the property com.sun.jersey.config.property.WebPageContentRegex to exclude URLs matching the regular expression from being handled by Jersey. Instead request matching the pattern will fall through to the next filter and eventually the default Servlet, which can respond with your static content in the normal way.

   <filter>
      <filter-name>jerseyFilter</filter-name>
      <filter-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class>
      <init-param>
         <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
         <param-value>/static/.*</param-value>
      </init-param>
   </filter>
   <filter-mapping>
      <filter-name>jerseyFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>

producing zero padded incrementing numbers in vim

August 9th, 2010
:let j=[] | %s/xxxx/\=printf(”%04d”, “”.len(add(j,”)))/g

(adapted from this tip)

Testing using FEST Swing in CruiseControl

April 13th, 2010

I have a CruiseControl CI build running as a windows service. Unfortunately when unit tests involving FEST Swing are run they fail as they need to actually render the UI components to a logged in user’s desktop.

My CruiseControl machines are virtual windows server 2003 machines running on vmware. So each build has its own dedicated virtual machine.

I followed the instructions for hudson builds on windows from the FEST Swing site.

Configure the server to auto login your build user:

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon=1
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName=testuser
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword=secret

Start CruiseControl on login by creating a batch file in the users “Start Up” start menu folder containing:

"C:\Program Files\CruiseControl\Wrapper.exe" -c "C:\Program Files\CruiseControl\wrapper.conf"

Make sure that the screen saver is disabled.

ActiveMq 5.3.0 and JBoss JMX

January 19th, 2010

It seems that in ActiveMq 5.3.0 someone has change the way that the JMX Management Context is discovered.

If you simply upgrade from version 5.2.0 to 5.3.0 you will need to define the system property jboss.platform.mbeanserver

I think this tells JBoss to use the platform MBean server instead of starting it own; and it is the platform MBean server that ActiveMQ uses for its org.apache.activemq:BrokerName=localhost,* MBeans.

Glassfish v3 create service

January 12th, 2010

So, I am in the unfortunate position of having to run Glassfish v3 on Windows 2003 server. Sun seem to have improved the asadmin create-service command so that it can create windows services as well as Solaris services.

Unfortunately, this new windows service creation functionality doesn’t seem to be documented anywhere.

Glassfish Answer File

January 12th, 2010

I’ve managed to get the glassfish v3 silent install working.

Maybe I should have just used the zip file distribution… anyway….

Here is the answer file I used. all the ${variables} need to be filled in with the values relevant to your situation. You have to pass the -s option as well as the -a option to the glassfish installer exe.

RegistrationOptions.regoptions.CREATE_NEWACCT=CREATE_NEWACCT
glassfish.Administration.HTTP_PORT=${glassfish.http.port}
updatetool.Configuration.PROXY_PORT=
glassfish.Administration.ADMIN_PASSWORD=${glassfish.admin.password}
JDKSelection.directory.JDK_FROM_LIST_CHOICE=false
RegistrationOptions.regoptions.SKIP_REGISTRATION=SKIP_REGISTRATION
updatetool.Configuration.PROXY_HOST=
SOAccountCreation.accountinfo.COUNTRY=
InstallHome.directory.INSTALL_HOME=${INSTALL_PATH}
RegistrationOptions.regoptions.USE_EXISTINGACCT=USE_EXISTINGACCT
SOAccountCreation.accountinfo.FIRSTNAME=
updatetool.Configuration.ALLOW_UPDATE_CHECK=false
glassfish.Administration.ADMIN_USER=${glassfish.admin.user}
JDKSelection.directory.JDK_LIST=
SOAccountCreation.accountinfo.PASSWORD=
SOAccountCreation.accountinfo.COMPANYNAME=
JDKSelection.directory.HIDDEN_JDK=
SOAccountCreation.accountinfo.COUNTRY_DROP_DOWN=
SOAccountCreation.accountinfo.REENTERPASSWORD=
License.license.ACCEPT_LICENSE=0
RegistrationOptions.regoptions.USERNAME=
updatetool.Configuration.BOOTSTRAP_UPDATETOOL=false
SOAccountCreation.accountinfo.LASTNAME=
glassfish.Administration.ADMIN_PORT=${glassfish.admin.port}
RegistrationOptions.regoptions.USERPASSWORD=
JDKSelection.directory.JDK_TYPED_IN_CHOICE=true
SOAccountCreation.accountinfo.EMAIL=
JDKSelection.directory.JDK_TYPE_IN=${JDKPath}
RegistrationOptions.regoptions.DUMMY_PROP=

Glassfish Automated Installation

January 12th, 2010

I’m struggling with the Glassfish v3 automated installation. I’m trying to follow the instructions in the glassfish install documentation. But the variables they mention as configurable don’t correspond with the variables that are in the generated answer file.

Things I know so far are:

  • you can generate an answer file using the -n option
  • you can read the answer file in using the -a option
  • you have to specify -s if you want the installer to run silently
  • you can create a windows service using asadmin create-service which seems to be new to version 3

Using the maven-embedded-glassfish-plugin

January 5th, 2010

Here is my first working XML for running unit tests against an application deployed on an embedded glassfish v3 instance:

<plugin>
   <groupId>org.glassfish</groupId>
   <artifactId>maven-embedded-glassfish-plugin</artifactId>
   <version>3.0</version>
   <configuration>
      <goalPrefix>glassfish</goalPrefix>
      <app>App.war</app>
      <port>8080</port>
      <contextRoot>App</contextRoot>
   </configuration>
   <executions>
      <execution>
         <id>start-glassfish</id>
         <phase>generate-test-resources</phase>
         <goals>
            <goal>start</goal>
         </goals>
      </execution>
      <execution>
         <id>deploy-glassfish</id>
         <phase>pre-integration-test</phase>
         <goals>
            <goal>deploy</goal>
         </goals>
      </execution>
      <execution>
         <id>stop-glassfish</id>
         <phase>post-integration-test</phase>
         <goals>
            <goal>stop</goal>
         </goals>
      </execution>
  </executions>
</plugin>

Glassfish v3 Maven plugin

January 5th, 2010

Apparently there is a plugin for Maven that allows you to deploy your application against an embedded maven server http://blogs.sun.com/sirajg/entry/using_maven_plugin_for_v3

If it works, I’ll be able to get rid of all the complicated Maven XML I have for downloading and installing Glassfish V2.

There is documentation available for the plugin in the Sun GlassFish Enterprise Server v3 Embedded Server Guide