Пакетное создание домена работает в командной строке, но не через плагин exec maven - PullRequest
0 голосов
/ 04 августа 2011

Я написал небольшой файл, содержащий последовательность создания домена Glassfish, который выглядит следующим образом:

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

Я обычно выполняю все эти шаги через Glassfish asadmin многомодовый .

При выполнении всего этого вручную, используя следующую инструкцию

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

Выполнение занимает менее двух минут.

Но при запуске через maven, используя следующую конфигурацию pom

                <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>

Он останавливается при запуске домена с последними строками журнала

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 указывает на то, что для всех процессов, порожденных плагином exec maven, загрузка процессора абсолютно отсутствует.

Кроме того, для командной строки, созданной плагином exec maven,

[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"

, который полностью идентичен тому, который я ввел вручную.

Так ... что может заставить этот процесс зависать? И что я мог сделать, чтобы это исправить?

[EDIT] Добавление флага --verbose в инструкцию начального домена отображается в виде последней строки перед тем, как процесс повесит следующие:

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|#]

Если кто-то знает, что следует запускать после JMX, и что может помешать его запуску, я думаю, это поможет мне исправить эту странную ошибку.

1 Ответ

1 голос
/ 03 января 2012

Сделав больше мавенских ката, чем я когда-либо ожидал, я нашел решение. Это идет (очевидно) путь maven-antrun-plugin .

используя это, я заменил конфигурацию maven exec следующим кодом maven antrun

                    <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>

И это прекрасно работает!

...