1.はじめに エンタープライズシステムのような大量の情報管理を行うシステムにおいては、データベースシステムは必須です。現在、データベースシステムには、リレーショナルデータベース(RDBMS)以外にも、XML データベースやオブジェクト指向データベースと選択肢も増えています。しかし、既存リソースの再利用や使い勝手、性能、製品のブランド等を考慮すると、RDBMS が選択されることが多いと思います。 Java 側のオブジェクトと、RDBMS 側のレコードを対応付けて相互に変換することを O/R マッピングと言います。Java では O/R マッピングに関する処理は、DataAccessObject (DAO) パターン [3] によって局所化し、 DAO 内で JDBC によって RDBMS にアクセスするような設計がよく使われます(図 1-1)。 JDBC を使った O/R マッピングは、単調
※対象バージョン:Java1.4 大学や専門学校ではこういうことを教えない・・・と思います、空文字の高速判定についてです。変数の文字列が空文字か否かを判定する場合に equals() メソッドを利用するのが一般的です。しかし equals() による空文字の判定は予想以上に無駄なのです。 // 空文字の比較 String str = "文字列"; if ( "".equals(str) ) { // str が "" と一致するかを判定 // 空文字の処理 } // Java1.4 の String クラスの equals() メソッドの実装 // java.lang.String#equals public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject insta
概要 アクション・フォームBeanでは、ブラウザからのリクエストデータを格納する際、どのエンコード方式を使用しているかの情報を得る(setCharacterEncodingメソッドなど)前にリクエストデータを格納します。そのため、日本語を扱う際、文字化けが起こります。 アクション・フォームBeanで日本語処理を行う際は、Servlet2.3から導入されたフィルタ機能を利用します。フィルタ機能でリクエストデータのエンコード処理を行います。フィルタ機能が使えない場合は、アクション・フォームBeanにデータが格納される前に呼び出されるresetメソッド内でsetCharacterEncodingメソッドを呼び出す、アクセスメソッド内でエンコード処理を行うなどの対応を行います。 ここでは、フィルタ機能を利用したエンコード処理について解説します。フィルタ機能の詳細に関しましてはJavaの道:フィルタ
本TIPSで紹介するiTextは、PDFをJavaで扱うためのライブラリです。これを使えば、PDFファイルを作成したり、ブラウザにPDFを出力したりすることができます。しかもiTextはオープンソースで開発されており、使用に際してはMPLまたはLGPLのいずれかのライセンスを選択できます。 セットアップ iTextはjar形式のライブラリのため、必要なファイルをクラスパスへ追加するだけで利用できます。iTextの本体は、itext-x.x.jaです。これを以下のURLよりダウンロードしてください。 ・ http://www.lowagie.com/iText/download.html ダウンロードできたら、このjarファイルをクラスパスへ追加します(最も簡単な方法は、Javaの拡張ディレクトリへjarファイルをコピーすることです)。 これだけでiTextは利用可能ですが、本体には日本語フ
lighttpd -> tomcat環境でrequest.getRemoteAddr アプリ側でIP制限等かけている場合、lighttpd -> tomcatとくると リモートアドレスが127.0.0.1等になってしまう(proxyサーバのIP)。 クライアントのIPを取得するにはHTTP_X_FORWARD_FORを取れば良いらしい。 request.getRemoteAddr("x-forwarded-for"); javaで-つなぎの小文字みたい。 proxy環境でrequestのヘッダーを取れば出てくる。 ヘッダー一覧取得は http://www.javadrive.jp/servlet/request/index9.html に教えてもらいましたo(_ _)o request.getRemoteAddr()をすべきところで、書き換えてくれる人が欲しかったので 以下のようにした。
ServletにアクセスしてきたクライアントのIPアドレスを得る方法。 プロキシを介さない場合 ServletRequest#getRemoteAddr()で、アクセスしてきたクライアントのIPアドレスを取得できます。 ServletRequest request = .. 省略 .. // クライアントのIPアドレス( プロキシを介す場合、プロキシのIPアドレス ) String proxyIp = request.getRemoteAddr(); プロキシを介した場合 ServletRequest#getRemoteAddr()は、プロキシサーバーのIPアドレスを返します。また、プロキシサーバーでクライアントIPアドレスを返す設定がされていれば、環境変数で本来のクライアントのIPアドレスが渡されます。これを解析すればとれなくはないです。 ×送信しない設定の場合、当然送信されない。(社内
S2Strutsを使うときは1.2系/1.3系のバージョンにかかわらず共通で次のパターンでいくのがわかりやすくて安全だと思います。 基本的にjspとActionFormとActionとInitActionは1対1対1対1で作成 jspからのサブミットはformのaction属性に対応するActionへのみとする(1つのフォームを異なるActionへサブミットするs2struts:submitタグを記述しない) 呼び出されたActionでは次画面の表示に必要な処理は行わない 次画面の表示に必要な情報はその画面(jsp)のs2struts:initタグから呼び出すInitActionで行う たとえば、従業員のマスタメンテで編集画面(edit.jsp)から確認画面(confirm.jsp)へ遷移するとします。 edit.jsp <html:form action="/edit"> ・・・ <s2
ほとんど個人的な備忘録。 log4jレベルだとは予想してましたが、如何せん、log4j.propertiesの書き方を忘れてるよ。。。 orz とりあえず、FAQ/S2DAO - SeasarWikiの情報を基に、以下の内容をlog4j.propertiesに追記することで対応。 log4j.category.org.seasar.extension.jdbc.impl=DEBUG, S log4j.additivity.org.seasar.extension.jdbc.impl=true log4j.appender.S=org.apache.log4j.DailyRollingFileAppender log4j.appender.S.File=${catalina.home}/webapps/test/WEB-INF/logs/sql.log log4j.appender.S.Da
GCを適切に行わせるためのヒープサイズの設定 JVMにGCを適切に行わせるにはヒープサイズを適切に設定(New領域サイズ、Old領域サイズ、領域サイズのバランスなど)する必要があります。当然、適切なヒープサイズはアプリケーションに依存します。一般にヒープサイズが小さいとGCが頻発してアプリケーションのパフォーマンスが低下します。さらに、ヒープサイズが必要量を下回る場合はOutOfMemoryErrorが発生してアプリケーションが停止してしまいます。一方、ヒープサイズが大きいと、GCの起動回数は減りますが、GC1回当たりの処理時間、すなわちアプリケーション停止状態が長くなり、アプリケーションの応答時間に問題が出る場合もあります。システムの物理メモリのフリー領域が不足するまでヒープサイズを大きくすると、物理メモリからスワップ領域へのページングが起こってしまい、かなりのパフォーマンスが劣化する可
スレッドセーフとは,アプリケーションをマルチスレッドで動作させても問題がないことを指す。サーバー向けアプリケーションは,マルチスレッドで動作するように設計・実装することが望ましい。そのほうが通常はパフォーマンスが向上するからだ。 だが,マルチスレッドのアプリケーションは,注意深く設計・実装しないとトラブルが生じる。例えば,あるスレッドで保持していた変数の値がほかのスレッドからアクセスされ,処理結果が上書きされたり,ほかの利用者の情報が見えてしまったりする。 こうしたトラブルは,開発者が1人で単体テストしているときには見つけられず,多数の利用者で限界時の挙動テストをしたときや,本番移行した後で,たまたま見つかることが多い。トラブルが発生するタイミングを再現することが難しいので,デバッグは困難になりがちだ。 マルチスレッドでのトラブルを防ぐため,開発者は,スレッドセーフな設計と実装を心がける必
Java Web アプリケーションシステム構築(Linux 編) JavaWebアプリケーションシステム構築に必要なソフト Apache2.0.43 (Web サーバ上で利用したい場合のみ) Java2sdk Stadard Edition v1.4.1 Jakarta-Tomcat4.1.18 mod_jk2(apache-tomcat-connecter) JavaWebアプリケーションシステムを開発するためには、次のソフトも必要です。 Java 2 Platform Enterprise Edition ソフトのダウンロード 必要なソフトを環境に合わせて各サイトよりダウンロードしてください 1.Java2sdk1.4.1(http://java.sun.com/j2se/1.4.1/ja/download.html) JRE=Java(TM) 2 Runtime Environ
ヒープサイズを決める ヒープサイズがシステムの使用可能な空き物理メモリより大きくならないようにします。ページスワップが頻繁に発生しない程度に設定を行ってください。OSのページングの設定にも影響しますが、使用可能な物理メモリ(OSまたはそのほかのプロセスによって占有されない物理メモリ)の80%が妥当な値と思われます。今回のテストでは、(全体メモリ[512Mbytes] -OS使用のメモリサイズ[128Mbytes])×80%=307Mbytesとなります。また、通常、XmsとXmxは同じ値に設定され、ヒープ時の負荷を軽減します。 GC値を決める パフォーマンスを向上させるポイントは、キャッシュされたオブジェクトをなるべく再利用するようにアプリケーションを作成することと、New世代領域とOld世代領域の比率を考えながらXX:NewSize、XX:MaxNewSizeの値を設定することです。有効
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く