CommandResultを確認する
Embedded GlassFishでは管理コンソールがみえないので、asadminコマンドを実行するためのCommandRunnerクラスが用意されています。
glassfish.getCommandRunner().run(
"create-jdbc-connection-pool",
"--driverclassname=com.microsoft.sqlserver.jdbc.SQLServerDataSource",
"--datasourceclassname=com.microsoft.sqlserver.jdbc.SQLServerDataSource",
"--restype=javax.sql.DataSource",
"--property",
"portNumber=1433:databaseName=HogeHoge:serverName=XX.XX.XX.XXX",
"hogehogePool"
);
上記はJDBCのコネクションプールを生成するコマンドを実行したものですが、こんな風に結構長くなったりして、しょぼいスペルミスしたりとかもあったり…(^^;
サンプルではあまり戻り値が気にされてないことが多いのですが、runの戻り値がCommandResultクラスとなっていて
CommandResult result = glassfish.getCommandRunner().run(
"create-jdbc-connection-pool",
"--driverclassname=com.microsoft.sqlserver.jdbc.SQLServerDataSource",
"--datasourceclassname=com.microsoft.sqlserver.jdbc.SQLServerDataSource",
"--restype=javax.sql.DataSource",
"--property",
"portNumber=1433:databaseName=HogeHoge:serverName=XX.XX.XX.XXX",
"hogehogePool"
);
System.out.println(result.getOutput());
System.out.println(result.getFailureCause());
System.out.println(result.getExitStatus());
上記が成功すると
PlainTextActionReporterSUCCESSJDBC connection pool hogehogePool created successfully.
null
SUCCESS
みたいな出力となります。
最後にコールしたgetExitStatus()の戻り値はExitStatusクラスで
- CommandResult.ExitStatus.SUCCESS
- CommandResult.ExitStatus.WARNING
- CommandResult.ExitStatus.FAILURE
等の値判定で細かく分岐することもできます。
試しに「create-jdbc-connection-pool」のコマンド名を間違えてみます。「create-jdbc-connection-poola」みたいな(^^;l
そうすると
Exception while executing command.
java.lang.NullPointerException
FAILURE
と失敗が明確にわかります。
propertyの指定で誤ったシンタックスを入れたりすると
PlainTextActionReporterFAILUREjava.lang.IllegalArgumentException: Invalid property syntax, missing property value: aDescription: create-jdbc-connection-pool commandInvalid property syntax, missing property value: a
Usage: //長いので省略
java.lang.IllegalArgumentException: Invalid property syntax, missing property value: a
FAILURE
みたいな感じです。
詳細なログを出す
上記の設定でasadmin関連の処理は無事に成功して、Embedded GlassFishが起動できて、最後にデプロイ!すると上手くいかない、なんてケースもありました。
デプロイの実行内容で詳細な内容をみたい場合は、以下のようなログ記述を入れると簡単に確認できます。
Logger.getLogger("").getHandlers()[0].setLevel(Level.SEVERE);
Logger.getLogger("javax.enterprise.system.tools.deployment").setLevel(Level.SEVERE);
Logger.getLogger("javax.enterprise.system").setLevel(Level.SEVERE);
元ネタは以下ですが、Embedded GlassFishのドキュメントにも書いてありました。
Changing Log Levels in Embedded GlassFish