この前こんな記事書いた。
早速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.xml
をgrepしてみると、次のような行があることが判明。
<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
を強引に消し去ってみた。
# 全ての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
の削除も忘れないようにという話でした。