UTF-8設定、JPAのキャッシュ無効設定 <Java, GlassFish, MySQL, NetBeans>
(1) リクエストパラメータのエンコーディングをUTF-8に設定
・プロジェクトを右クリックして「新規」→「その他」を選択、カテゴリに「GlassFish」、 ファイル・タイプに「GlassFishディスクリプタ」を選択して「次」をクリック、「終了」をクリック。
・「glassfish-web.xml」が開かれるのでXMLを表示して下記のように「parameter-encoding」を追記し保存する。
~略~ </jsp-config> <parameter-encoding default-charset="UTF-8"/> </glassfish-web-app>
(2) JDBC接続のエンコーディングをUTF-8に設定
・JDBC接続が設定済みのプロジェクトなら、「サーバー・リソース」フォルダに (Mavenを使っていれば「その他のソース」→「setup」フォルダ) 「glassfish-resources.xml」というファイルがあるハズ。 (もしかすると「WEB-INF」フォルダの中かも。)
・データベース側の文字コードをutf8にしている場合、 「jdbc-connection-pool」の子要素として下記のように「property」を2つ追記する必要がある。
~略~ <property name="characterEncoding" value="UTF-8"/> <property name="useUnicode" value="true"/> </jdbc-connection-pool>
(3) スコープをアプリケーションに設定
・NetBeansの画面操作でJDBC接続を設定する時、どこかのタイミングで「JDNI名」を入力するのだが その値の先頭に「java:app/jdbc/」を付ける。(例: java:app/jdbc/hoge)
・すでにJDBC接続を設定済みでJNDI名を上記のようにしていない場合は 下記の2つの設定ファイルA、Bを修正する。
・その上で「glassfish-resources.xml」を「WEB-INF」フォルダの中に移動する。
(A) glassfish-resources.xml
「jdbc-resource」要素の属性「jndi-name」を「java:app/jdbc/」で始まる値にする。
~略~ <jdbc-resource enabled="true" jndi-name="java:app/jdbc/hoge" object-type="user" pool-name="mysql_hoge_hogePool"/> </resources>
(B) persistence.xml
データベースからエンティティクラスを作成するなどしていれば 「構成ファイル」フォルダに (Mavenを使っていたら「その他のソース」→「src/main/resources」→「META-INF」フォルダ) 「persistence.xml」というファイルがあるハズ。 「jta-data-source」要素の内容を(A)で指定したJNDI名に修正する。
~略~ <jta-data-source>java:app/jdbc/hoge</jta-data-source> ~略~
(4) JPAのキャッシュを無効に設定
・JPAのキャッシュを無効にし、常にDBからデータを取得するよう設定する。
・persistence.xmlに「<shared-cache-mode>NONE</shared-cache-mode>」を追記する。
~略~ <jta-data-source>java:app/jdbc/hoge</jta-data-source> <shared-cache-mode>NONE</shared-cache-mode> ~略~