mike-neckのブログ

JavaかJavaFXかJavaEE(なんかJava8が多め)

WildFlyでh2データベースを使う【改】

この前こんな記事書いた。

mike-neck.hatenadiary.com

早速JPA使ったアプリを載せたところ(今頃!?遅っ)、次のようなよくわからんメッセージが…

[2015-04-23 08:55:32,221] Artifact web: Error during artifact deployment.↩
    ↪See server log for details.
[2015-04-23 08:55:32,222] Artifact web: java.lang.Exception: {↩
    ↪"JBAS014771: Services with missing/unavailable dependencies" =>↩
    ↪["jboss.naming.context.java.module.javaee-sample.javaee-sample.DefaultDataSource↩
    ↪is missing [jboss.naming.context.java.jboss.datasources.ExampleDS]"]}

(メッセージは読みやすくするため改行を入れています。)

消したはずのExampleDSがまだどこかに残っている(´・ω・`)

というわけで、standalone.xmlgrepしてみると、次のような行があることが判明。

<default-bindings↩
context-service="java:jboss/ee/concurrency/context/default"
datasource="java:jboss/datasources/ExampleDS"
jms-connection-factory="java:jboss/DefaultJMSConnectionFactory"
managed-executor-service="java:jboss/ee/concurrency/executor/default"
managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>

(読みやすくするために改行を(ry)

というわけで、これのdatasourceを消す方法をググったのだが、どうにも見つからないので、どっかのページで/subsystem=ee/default-bindingsとかでググって、見つけたこのページを真似て、default-bindingsからdatasourceを強引に消し去ってみた。

Wildfly Model Reference

# 全てのdefault-bindingsを表示(show all default-bindings)
[...9990 /] /subsystem=ee/service=default-bindings:read-resource
{
  "outcome" => "success",
  "result" => {
    "context-service" => "java:jboss/ee/concurrency/context/default",
    "datasource" => "java:jboss/datasources/ExampleDS",
    "jms-connection-factory" => "java:jboss/DefaultJMSConnectionFactory",
    "managed-executor-service" => "java:jboss/ee/concurrency/executor/default",
    "managed-scheduled-executor-service" => "java:jboss/ee/concurrency/scheduler/default",
    "managed-thread-factory" => "java:jboss/ee/concurrency/factory/default"
  }
}
# default-bindingsからdatasourceを削除(remove datasource from default-bindings)
[...9990 /] /subsystem=ee/service=default-bindings:undefine-attribute(name=datasource)
{"outcome" => "success"}
# 蓋たりdefault-bindingsを表示(show all default-bindings)
[...9990 /] /subsystem=ee/service=default-bindings:read-resource
{
  "outcome" => "success",
  "result" => {
    "context-service" => "java:jboss/ee/concurrency/context/default",
    "datasource" => undefined,
    "jms-connection-factory" => "java:jboss/DefaultJMSConnectionFactory",
    "managed-executor-service" => "java:jboss/ee/concurrency/executor/default",
    "managed-scheduled-executor-service" => "java:jboss/ee/concurrency/scheduler/default",
    "managed-thread-factory" => "java:jboss/ee/concurrency/factory/default"
  }
}

datasourceのdefault-bindingsがundefinedになっていることがわかります。

この結果、standalone.xmlを見てみたところ次のようになっていました。

<default-bindings↩
context-service="java:jboss/ee/concurrency/context/default"
jms-connection-factory="java:jboss/DefaultJMSConnectionFactory"
managed-executor-service="java:jboss/ee/concurrency/executor/default"
managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default"
managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>

では、おもむろにデプロイ!

[2015-04-23 09:52:49,185] Artifact web: Artifact is deployed successfully
[2015-04-23 09:52:49,186] Artifact web: Deploy took 63,171 milliseconds

デプロイできた。


結論

データソースを記述するときにはdefault-bindingsの削除も忘れないようにという話でした。