Tomcat8 + Servlet + MySQLのコネクションプールを作る
目次
1)やりたいこと
DBのコネクションを取得するためには以下の処理で実装するんだけど、
Connection conn = null; String url = "jdbc:mysql://localhost:3306/sample"; String user = "root"; String password = ""; try(conn = DriverManager.getConnection(url, user, password);){ // データベースに対する処理 }catch (SQLException e){ // エラー処理 }
↑開発する上で各メンバー毎にクローズのし忘れとか発生してしまうし、
コネクションプール作るのがベターなのでコネクションプールで実装してみた。
3)やりたいことはやってみる
まずは、コネクションプールを取得するクラスを作成しーの
package jp.sample.DAO; import java.sql.Connection; import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; public class DataSourceManager { private final String JNDI = "java:comp/env/jdbc/mysql"; protected Connection connection; /** * データベースコネクション取得 */ public DataSourceManager() { try { Context context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup(JNDI); connection = dataSource.getConnection(); connection.setAutoCommit(false); } catch (Exception e) { e.printStackTrace(); } } }
各DAOクラスで継承する
package jp.sample.DAO; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class UserDAO extends DataSourceManager { // 主キー検索 private final String SELECT_BY_ID = "SELECT * FROM USER WHERE USER_ID = ?"; /** * 主キー検索 * @param id * @return UserVo ユーザー情報を返却、データが存在しない場合 null */ public UserVo selectById(String id) { UserVo result = null; try (PreparedStatement ps = connection.prepareStatement(SELECT_BY_ID)) { ps.setString(1, id); ResultSet rSet = ps.executeQuery(); result = resultSetAttribute(rSet); // 取得した値をセットするメソッドを別で作成しているのでそれを呼ぶ } catch (SQLException e) { e.printStackTrace(); } return result; } // 以下割愛
これで終わり!ってなればいいんやけど、そうもいかない。
Tomcatのバージョンで設定方法が異なっていてserver.xmlに書けやとかうんたらで、むしろこちらの方がめんどくさかった。
/[プロジェクト名]/WebContent/META-INF/context.xml
↑結果、context.xmlに設定情報を書き込むでOK。
(パスワードとかurlとかは各DBに合わせて修正)
こんな感じ。
※注意
コネクションプールを取得するクラスで定義している"JNDI"の「java:comp/env/xxxx」とcontext.xmlの「name="xxxx"」が一致すること。
private final String JNDI = "java:comp/env/jdbc/mysql"; name="jdbc/mysql"
これで接続できるはず!!!
VisualStudioでusing文を自動的に追加してくれるショートカット
VisualStudio(2013)でusing文を自動的に追加してくれるショートカットがあるの知らなかった...
勝手に追加してくれればいいのに....
[shift] + [alt] + [F10]
NUnitが急に動作しなくなり、テストプロジェクトのリビルドが出来なくなった場合の対処法
VSの記事ばかりでそろそろ飽きてきたのですが、
やるっきゃないのでやります。備忘録です。
■事象
昨日まで動いていたVSのNUnitを使用したテストプロジェクトがリビルドできなくなった。
■原因
なんかNUnitで利用するxmlファイルが破損しちゃっている模様
■解決策
GitHubですでに対策済みだそう。
エラーがでているファイルをリビルド時のエラーに含めてくれる対応をしたらしい。
なのであとは、ファイル探して削除(ちょっとこわかったのでリネームしました)し、
リビルドし直せばOK。無事にエラー解消しました。
※リビルド後にこのファイルは再作成されず、テスト実行した際に再作成されてました。
参考ページ
ローカルプロキシを使用してSSL通信を捕捉する!
業務で使用する機会があったのでメモ。
・背景
iOSやAndroidアプリでSSL通信をしているけど、リクエスト書き換えたら処理としてNGな動きするね、改善しようね。と指摘された。
・やりたいこと
ローカルプロキシ(アプリ→サーバーの流れに自前のPCを挟む。アプリ→PC→サーバーの流れに!)使って、リクエスト捕捉
からの書き換えを検証する。
・使うもの
BurpSuiteのFree版(現時点v1.7.19)をインストール
※あとは以下のサイトを参考にさせていただきました。
ちょっとはまったこと。。。
PCとアプリを入れている端末のネットワークが異なっているのに気づかず(同じネットワーク名で周波数が異なってた....なんてこった)うまくプロキシが効いてなかった。。。同じネットワークにしてやって解決しました。
・感想
やりたいことできたけど、、、、プロキシ挟むとめっちゃ遅い。。。。泣
Visual Studio Professional 2013 で「デバッグ開始」したらIDEが落ちる
久しぶりにVSを触っているとなんやかんやでてきて嫌気が。。。(;´д`)
(動いてたのが動かなくなる系のやつはもう大嫌い)
■事象
デバッグ開始(F5)を押すと勝手にVSが落ちちゃう
■原因
.suoファイルが原因だそうな(Microsoftさんがゆうことにゃ)
■対処法
versionは違えど本家の記事通りにしたらうまくいきました。
- VSを終了する
- .suoファイルを削除(なんか気になるなら退避させたほうがいいかも。。。でもゴミとして残っちゃうから消していいと思う)
- VSを起動する
https://blogs.msdn.microsoft.com/jpvsblog/2012/07/24/vs-2010/
※そしてなぜか前回の記事で対応したはずの「管理者モードで起動」ですが、今回の対応したら管理者モードで起動しなくてもデバッグできるようになってました。。。先にこちらの対応してみると◎かもしれません。
Visual Studio Professional 2013 で「デバッグ開始」ができない時の対処法
今までデバッグ開始できていたソリューションが
急にデバッグできなくなったのでメモ。
他のソリューションでは相変わらずデバッグできるのに、特定のソリューションのみデバッグできなくなってしまいました。(泣)
【追記】
先にこちらをやるとよいかも。
■事象
以下のメッセージが表示されて、デバッグが出来ない。
「 ID xxx のプロセスは実行されていません。」
■原因
IISExpressが起動していないのがそもそもの原因っぽい。
■対処法
調べてみると、「IISExpressのディレクトリをリネームしてやるとよい」とあったけど自分の環境ではうまく行かず。。。
下記手順でデバッグできるようになりました。
根本的な解決ではないと思いますが、とりあえず。
①環境変数を追加 ※参考にしたURLの回答から抜粋
②管理者モードで開く
自分はVisualStudioをタスクバーにおいているので、
右クリック→プロパティ→ショートカットタブ→詳細→管理者として実行に☑
これでタスクバーからの起動は管理者として実行されます。
※毎回、パスワード聞かれるのがめんどくさい。。。
(方法はありそうですが、めんどいのでスルー)
参考: