java
Spring MVCでリクエストとレスポンスのログを出力する方法を説明します。 リクエストログだけなら CommonsRequestLoggingFilter もしくは AbstractRequestLoggingFilter を使う方法が簡単です。詳しくは下記の記事で説明しています。 int128.hatenablog.com …
第二十回 #渋谷java で、複数チームの並行開発におけるSwagger(OpenAPI)の活用についてお話しさせていただきました。 speakerdeck.com TL;DR 複数チームが並行開発を行う場合はインクリメンタルなAPI設計は避けられない。 OpenAPI YAMLからAPI Server, Cli…
Spring Bootアプリケーションのログファイル運用についてメモ。 前提 EC2などのクラウドのインスタンスで運用する場合を想定する。 ログ基盤に転送して蓄積する。 インスタンスに残っているログファイルは基本的に見ない。 Spring Bootのログ Spring Bootの…
JavaVMで動くコマンドラインツールをHomebrewで配布する方法を説明します.JavaやScala,Groovyなどで書かれたツールをMacユーザに配布する際に役立ちます. Homebrewとは Mac OS Xで使えるパッケージ管理システムの一つにHomebrewがあります. Homebrewを使…
ローカルのGitリポジトリをover HTTPで転送したい時に使える即席Gitサーバを作ってみました. int128/instagit Gitリポジトリをネットワーク越しに転送するには git daemon を使う方法もありますが,InstaGitはHTTPをサポートしているので,Webブラウザで問…
G*Advent Calendar(Groovy,Grails,Gradle,Spock...) Advent Calendar 2014 - Qiitaの10日目です。 アプリケーションを公開する際、ユーザが使いやすい形でアプリケーションを配布することで、より多くのユーザに使ってもらえることが期待できます。また、ア…
JDK 7u65/8u11以降でバイトコード検証の不具合があったためこれまでDockerfileを自作していましたが、JDK 7u72/8u25で不具合が修正されたのでDocker Hubで公開されているイメージに乗り換えました。Docker HubではいくつかのJavaイメージが公開されています…
Maven Centralに成果物を公開するには、OSS Sonatype Nexusに成果物をアップロードする方法が広く知られていますが、Bintrayを経由してリリースする方法もあります。この方法には以下のメリットとデメリットがあります。 メリット Bintrayには成果物に署名を…
JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があり、Groovyなどの処理系に影響があるという記事を書きましたが、最近リリースされたJDK 7u72/8u25で修正されたようです。 JDK-8051012 への対応状況を以下にまとめました。○は動く、×は動か…
Gradleでビルドした成果物をMaven Central Repositoryにリリースする方法を説明します。成果物の公開にあたってはSonatype OSSRHで申請が必要です。こちらのイケメンな記事が大変参考になります。こちらの記事ではMavenを使っていますが、本稿ではGradleを使…
Gradleでマルチプロジェクト構成を運用してみて、気付いた点を書いてみます。以下の環境で確認しています。 JDK 1.7 Eclipse 4.2 Subversive, SVNKit 1.7 Gradle IDE 3.0 Jenkins マルチプロジェクト構成については下記が参考になります。 第7章 Javaクイッ…
公式ドキュメントに従って Apache Tomcat 7.0 をインストールしてみました。前提条件 Scientific Linux 6.3 x86_64 Oracle JDK 7u7 x86_64 Apache Tomcat 7.0.30 gcc, make などのビルドツールが必要です。 実行ユーザ 実行ユーザを作成します。ここでは tom…
GradleでAPTを使うにはAntのaptタスクを利用します。slim3-genをどうやって組み込むか小一時間悩んだので残しておきます。やり方は色々あると思います。私は以下の方針でやってみました。 新しいソースセット(apt)を定義します。 APTコンパイルタスク(com…
Apache CXF で REST サービスをさくさく作ってみます。自分で用意するもの。 Java 6 Eclipse Indigo m2e (Maven integration for Eclipse) Maven が用意してくれるもの。 Apache CXF Spring JUnit Apache Tomcat 新しいプロジェクトを作る [New]-[Project...…
Eclipse, Jenkins, Apache Ivyを使ったプロジェクトにおける開発からデプロイまでの流れを図に描いてみました。図では書き表せないことがありますね。テスト実行時のクラスパスは実行時ライブラリを含むとか、図で描くとカオスになります。GUIツールでビルド…
一定のスループットでテストメールを送信するツールを紹介します。2年前に作ったものを掘り出しました。JMeterが使えない環境で役に立つと思います。 SendMail.java 1クラスで完結するように書いたので、クラスファイルとプロパティファイルを配置するだけで…
Webアプリの公開にあたっては、データ転送量や実行効率の点からJavaScriptを圧縮(minify)して配信することが推奨されています。ここでは実行時に圧縮する方法を説明します。JavaScriptの圧縮にはGoogle Closure Compilerを利用します。Maven pom.xmlに以下…
開発環境ではうまく動くのになぜか本番環境で動かないとか、本番環境での挙動が分からんといったとき、いちいち本番環境にテストコードをデプロイして確認するのは面倒ではありませんか?Rhinoを利用して動的にコードを実行するツールを使うと、本番環境での…
Google Tasks APIにはJavaのクライアントライブラリが用意されています。クライアントライブラリ(google-api-services-tasks)のバージョンを1.2.2から1.3.0に上げたときの変更点をまとめておきます。基本的には一部のメソッドが非推奨になっただけで、後方…
完了したタスクを未完了に戻すにはステータスをcompletedからneedsActionに変更します。このとき、ステータスの変更と同時に完了日付をクリアする必要があります。具体的には、以下のJSONをリクエストボディに入れてPATCHメソッドを投げます。 { id: "taskID…
Google Tasks APIはタスクにアクセスするためのAPIです。GoogleカレンダーにTo Doリストが付いていますよね、あれです。WebアプリからGoogle Tasks APIにアクセスするにはクライアントサイド(JavaScript)とサーバサイドの2つの方法がありますが、今回はサ…
google-api-java-clientでモデルをJSON化するとマルチバイト文字が化ける件について、google-http-java-clientプロジェクトにバグレポートを出していましたが、10/31に修正されました。レポートした JsonFactory#toString() 以外でもエンコーディングに依存…
Google Tasks APIでタスクの期限を設定するとき、タイムゾーンに注意する必要があります。Google Tasks上ではタスクの期限は日付(タイムゾーンはUTC固定、時刻は00:00:00固定)で扱うのが無難です。 注意すべき仕様 Taskモデルのdueプロパティはタイムゾー…
Picasa Web Albums APIのクライアントライブラリを利用するコードのユニットテストをどう実現するか考えてみました。結論としてはモックを使った普通のテストになりました。 テスト対象はドメインロジックとする。Picasaクライアントライブラリの実装にテス…
Google Tasks APIにアクセスするコードを書いているのですが、App EngineのProduction環境で文字化けするパターンがあったのでまとめておきます。ちょっと変わった使い方をしていたので見つけました。Tasks APIへのアクセスには google-api-java-client とい…
6月に書いた記事のコードを書き直しました。新しいコードはgithubに上げています。Picasaのアルバムにある写真を撮影日ごとに仕分けするバッチです。図に描くとこんな感じです。PicasaにアクセスするにはGData APIを使います。Java向けにクライアントライブ…
App Engineで日次バッチを動かす場合はCronかTask Queueを選択することになります。重複起動したくない、ジョブ失敗時はリトライしたい*1という要件があるならTask Queueを使います。Cronの場合は WEB-INF/cron.xml を編集するだけですが、Task Queueの場合…
Google Picasaは写真を保存しておくのに便利です。年間$5で20GBのスペースが手に入るのも魅力的です。Picasaでは、特定のメールアドレスに写真を添付して送ると「ドロップボックス」というアルバムに入るようになっています。この「ドロップボックス」の写真…
Google Picasaのウェブアルバムに画像をアップロードするバッチを書いています。Javaのコードはとても簡単ですが、クライアントライブラリを揃えるのに一手間掛かったのでメモします。Eclipseで新しいJava Projectを作成します。必要なライブラリを入手しま…
appengine ja night#14にて、AppEngine MapReduceと大量データ処理についてお話しさせて頂きました。speakerdeck.comTask ChainやQuery Chainの基礎的な話、AppEngine Mapperの仕組みについて解説しました。事例紹介などの派手なお話はできませんでしたが、…