mavenglassfishexec-maven-pluginasadmin

Batch creation of domain working in command line, but not through exec maven plugin


I've written a small file containing a Glassfish domain creation sequence, that looks like this :

create-domain --adminPort 4848 --instancePort 8080 pouet
start-domain pouet
create-jdbc-connection-pool --datasourceclassname=org.apache.derby.jdbc.ClientDataSource --restype=javax.sql.ConnectionPoolDataSource --validationmethod=meta-data --description="Client datasource using an external Derby instance" --property port=1527:password=pouet:user=pouet:serverName=localhost:databaseName=pouet:connectionAttributes=create\\=true jdbc/datasource/pouet
create-jms-resource --restype javax.jms.ConnectionFactory --description "Standard pouet connection factory" jms/pouet/ConnectionFactory
create-jms-resource --restype javax.jms.Topic --property Name=jms_CrudServiceNotifier jms/CrudServiceNotifier
create-jms-resource --restype javax.jms.Topic jms/TaskExecution
create-jms-resource --restype javax.jms.Topic jms/TaskExecution/InDesign
deploy --force "C:\\Documents and Settings\\ndx\\.m2\\repository\\com\\netoprise\\neo4j-connector\\0.1-SNAPSHOT\\neo4j-connector-0.1-SNAPSHOT.rar"
create-connector-connection-pool --raname=neo4j-connector-0.1-SNAPSHOT --connectiondefinition=com.netoprise.neo4j.connection.Neo4JConnectionFactory  --property=xa=true:dir=\$\{com.sun.aas.instanceRoot\}/lib/databases/neo4j Neo4jPool
create-connector-resource --poolname=Neo4jPool neo4j/pool

I usually run all thoses steps through Glassfish asadmin multimode.

When running all that by hand using the following instruction

E:\java-ext\glassfish3\bin\asadmin.bat --user "pouet" --passwordfile src\main\config\glassfish.password multimode --file target\config\current\create-domain.txt

It takes less than two minutes to execute.

But when running it through maven using the following pom configuration

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.2</version>
                    <executions>
                        <execution>
                            <id>create start and configure domain</id>
                            <phase>package</phase>
                            <goals>
                                <goal>exec</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <executable>${glassfish.asadmin}</executable>
                        <arguments>
                            <argument>--user</argument>
                            <argument>"${glassfish.user}"</argument>
                            <argument>--passwordfile</argument>
                            <argument>"${glassfish.passwordFile}"</argument>
                            <argument>multimode</argument>
                            <!-- - - file is a multimode subcommand parameter, and not an asadmin parameter -->
                            <argument>--file</argument>
                            <argument>"${user.glassfish.config.path}/create-domain.txt"</argument>
                        </arguments>
                    </configuration>
                </plugin>

It stays stalled at domain startup with the log last lines being

No domain initializers found, bypassing customization step
Domain pouet created.
Domain pouet admin port is 4848.
Domain pouet admin user is "pouet".
Command create-domain executed successfully.
Attempting to start pouet.... Please look at the server log for more details.....

Process Explorer indicates, for all process spawned by exec maven plugin, absolutely no CPU consumption.

Besides, exec maven plugin created command line is

[DEBUG] Executing command line: cmd /c E:\java-ext\glassfish3\bin\asadmin.bat --user "pouet" --passwordfile "E:\JavaWorkspace\pouet\pouet-ear/src/main/config/glassfish.password" multimode --file "E:\JavaWorkspace\pouet\pouet-ear/target/config/current/create-domain.txt"

which is totally identical to the one I entered by hand.

So ... what could possibly make that process hang ? And what could I do to fix that ?

[EDIT] Adding --verbose flag to start-domain instruction displays as last line before process hangs the following ones :

4 août 2011 16:05:58 com.sun.enterprise.admin.launcher.GFLauncherLogger info
INFO: Successfully launched in 16 msec.
[#|2011-08-04T16:06:03.078+0200|INFO|glassfish3.1|null|_ThreadID=1;_ThreadName=Thread-1;|Running GlassFish Version: GlassFish Server Open Source Edition 3.1 (build 43)|#]

[#|2011-08-04T16:06:03.156+0200|INFO|glassfish3.1|org.glassfish.ha.store.spi.BackingStoreFactoryRegistry|_ThreadID=10;_ThreadName=Thread-1;|Registered org.glassfish.ha.store.adapter.cache.ShoalBackingStoreProxy for persistence-type = replicated in BackingStoreFactoryRegistry|#]

[#|2011-08-04T16:06:03.843+0200|INFO|glassfish3.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=27;_ThreadName=Thread-1;|Grizzly Framework 1.9.31 started in: 297ms - bound to [0.0.0.0:8181]|#]

[#|2011-08-04T16:06:03.859+0200|INFO|glassfish3.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=28;_ThreadName=Thread-1;|Grizzly Framework 1.9.31 started in: 266ms - bound to [0.0.0.0:4848]|#]

[#|2011-08-04T16:06:03.859+0200|INFO|glassfish3.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=32;_ThreadName=Thread-1;|Grizzly Framework 1.9.31 started in: 219ms - bound to [0.0.0.0:3700]|#]

[#|2011-08-04T16:06:03.859+0200|INFO|glassfish3.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=29;_ThreadName=Thread-1;|Grizzly Framework 1.9.31 started in: 391ms - bound to [0.0.0.0:8080]|#]

[#|2011-08-04T16:06:03.921+0200|INFO|glassfish3.1|javax.enterprise.system.core.com.sun.enterprise.v3.services.impl|_ThreadID=35;_ThreadName=Thread-1;|Grizzly Framework 1.9.31 started in: 15ms - bound to [0.0.0.0:7676]|#]

[#|2011-08-04T16:06:04.109+0200|INFO|glassfish3.1|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=1;_ThreadName=Thread-1;|GlassFish Server Open Source Edition 3.1 (43) startup time : Felix (3 360ms), startup services(1 656ms), total(5 016ms)|#]

[#|2011-08-04T16:06:05.281+0200|INFO|glassfish3.1|javax.enterprise.system.tools.admin.org.glassfish.server|_ThreadID=46;_ThreadName=Thread-1;|JMXStartupService: Started JMXConnector, JMXService URL = service:jmx:rmi://172.27.63.177:8686/jndi/rmi://172.27.63.177:8686/jmxrmi|#]

If someone knows what is to be started after JMX, and what could possibly prevent it from starting, it would, i think, help me fix that weird bug.


Solution

  • Having done more maven katas than I ever expected to do, I've now found a solution. This goes (obviously) the maven-antrun-plugin way.

    using so, i replaced the maven exec configuration with the following maven antrun code

                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>create start and configure domain</id>
                                <phase>process-resources</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <failOnError>true</failOnError>
                                    <target>
                                        <exec executable="${glassfish.asadmin}" dir="${glassfish.asadmin.path}"
                                            failonerror="true" vmlauncher="false">
                                            <arg value="--echo"/>
                                            <arg value="true"/>
                                            <arg value="--interactive"/>
                                            <arg value="false"/>
                                            <arg value="--user"/>
                                            <arg value="${glassfish.user}"/>
                                            <arg value="--passwordfile"/>
                                            <arg value="${glassfish.passwordFile}"/>
    
                                            <arg value="multimode"/>
    
                                            <arg value="--printprompt=false"/>
                                            <arg value="--file"/>
                                            <arg value="${user.glassfish.config.path}/create-domain.txt"/>
                                        </exec>
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
    

    And it perfectly works !