2012年8月11日土曜日

ubuntuとかtomcatとかJDBCとかの小ネタ

諸事情によりubuntuでtomcatやらscreenやらJDBCやらいじることになり、その時のメモを公開しまス

ubuntuでssh経由のscreenを使用する


ubuntuではssh接続環境下では、screenは単純には動作しないようです。(12.04LTS)

ncurses-termのインストールが必要になります

$ apt-get screen install
$ apt-get ncurses-term install

これでssh接続下でscreenが実行可能になります

ncurses-termについては特別な設定は不要です
もちろん、.screenrcは適切に作成できている等はできているという前提です


tomcat7の導入

諸々のサイトでは普通に下記で良いとありますが

$ apt-get tomcat7 install

その後、ブラウザから
http://localhost:8080
にアクセスしてインストール成功の画面が出ても、tomcat7の場合は下記を入れないとそれぞれのリンクから先に進めません
というかなぜかこれが書いてある所があまりないようなのでここに記載

$ apt-get install tomcat7-admin
$ apt-get install tomcat7-docs
$ apt-get install tomcat7-examples

tomcatからMySQLへのアクセス

そこら中に説明がありますが、tomcat等からjdbc経由でMySQLにアクセスするためにdriver(com.mysql.jdbc.Driver.jar)が必要です
ただ、servletの場合、javacのclasspathにdriverのパスを指定してもムダです。コンパイルは通るのでブラウザ経由でServletにアクセスはできますが、driverのinstanceを生成するコードが実行されると、そんなクラス知らない、という例外が発生します

ここでは一般のjavaファイルを実行する場合を考えましょう。この場合何らかの外部パッケージを使用している場合は

$ java ~.java -classpath ~.jar

と、JVMに必要なjarファイルのパスを知らせます。これと同じ事でServletの場合は同様にtomcatがcom.mysql.jdbc.Driver.jarにアクセスできないといけません

という事で、正解は必要なファイルをWEB-INF/libに入れる、です
これも書いてある所が意外とすんなり見つからなかったのでここに記載

なお、Ubuntuの場合はSymbolic Linkでも機能します

JDBCのMySQL用DriverのInstance生成

この方法自体はあちこちで説明されています。そこでは呪文のように

Class.forName("com.mysql.jdbc.Driver").newInstance();

って見ますが、これは基本的に動的なクラス名からインスタンスを生成する時に使う方法です

たとえば、

String className = request.getParameter("class");
Class.forName(new String (className)).newInstance();

っていう感じの事をしたい時に使う手法です

本来、このMySQLドライバのインスタンス生成を行うケースではクラス名は分かっているので

new com.mysql.jdbc.Driver();

っていうお馴染みの方法でOK

こちらもなぜかこの事が書いてあるサイトが無いのでムダな抵抗でここに書いておきます

ちなみに、本com.mysql.jdbc.Driverはimportができないようですが、importできないイコールnewできない、ではありません

importは

new java.util.List();



new List();

という様にパッケージ名を省略できるようにするための仕組みです