m-namikiの日記

おもしろき こともなき世を おもしろく

java

Groovyによる宣言的セットアップ

Groovyによる宣言的セットアップ jUnit実践入門の第7章「テストフィクスチャ」で、フィクスチャ(テストデータ)のセットアップ方法が紹介されています。フィクスチャのセットアップにはインラインセットアップや暗黙的セットアップ、外部リソースからのセッ…

SpringMVC3.2.1を利用してのWebアプリケーション #05

前回の続きです。前回はTiles3の適用を行いました。今回はJSONによるデータのやり取りを行います。 やりたいこと ブラウザのフォームに入力した情報をJSONデータとしてサーバ側へ送信し、サーバ側では受け取ったJSONを基に情報を付加したJSONデータを作成・…

SpringMVC3.2.1を利用してのWebアプリケーション #04

前回の続きです。前回はフォームを使って画面の入力情報の受け取りを行いました。今回はTiles3の適用を行います。 Tile3の適用 QuickstartではTiles3に対応していましたが、id:m-namiki:20130311で設定ファイルから削除してしまったので、今回改めて適用しま…

SpringMVC3.2.1を利用してのWebアプリケーション #03

前回の続きです。前回はHelloWorldを表示させましたので、今回はフォームを使って画面の入力情報の受け取りを行います。 入力用JSPの作成 まずは入力画面の作成を行います。メールアドレスとパスワードの入力欄及びサブミットボタンからなる単純な画面です。…

SpringMVC3.2.1を利用してのWebアプリケーション #02

前回の続きです。前回はQuickstartで作成したプロジェクトをそのまま動作させましたが、今回はライブラリのバージョン等を変更していきます。 pom.xmlの編集 pom.xmlを記載すると冗長になるので主な変更点だけ。 springframework-version を 3.2.1.RELEASEに…

SpringMVC3.2.1を利用してのWebアプリケーション #01

以前のプロジェクトでSpringMVC3.0.Xを利用していましたが、1年以上経つとかなり忘れてしまっているので、思い出すためにSpring3.2.1を利用した場合のメモです。SpringFrameworkも3.2になったことで結構変化があったようなので、それもあわせてフォローでき…

JavaからSSH/SCPを実行する

来週からの案件で必要になるので調べてみました。Ganymed SSH-2 for Java 最終更新が2006年とかなり古めのライブラリで、調査開始後最初に見つけたのでこちらを利用してみます。参考ページを写経してSCPを実行してみます。ただそのままでは面白くないので、…

データソースの動的切り替え

ユーザさんから、Webアプリ起動中にデータソースを動的に切り替えたい、との要望があったのでSpring環境でどうやるかを調べてみました。 データソースの定義 <bean id="dataSource" class="net.sasuke.datasource.DynamicRoutingDataSourceResolver"> <property name="targetDataSources"> <map key-type="net.sasuke.datasource.type.SchemaType"> </map></property></bean>

Beanのコピー時に自動で型変換する

例えば画面で入力されたフォームの内容を検索条件に変換するといった場合、プロパティ名・型が同じならば以下のように書くことができます。 private MyCondition createCondition(MyCommand command) { MyCondition condition = new MyCondition(); org.spri…

Spring Securityでセキュリティを強化する #2

前回の記事ではアカウントのロックアウトについて考えてみました。今回はパスワードのSalt対応について考えてみます。パスワードのSaltについてですが、今回は分かりやすくするためにユーザIDをパスワードに追加したものをハッシュ化する、という方法を採り…

Spring Securityでセキュリティを強化する #1

自社の社内SNSでIPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第2章 アクセス制限対策:ユーザー認証対策が話題になっていたので、Spring Securityを利用している場合に更にアプリケーション側でセキュリティを強化する場合にどうやるのが…

Spring Security

Spring SecurityはSpring Sourceがリリースするユーザ認証とアクセス制御を行うためのプロダクトです。 ここ1年くらい携わってたいくつかのプロジェクトで利用してみましたが、ユーザ認証やURL直打ち対策なんかの、非機能要件だけど実装するのが案外面倒な事…

MappingJacksonJsonViewのバグ

spring-webmvcの3.0.5に含まれるMappingJacksonJsonViewには、レスポンスヘッダにContent-Lengthを設定しないというバグが存在します。(#SPR-7866) レスポンスヘッダにContent-Lengthが含まれない場合、Transfer-Encoding:Chunkedが自動で設定され、メッセ…

JMeterでJSONリクエスト

Apache JMeterでJSONリクエストをポストする際のメモです。 HTTPヘッダマネージャ ヘッダマネージャに以下の値を追加します。 名前 値 Accept application/json Content-type application/json; charset=UTF-8 Acceptに関しては、Spring-MVCでJSONリクエスト…

assembly:assembly

以前、こちらの記事で実行可能なjarファイルの作り方を書きましたが、今回Springを利用した場合にちょっとハマったので回避方法をメモしておきます。上記の記事を参考に、実行可能ではないjarを作成して、以下のコマンドを実行しました。 java -cp hoge.jar …

HttpComponentsでファイルダウンロード

ブラウザからファイルダウンロードを行うのはよくある話ですが、今回はクライアントプログラムからファイルのダウンロードを行う方法をメモしておきます。その前に、ファイルダウンロードを行うサーバ側の処理は以下のような感じです。SAStrutsならResponseU…

SpringMVC + JSON

SpringMVCでJSONのやり取りを行おうとした場合、以下のような例外が発生することがあります。 org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supportedこれはspring-webに含まれるorg.sp…

Protocol Buffers

Protocol BuffersはGoogleが開発したシリアライズフォーマットです。次案件で利用することになりそうなので、勉強を兼ねてメモを残しておきます。 ダウンロードとビルド こちら からパッケージをダウンロードしました。今回ダウンロードしたのは「protobuf-2…

goo.glを利用する

いま作ってみようと思っているアプリで短縮URLが必要となりそうなので、goo.glの使い方を調べてみました。goo.glの公式サイトはこちらです。 goo.glは短縮したいURLをAPIにポストすると、結果をJSON形式で返却してきますが、それをイチイチ解析するのもアレ…

Wicket on GAE/j with Slim3 #02

前回、WicketをGAE/j上で動作させることができたので、今回はSlim3 Datastoreを利用してみます。 Slim3のインストール 基本的にこちらのページに書かれていることをやりました。インストールさせ済んでしまえば後はSlim3 Datastoreがよしなにしてくれるので…

Wicket on GAE/j #01

会社の人と話をして色々思うところがあったので、本格的に個人で開発してみて、GAE/jに載せてみようと思います。で、取り敢えず以下のような構成を考えています。 Wicket+Slim3 Datastore 単体のSlim3の方がspin-upも早くて最適解だとは思いますが、個人的に…

SQLServerで変換デッドロックの回避

デッドロックといえば、2つのテーブル(ここではA、B)に対して、トランザクション1はA→Bの順で更新、トランザクション2はB→Aの順で更新しようとした場合に発生する、というのは良く知られていると思う。MicrosoftのTechNetによると、このデッドロックは…

commons loggingにハマる

プロジェクトで利用するバッチアプリの開発がほぼ終了したので実行してみたら、以下のようなエラーが発生した。(抜粋) Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.Log4JLogger at java.net.URLClassLoader$1.run(Unkn…

FTPの実装

javaでFTPを実装する場合、commons-netを利用することで簡単に出来る。 public class FtpUtils { /** FTPホストのIPアドレスです。 */ private static final String HOST_ADDRESS = "192.168.0.1"; /** FTPユーザー名です。 */ private static final String …

SQL Serverで自動生成キーの取得

SQL Server 2005で、IDENTITY値を利用したテーブルに対して Insertを行った場合に、生成されたキーを取得する方法のメモ。いまのプロジェクトではdbutilsを利用しているので、QueryRunnerをオーバーライドして、専用のQueryRunnerを作成した。 public class …

WTPでTomcatのJNDIを利用する

環境はEclipse3.4.2、WTP3.0.4、Tomcat5.5.27。プロジェクトはMavenのmaven-archetype-webappで作成。今回のDBはSQL Server 2005。 まずはsrc/main/webapp/META-INF配下にcontext.xmlを作成する。context.xmlの内容は以下の通り。

JAXBを調査

先日のエントリにてussyさんから教えて頂いたJAXBを調査していくことに決定。まずは何が出来て何が出来ないのかを明確にしていくこととする。JAXBはJava6.0ならコアライブラリに取り込まれているようだが、残念ながら今回のプロジェクトはJava5.0。なのでセ…

XMLの読み書き

どうやらXMLの読み込みだけでなく、書き込む機能も必要となりそう。ということはDigesterはお役御免。んー、残念。 読み書きできるライブラリは色々あるんだけど、どれが一番使いやすいかは実際に使ってみないと良く分からないな。こういうライブラリって流…

Commons Digesterを使う

現在のプロジェクトで大量のXMLファイルの読み込みが想定されることから Commons Digesterを調査中。以前の現場で使ったときはよく分からなかったが、ルールファイルの構成なんかを見てると結構シンプルに出来てると思う。複雑な XMLに対するルールファイル…

CompoundPropertyModelを使う

昨日のPageクラスをCompoundPropertyModelを使って書き直した。直したのはPageableListView#populateItem()のみ。 @Override protected void populateItem(ListItem item) { Locale locale = (Locale) item.getModelObject(); item.setModel(new CompoundPro…