水曜日, 3月 05, 2014

都庁への入り方

都庁、北庁舎外の中央公園側をふらふらしていたら、外国人カップルに英語で話しかけれられる。 都庁の中に入りたいが入り口が見つからないらしい。 あのあたり、ガラス張りで中に入れそうな雰囲気はあるのだけど、入るにはぐるっと回る必要がある。 聞く方はなんとかなるが、話せないのでついてくるようにジェスチャーして誘導。 若干適当な扱いだったかもしれないけど「アリガト」と言われたのでよしとしよう。 「Follow me.」 ぐらいは言えば良かったかな。

火曜日, 2月 25, 2014

2014年初道案内

今年初めての道案内の相手は外国人の方。 ビジネスビルの場所を聞かれたけれど、六本木ヒルズとかヒカリエみたいに商業施設がついているならともかく、ビジネスビルとなると即答出来ず。 今回もiPhoneを使って案内。 ほぼ夜だったけど、何かカンファレンスでもあったのかな?パーティーな服装ではなかった。

木曜日, 10月 17, 2013

小規模企業によるFOSS開発のモデルケースになりうるかもしれない事例

最近は企業によるFOSS活動も活発になっています。
そんな中で、今注目している一連の流れ。


そもそもの発端。20人/月のほとんどはサーバではなくアプリ側に使われているのだろうか。
世界初 メッセンジャーアプリ「Spika」を完全オープンソースで公開、フロントからバックエンドまで提供


問題点の指摘。最大の問題点である問題が指摘されているDBの部分は2013/10/16時点のコミットで完全に消去されているみたい。
レガシーズ公式ブログ PHPerはSpikaのどこを見たのか?


そして有志?によって直す会が開かれるらしい。
spika hackathon Spika-Server のコードを15年ぐらい若返らせます

行数は少なめでやる事は決まっているので、設計上の問題が無ければ割と簡単なはずだけど、モダンになった後のコードで、元の企業の人たちがカスタマイズやコンサルティングができるようになるのかが気になるところ。

一番最初の記事中で、WordPressのような存在になりたいと言っているけど、WordPressもこんな問題を抱えている。せめてPSRの議論と投票には参加して欲しい。
レガシーズ公式ブログ 活動報告 「レガシーコード in WordPress」

日曜日, 8月 04, 2013

夏の日に道を教える

今回は新宿で若い男女の観光客。
以前、外国人の方に聞かれたのと同じホテルの場所を聞かれる。有名なホテルなのかな?
今回は歩道沿いにある地図でご案内。

道を聞かれたのは日本人だけど、最近外国人観光客が多い印象。それもどうみてもお金の無さそうな大学生っぽい人たちとか、割と普通な家族。
円安の効果?

水曜日, 6月 05, 2013

exportsされていないjavascriptやCoffeeScriptのメソッドをテストする。

半分以上、自分向けメモ。 

exportsされていないjavascriptのメソッドをテストするにはどうするか。
理屈としては、以下の記事2つを読めばOK。要はjsを別コンテクストにロードして、その時にプライベートなメソッドを引き上げるわけですね。

Testing Private State and Mocking Dependencies
Nodeでプライベートな(exportsされてない)メソッドのテスト

不思議なのは、どちらの記事でも、node-mocksに触れられていない事(一番目の記事のコメントで触れられているだけ)。
これは一番目の記事のvojtajinaさんが作ったライブラリで、ざっくり言えば、解説されている内容が実装されているテスト用のライブラリ。
これを使えば、いちいち上記解説記事のコードを書かなくて済むわけですね。めでたしめでたし。

と思ったのですが、このライブラリ、JSは読み込めるのだけど、CoffeeScriptを直接読み込むことが出来ません(README.mdのサンプルテストコードはCoffeeScriptで書かれているのに)。
もちろん、JSにコンパイルすればよいのだけど、面倒なわけです。

というわけで、CoffeeScriptをロード出来るようにしてみました。

https://github.com/kmtr/node-mocks/tree/coffeescript

npmでインストールするなら、以下を実行。

npm install https://github.com/kmtr/node-mocks/tarball/coffeescript --save-dev

可能な限りCoffeeScriptから出ずに、開発したい私みたいな人におすすめです。

一応、pull requestを送ってみたけどどうだろうか。
オリジナルと比べてcoffee-scriptへの依存が増えてしまったし。

土曜日, 5月 04, 2013

雨の日に道を教える

今回は夜に家の近所。 雨が降る中、傘もささず(酔って?)ふらふらしているお爺さんから、橋の方に行きたいと聞かれる。 歩けない距離ではないけど、大丈夫だったろうか。

木曜日, 12月 27, 2012

DBFluteをCDIで使ってみる(適当レベル)

Javaでは当たり前になったDI。SpringやSeasar2、Guiceが有名ですが、JavaEEにもCDIというDIシステムがあります。今年出たばかりとかではなく、2009年に出ています。標準規格なのにあまり注目されていない、というかSpringやSeasar2は知っていても、CDIは知らないというケースもままあるという。
でもJavaEEの一部という事は、JavaEE対応のアプリケーションサーバなら追加のjar無しで使えるわけで、依存するjarを減らせるわけです。

一方、これまた当たり前になったORMはhibernateの方向性が主流になりつつあるも、やはりSQLで書きたいケースも多く、というかRDBに問い合わせるならSQLを使うのが結局楽だったりするわけです。とはいえSQLを生で書くというのもあり得ないですよね。結果はオブジェクトとして受け取りたいし。という要求の元、DBFluteやDomaやMyBatisと言った、SQLと親和性のあるORMも根強い人気があります。
私も基本的にはSQL大好きなので、これらのORMを使いたいわけです。

DIは標準規格のCDIを、ORMは手のひら返してJPA系ではないものを使うわがままをなんとか実現したい。で、幸いにもDBFlute、Doma、MyBatisのどれもCDIで使えるらしい。という事でDBFluteでCDIを試してみました。DBFluteを選んだ理由は最近1.0になったからというだけ。
ちなみにCDIも初体験。
とりあえず深く考えずに、GlassFish 3.1.2 + DBFlute 1.0 + Derbyでやってみる事に。

DBFluteのドキュメントを見つつ、以下のようにセッティング。

mvn dbflute:download
mvn dbflute:create-client
#DDLを書いたり、dfpropを編集したり
mvn dbflute:replace-schema
mvn dbflute:jdbc
mvn dbflute:generate

これでDBFlute側の準備は完了。WEB-INFの下にbeans.xmlという名前のファイルを置いて、CDIを有効にする。これで設定はすべて完了したはず。という事でGlassFIshに乗せてみると、こんなエラーが発生。

 デプロイメント中にエラーが発生しました: Exception while loading the app : Exception List with 5 exceptions:
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [EmployeeBhv] with qualifiers [@Default] at injection point [[field] @Inject com.example.servlet.EmployeeServlet.employeeBhv]. Possible dependencies [[Managed Bean [class com.example.dbflutecdi.db.exbhv.EmployeeBhv] with qualifiers [@Any @Default], com.example.dbflutecdi.db.allcommon.DBFluteModule$DBFluteBean@422f8df7]]
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:314)
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:280)
 at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:143)
 at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:163)
 at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:382)
 at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:367)
 at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:380)
 at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:199)
 at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
 at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:313)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
 at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
 at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
 at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
 at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
 at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
 at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
 at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
 at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
 at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
 at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
 at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
 at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
 at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
 at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
 at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
 at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
 at java.lang.Thread.run(Thread.java:722)
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [DataSource] with qualifiers [@Default] at injection point [[parameter 1] of [method] @Inject public com.example.dbflutecdi.db.allcommon.ImplementedInvokerAssistant.setDataSource(DataSource)]
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:311)
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:280)
 at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:143)
 at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:163)
 at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:382)
 at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:367)
 at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:380)
 at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:199)
 at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
 at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:313)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
 at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
 at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
 at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
 at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
 at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
 at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
 at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
 at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
 at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
 at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
 at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
 at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
 at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
 at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
 at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
 at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
 at java.lang.Thread.run(Thread.java:722)
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [CommonColumnAutoSetupper] with qualifiers [@Default] at injection point [[parameter 1] of [method] @Inject public com.example.dbflutecdi.db.bsbhv.BsEmployeeBhv.setCommonColumnAutoSetupper(CommonColumnAutoSetupper)]. Possible dependencies [[Managed Bean [class com.example.dbflutecdi.db.allcommon.ImplementedCommonColumnAutoSetupper] with qualifiers [@Any @Default], com.example.dbflutecdi.db.allcommon.DBFluteModule$DBFluteBean@14423bc8]]
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:314)
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:280)
 at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:143)
 at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:163)
 at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:382)
 at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:367)
 at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:380)
 at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:199)
 at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
 at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:313)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
 at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
 at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
 at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
 at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
 at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
 at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
 at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
 at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
 at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
 at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
 at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
 at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
 at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
 at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
 at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
 at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
 at java.lang.Thread.run(Thread.java:722)
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [DataSource] with qualifiers [@Default] at injection point [[parameter 1] of [method] @Inject public com.example.dbflutecdi.db.allcommon.ImplementedInvokerAssistant.setDataSource(DataSource)]
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:311)
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:280)
 at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:143)
 at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:384)
 at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:367)
 at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:380)
 at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:199)
 at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
 at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:313)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
 at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
 at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
 at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
 at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
 at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
 at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
 at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
 at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
 at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
 at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
 at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
 at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
 at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
 at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
 at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
 at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
 at java.lang.Thread.run(Thread.java:722)
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001409 Ambiguous dependencies for type [CommonColumnAutoSetupper] with qualifiers [@Default] at injection point [[parameter 1] of [method] @Inject public com.example.dbflutecdi.db.bsbhv.BsEmployeeBhv.setCommonColumnAutoSetupper(CommonColumnAutoSetupper)]. Possible dependencies [[Managed Bean [class com.example.dbflutecdi.db.allcommon.ImplementedCommonColumnAutoSetupper] with qualifiers [@Any @Default], com.example.dbflutecdi.db.allcommon.DBFluteModule$DBFluteBean@14423bc8]]
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:314)
 at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:280)
 at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:143)
 at org.jboss.weld.bootstrap.Validator.validateBeans(Validator.java:384)
 at org.jboss.weld.bootstrap.Validator.validateDeployment(Validator.java:367)
 at org.jboss.weld.bootstrap.WeldBootstrap.validateBeans(WeldBootstrap.java:380)
 at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:199)
 at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:128)
 at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:313)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:461)
 at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
 at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:389)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:348)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:363)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1085)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1200(CommandRunnerImpl.java:95)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1291)
 at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1259)
 at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:461)
 at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:212)
 at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
 at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
 at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
 at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
 at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
 at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
 at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
 at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
 at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
 at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
 at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
 at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
 at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
 at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
 at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
 at java.lang.Thread.run(Thread.java:722)
weldというのはGlassFishが使っているCDIの実装。CDIのリファレンス実装でもある。
どうやらweldが何をInjectionしたら良いのか分からなくてエラーになっている様子。
残念ながら、DBFlute 1.0.0でCDIをそのまま使う事は出来ないようです。

ここで諦めても良かったのですが、悔しいので解決策を探る事にしました。
まずAmbiguous dependenciesという例外に対応する事に。
エラーログを読む限り、それぞれのクラスのインスタンスとDBFluteModuleクラスのsetupDfComponentsメソッドで生成されているインスタンスが競合している様子。

おそらく解決策は2つあり、DBFluteModuleのsetupDfComponentsの一部をコメントアウトするか、QualifierアノテーションというInjection対象を指定するためのアノテーションを作って、Injectionして欲しい方に付与する必要がある。
とりあえずDBFluteModuleがなにしているのか調べるのが面倒なので、DBFluteGenerateというQualifierアノテーションを作ってInjection対象になってほしいクラスにつけてみたところ成功。
DBFluteGenerateのソースはこんな感じ。

//import 省略

@Qualifier
@Retention(RUNTIME)
@Target({FIELD, METHOD, PARAMETER, TYPE})
public @interface DBFluteGenerate {
    
}



エラーログにはもう一つUnsatisfied dependenciesというものがあり、これはdatasourceのインジェクションのところで起きています。たぶんインジェクション対象が見つからないという事なのだと思うのだけど、どうすればいいのかさっぱり分からない。仕方ないのでsetDatasourceについていた@Injectを外して、_datasourceフィールドに@ResourceでDatasouceの名前を直接指定。
よくないやり方とは思うのだけど、これでデプロイし直すと動作するようになりました。

ここまでの対応+実際に動く例としてのソースコードをbitbucketに上げてみました。もっとエレガントな解決策があれば誰か教えてください。
なおDBFluteのgenerateタスクはソースコードの上書きをするので、根本的に対応するにはDBFlute側のテンプレートなどを変える必要があります。

ただJavaEE7の足音が聞こえてきているので、これ以上追求する元気が失われつつもあり。