Question

I'm currently trying to use cargo to deploy an application on a remote glassfish 3.1.2 through atlassian's bamboo. This is a development environment so the same application with a different version number will be deployed on the same context root every time.

But every-time I execute the job with the maven goal :

org.codehaus.cargo:cargo-maven2-plugin:redeploy

I keep getting the error :

11-Jun-2013 15:13:48    Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.4.2:redeploy failed: Deployment has failed: Action failed Deploying application to target server failed; Error occurred during deployment: Application with name myapp-1.4.8 is already registered. Either specify that redeployment must be forced, or redeploy the application. Or if this is a new deployment, pick a different name. Please see server.log for more details.
11-Jun-2013 15:13:48    
11-Jun-2013 15:13:48            at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:110)
11-Jun-2013 15:13:48            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
11-Jun-2013 15:13:48            ... 19 more
11-Jun-2013 15:13:48    Caused by: org.codehaus.cargo.util.CargoException: Deployment has failed: Action failed Deploying application to target server failed; Error occurred during deployment: Application with name myapp-1.4.8 is already registered. Either specify that redeployment must be forced, or redeploy the application. Or if this is a new deployment, pick a different name. Please see server.log for more details.
11-Jun-2013 15:13:48    
11-Jun-2013 15:13:48            at org.codehaus.cargo.container.spi.deployer.AbstractJsr88Deployer.waitForProgressObject(AbstractJsr88Deployer.java:285)
11-Jun-2013 15:13:48            at org.codehaus.cargo.container.spi.deployer.AbstractJsr88Deployer.deploy(AbstractJsr88Deployer.java:123)
11-Jun-2013 15:13:48            at org.codehaus.cargo.container.spi.deployer.AbstractJsr88Deployer.redeploy(AbstractJsr88Deployer.java:207)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.DeployerRedeployMojo.performDeployerActionOnSingleDeployable(DeployerRedeployMojo.java:50)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.AbstractDeployerMojo.performDeployerActionOnAllDeployables(AbstractDeployerMojo.java:180)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.AbstractDeployerMojo.doExecute(AbstractDeployerMojo.java:97)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.AbstractCargoMojo.execute(AbstractCargoMojo.java:432)
11-Jun-2013 15:13:48            at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
11-Jun-2013 15:13:48            ... 20 more
11-Jun-2013 15:13:48    [ERROR] 
11-Jun-2013 15:13:48    [ERROR] 
11-Jun-2013 15:13:48    [ERROR] For more information about the errors and possible solutions, please read the following articles:
11-Jun-2013 15:13:48    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
11-Jun-2013 15:13:48    [ERROR] 
11-Jun-2013 15:13:48    [ERROR] After correcting the problems, you can resume the build with the command

What I need is for the cargo plugin to force redeployment regardless of the fact that an application (older version) already exists for that context root.

If I was running the asadmin command manually I could easily add the --force parameter and it would work.

I have an additional constraint, I cannot install a local version of glassfish on the server hosting the bamboo instance so I cannot use stuff like the maven sh plugin to manually build the asadmin command.

Below is the relevant pom.xml fragment :

<build>
        <finalName>myapp-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.4.2</version>
                <configuration>
                    <container>
                        <containerId>glassfish3x</containerId>
                        <type>remote</type>
                    </container>
                    <configuration>
                        <type>runtime</type>
                        <properties>
                            <cargo.remote.username>${cargo.remote.username}</cargo.remote.username>
                            <cargo.remote.password>${cargo.remote.password}</cargo.remote.password>
                            <cargo.glassfish.admin.port>${cargo.glassfish.admin.port}</cargo.glassfish.admin.port>
                            <cargo.hostname>${cargo.hostname}</cargo.hostname>
                        </properties>
                    </configuration>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.glassfish.deployment</groupId>
                        <artifactId>deployment-client</artifactId>
                        <version>3.1.1</version>

                    </dependency>
                </dependencies>
            </plugin>

Any ideas?

Was it helpful?

Solution 2

I finally found out how to accomplish this by slightly modifying the way I was deploying and versioning my application and using glassfish's application versioning system. Below is the link to a small blog post that I wrote to show how to accomplish this :

blog post - deploy to remote glassfish using cargo plugin

OTHER TIPS

Had the same problem. Solved it using the suggestion from Marlon by just adding runtime args as follows:

          ...
          <configuration>
            <type>runtime</type>
            <properties>
              <cargo.runtime.args>force=true</cargo.runtime.args>
              <cargo.hostname>${hostname}</cargo.hostname>
              <cargo.remote.username>${username}</cargo.remote.username>
              <cargo.remote.password>${password}</cargo.remote.password>
            </properties>
          </configuration>
          ...

Apparently cargo does a deploy, not a redeploy.

Other way that works for me was using maven-glassfish-plugin, I configured the plugin correctly, I left the pom as a redeploy execution

    <execution>
            <id>gf-deploy</id>
            <phase>package</phase>
            <goals>
                <goal>redeploy</goal>
            </goals>
        </execution>

then I modified the asadmin.bat file, and, after the lines where the script is calling the appserver-cli.jar file I added some lines, notice that redeploy calls an undeploy and a deploy command so the maven glassfish plugin's trick here is print something when the undeploy command runs (Tihs will confuse the maven plugin as if the undeploy command were success always), but, when the asadmin command is deploy the flow will run normal.

:run
if NOT %1 == undeploy goto :end
%JAVA% -jar "%~dp0..\lib\client\appserver-cli.jar" %*
ECHO "TEST"
:end

if %1 == undeploy goto :end1
%JAVA% -jar "%~dp0..\lib\client\appserver-cli.jar" %*
:end1

after do this modification reploy is alaways working so great!

You might need to set up a new glassfish server admin user in the admin realm. Check out the following http://beforeuquit.blogspot.com/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top