Created
April 23, 2014 23:38
-
-
Save anonymous/11236298 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
【やりたい事】 | |
テーブルがN個で分割されているので、テーブルのsuffixに応じて動的にdomainクラスをロードしたいです。 | |
例.hoge_table_1, hoge_table_2 … hoge_table_9 というようにです。 | |
domainをHogeTable_1〜HogeTable_9と作成して | |
Class hogeTableClass = Class.forName("path.to.HogeTable_${suffix_id}") | |
もしくは | |
def hogeTableClass = grailsApplication.getDomainClass("path.to.HogeTable_${suffix_id}).clazz | |
# ひとまずgrailsApplicationはcontrollerから引数で渡している | |
で動的にクラスをロードして | |
hogeTableClass.list() | |
などを実行したいと考えています。 | |
# serviceに実装すると動かず、controllerに実装すると動きます。 | |
# また、HogeUtilに実装してserviceから呼び出しても動きません。 | |
以下の様なエラーが出ます。 | |
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at ../../../src/share/instrument/JPLISAgent.c line: 805 | |
【これはいやだ】 | |
以下の様な条件分岐でdomainを実行するようなことはしたくありません。 | |
domainに何か処理するときに毎回このコードを書くのが嫌だからです。 | |
switch(suffix_id) { | |
case(1): | |
return HogeTable_1.list() | |
case(2): | |
return HogeTable_2.list() | |
} | |
と思い、classの部分を動的にして処理しようと言う作戦です | |
# 無理なら逆にlist()側を動的にして、invokeで呼び出すのもありかと書いてて思いましたが | |
# 同じことのような気もします。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
うまくいきました。ありがとうございます。
(はじめ自分が試していたgrails projectだとうまく動かなかったのですが、新しく作るとうまく動きました。
(もしかするとクラスローダが上手く動かないのも、私のコードの他の箇所に原因があるのかもしれませんが、仰っていたようにドメインクラスなどはアーティファクトとしてGrails側で特殊処理施されていると思うのでこちらの方法を使用します。
Hoge domain class
Hoge_1 domain class
HogeService class