sakaisusieのブログ

大阪市営地下鉄堺筋線は北千里行:その他を2:1くらいにすればいいと思います!

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>
  ~略~