Dropwizardのassetsに/をmappingしたい
Dropwizardにおいて、静的なファイル(html, js, css…)はデフォルトでは
- http://{ドメイン}/assets/* → "src/main/resources/assets/*"
となっています。
ですが、トップページなどはURL直接指定でアクセスできると格好良かったりします。
先記のデフォルトは一応AssetBundleを使用することで変更できますが
ルートにはできない仕様らしいです。
Asset bundles not able to be served from root path. · Issue #661 · dropwizard/dropwizard · GitHub
Google先生に聞くと外人がたくさん困ってましたが、
ログを一生懸命漁っていると解決した声を見つけました。
上記リンクの下のほうにあり、まとめると
-
Application#initialize()において
bootstrap.addBundle(new AssetsBundle("/assets/", "/"));
-
Application#run()において
environment.jersey().setUrlPattern("/services/*");
1つめでやりたいことやって(従来はだめでしたが)、
2つめでjerseyのマッピングをしています(ここでは"/services/"以下)。
Dropwizardのjerseyはルートがデフォルトなので、
2つめがないと静的ファイルをjerseyで解決しようとして404になります。
( 2つ目の項目ですが、公式ドキュメントにあるように、
設定ファイルにapplicationContextPathを設定してもうまく動作しませんでした。)
日本語が少なくて大変…
DropwizardにおけるHibernateでのテーブル名定義箇所
今回一番引っかかったところ。
Dropwizardに組み込まれているHibernateのテンプレートクラスは、
- 設定ファイルに接続情報を記載
- Pojoの定義
- AbstractDAOの継承
- HQLを@NamedQueryで宣言、呼び出し
- サービス登録
だが、テーブル名の定義が@Tableと@NamedQuery内の2箇所であり、
どっちを使ってるのかいまいち。
そこで実験してみました。
というより今回引っかかったのでついでにいろいろ試しただけです。
大文字小文字の区別をこんな感じでしてみました。
Dropwizardのバージョンは0.7.0です。
No | SQLテーブル名 | POJOクラス名 | @Table | @NamedQuery | 結果 |
---|---|---|---|---|---|
1 | BBSDATA | BBSData | BBSData | BBSData | クエリ呼び出し時にNG MySQLSyntaxErrorException: Table 'Schema.BBSData' doesn't exist |
2 | BBSDATA | BBSData | BBSData | BBSDATA | Dropwizard起動時にNG QuerySyntaxException: BBSDATA is not mapped |
3 | BBSDATA | BBSData | BBSDATA | BBSData | OK |
4 | BBSDATA | BBSData | BBSDATA | BBSDATA | Dropwizard起動時にNG QuerySyntaxException: BBSDATA is not mapped |
5 | BBSDATA | BBSDATA | BBSData | BBSData | Dropwizard起動時にNG QuerySyntaxException: BBSData is not mapped |
6 | BBSDATA | BBSDATA | BBSData | BBSDATA | クエリ呼び出し時にNG MySQLSyntaxErrorException: Table 'Schema.BBSData' doesn't exist |
7 | BBSDATA | BBSDATA | BBSDATA | BBSData | Dropwizard起動時にNG QuerySyntaxException: BBSData is not mapped |
8 | BBSDATA | BBSDATA | BBSDATA | BBSDATA | OK |
意外だったのがPOJOのクラス名をみている?こと。
考察してみる。
- No1とNo3より、SQL問い合わせは@Tableを使用してるっぽい。
- No2、4、5、7より、"not mapped"と叱られているのは@NamedQuery。
- また、No2、4、5、7はPOJOクラス名≠@NamedQuery。
- 成功しているNo3、No8はPOJOクラス名=@NamedQuery。
これらより、
@NamedQueryに出てくるPOJOクラス名を@Tableで置換しているのか?
と推測。
Dropwizard勉強中のTips②
考えてみれば当たり前なんだけど、Dropwizardはjerseyを使ってるから
調べるときもjersey(JAX-RS)で検索したほうがかかりやすい、と。
ただ、今使ってるのDropwizardは0.7。
0.8がすでに存在し、jerseyのバージョンが上がって結構変わるらしい。
HK2とか言う記述をチラッと見たけど、
とりあえず0.7で一通り完成させてから対応させるつもり。
jQuery Mobile覚書(form周り)
-
jQuery Mobileでformのpost送信したければformの属性にdata-ajax="false"を指定。
一括指定する方法もあるらしいけど、今回はこっち。
( $.mobile.ajaxFormsEnabled = false をjQuery mobile.jsの読み込み前に実行:
-
普通のformだと$.postの引数に$(form).serializeArray()を使っていたが、
jQuery Mobileはformの構造を変えるので使えない
<form><input></form>が<form><div><input></div></form>みたいに変化し、レイアウト用のdivが挟まる。
その結果inputはformの直接の子ではなくなるので反応しなくなるっぽい。