サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
www.akirakoyasu.net
このところ暖かい日が続いているなあと思っていたら、急に寒くなって喉の調子を悪くしました。 ところで最近、なぜかSocketからサーバを作る必要があってコードを書いたので、自分の中の整理も含め、JavaでTCPサーバを実装する方法についてまとめたいと思います。 Javaでサーバソケットを扱う Java SE 7において、サーバソケットを扱う方法は3つあります。 まずはいわゆる普通のソケットAPIです。JDK1.0の時代からあるAPIで、(つまりこの旧き良きAPIは1996年から存在します) java.net.ServerSocket を使います。 次に「ノンブロッキング」と呼ばれるモードで処理を行うAPIがあります。java.nio.channels パッケージにある、ServerSocketChannel と Selector を中心に使います。このAPIはJDK1.4で追加されました。
前回は基本となるアノテーションを軸に、きわめて単純なRESTサービスを構築する手順を紹介しました。今回はやはりRESTといえばXML/JSONということで、XMLやJSONを返すサービスを構築しましょう。 (前回と言っても、ポストしたのがだいたい1年前の日付だということにたった今気づきました。) XMLを返す 次のようなリソースクラスを作成します。 jerseytest.resources.LocalDocumentResource package jerseytest.resources; import java.io.IOException; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.
このエントリはJavaEE Advent Calendar 2012 第16日目のエントリです。 昨日は @kokuzawa さんの「Point-to-Point on JMS」でした。 明日は @yumix_h さんの「JAX-RSでファイルアップロード!」です。 今日のテーマはCDI 1.0 (JSR 299: Contexts and Dependency Injection for the Java EE platform)です。特にAPIからCDIを使う方法について書き留めたいと思います。なお、動作検証はMac OS X 10.8.2 + JDK 1.7.0_05 + GlassFish 3.1.2 で行っています。 CDIの基本 まずはCDIの基本的な使い方について、簡単にまとめておきましょう。キーになるのはスコープとインジェクションポイントです。 スコープ スコープとは、イン
@kis さんのエントリ「Javaでのパターンマッチを考える」がとても興味深かったので、私も書いてみました。 ユーティリティクラスを使って解決することにしたらどうでしょう? Scalaの記法をよく見て、なるべく似たような形になるようにクラス構造を考えました。 caseなどのキーワードに当たる部分はstaticメソッドで乗り切り、マッチした際に実行されるコードブロックはインナークラスを使って表現します。 package patternmatch; import java.util.Arrays; public class PatternMatcher { public static PatternMatcher subject(Object... objects) { return new PatternMatcher(objects); } public static Case case_
前回はまず使ってみるということで、単純なJavaオブジェクトからXMLへ変換する方法を解説しました。 今回は、XMLからJavaオブジェクトへ変換する方法と、また一歩進んでバインディングを制御するアノテーションについて解説します。 XMLからJavaオブジェクトへの変換 データ構造としては前回と同じものを使いましょう。 会社(従業員*) 従業員(名前,給料) これらを表すJavaクラスも前回と基本は同じなのですが、オブジェクトの中身を見たいのでtoString()を追加しています。 Campanyクラス public class Company { private List<Employee> employees; public List<Employee> getEmployees() { return employees; } public void setEmployees(List
今年のテーマの一つはビッグデータということで、そろそろ本格的にMapReduceに手を出そうと思います。 手軽にMapReduceを試してみるのであれば、やはりAWSでしょう。今回はAmazon Elastic MapReduce(Amazon EMR)を動かす方法を簡単にまとめておきます。 実行する処理の例としては、Hadoopのチュートリアルにある処理をそのまま使わせてもらいましょう。与えられたテキスト(英文)に出現する単語を数えるというものです。 実行する処理 与えられたテキストに出現する単語を数える 実行の手順 Amazon EMRにはApache Hadoopが使われています。本来Hadoopを使うためには、Hadoopの環境そのものをセットアップする必要があるのですが、そこをAWSが既にやってくれているわけです。 そのため、手順としては Hadoopのジョブとなるjarファイル
こんばんは。先日ブログの設定をいじっていたら、全てのページ(管理画面も!)でPHPエラーが表示されてかなり気落ちしました。PHPを書くのは久しぶりだったので、どこか書き間違えたんでしょう・・・。 さて、今日はロギングの話をします。 ロギングと言えばlog4jですが、JavaSEにもロギングを扱うための標準APIがあります(1.4から)。それがjava.util.loggingです。標準APIであるにも関わらず、なぜか情報が少ないんですね。簡単なプログラムを書こうとして、ついでだから標準API使ってみるか、と思い立つも、結局設定の仕方がわからずにlog4jに戻ったことが何度かありました。 まず使ってみる まずは一番簡単な使い方から。 Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME); logger.info("Logger
Tokyo CabinetとTokyo Tyrantについて、社内勉強会のために作ったスライドをSlideShareに公開しました。(スライドはKeynote形式でダウンロード可能です)その解説と補足をしておきます。勉強会の目的は、Tokyo CabinetとTokyo Tyrantを大づかみに理解することと、実際にデータ操作をしてみることでした。 http://www.slideshare.net/akirakoyasu/tokyo-cabinet-tokyo-tyrant-10468880 まずはTokyo Cabinet/Tokyo Tyrantとは何なのか、端的に言えば、 Tokyo Cabinet ファイルDB Tokyo Tyrant Tokyo Cabinetを内包したサーバ ということになります。(スライド2-8) Tokyo Cabinet(以下TC)はいわゆるkey-v
JAX-RSのリファレンス実装であるJerseyには、RESTサービスを提供するサーバ側の実装(jersey-server)と、RESTサービスを利用するクライアント側の実装(jersey-client)とがあります。 RESTサービスではHTTPを介してサーバとクライアントとがやりとりしますから、当然jersey-clientはHTTPクライアントの機能を備えています。今回はJerseyの使い方の番外編として、RESTサービスを抜きにHTTPクライアントとしても、jersey-clientは使い勝手が良いという話をします。 ちなみに、JAX-RS 1.1にはクライアント側のAPIは定義されておらず、今年(2012年)のQ2にリリース予定のJAX-RS 2.0から定義されることになっています。(本稿執筆時点ではEarly Draft Reviewの段階) まず使ってみる 何はともあれ、使っ
SHOW SLAVE STATUSG でスレーブの状態をチェックして、問題がありそうな場合はメールを送信するスクリプトのメモです。 意図としては、 スレーブプロセスが走ってるか エラーが起きてないか 遅延が許容範囲内か(30秒) ちなみにMySQLそのものに接続できないとかの場合はこのスクリプトでは対応できません。 #! /bin/sh # # watch replication # ALERT_TO="{mail-destination}"; ALERT_SUBJECT="[MySQL] replication alert"; CHECK_COMMAND="SHOW SLAVE STATUS\G"; ALLOW_DELAY_SECONDS=30; echo "$CHECK_COMMAND"; slave_status=`mysql -u {user} -e "$CHECK_COMMAND
このエントリはJava Advent Calendar 2011 第4日目のエントリです。 « 第3日目のエントリ・第5日目のエントリ » 今日はAWSについて書こうと思います。というのは、最近ノーリスクとかマッシュアップとかいって、従量コストで利用できるWebモジュールの需要が(私の中で)高まってるからなのですが・・・。 AWSと言えばEC2やS3が有名ですが、他にもいろいろなサービスが提供されています。今日はその中でもシンプルで、単体でも役立ちそうなサービスをJava用のSDKから使う方法について紹介します。 Amazon Simple Storage Service (S3) Amazon SimpleDB Amazon Simple Email Service (SES) この全てのサービス名に"Simple"と付いているのは偶然です。これを基準に選んだわけではありません。本当です
GoogleのJavaユーティリティライブラリであるGuavaは、今年9月28日にリリース10.0.0を迎えました。新たなAPIも追加され、更なる進化を遂げています。(執筆時点での最新リリースは10.0.1) 今回は、まだベータ版ながら新しく追加された興味深いAPIを4つ紹介します。 他のAPIについても、JavaDocなどで@Betaアノテーションがついているものはベータ版ですので、今後のリリースで変更される可能性があります。 Stopwatch プログラムの実行時間を計測したいとき、よく使われるコードがあります。 long t1 = System.currentTimeMillis(); someExpensiveCompute(); long t2 = System.currentTimeMillis(); System.out.printf("time: %sms%n", t2 -
標準のAPIを使ってプログラムを書いておくと色々と都合がいいので、RESTfulなWebサービスを作成しようとするときはJAX-RSを使いたいものです。 JavaEE6には初めから入っているJAX-RSですが、現場ではTomcat5.5(もちろんJava5です)とかが頑張っているのでそのままでは使えません。Apache Tomcat 5.5 と、JAX-RSのリファレンス実装である Jersey 1.4 を使って、単純なRESTサービスを実装する手順を紹介します。 インストールする まずはJersey1.4のインストールから。Maven2を使っている場合は、java.netのリポジトリを設定します。 (pom.xml に以下を追加) <repositories> <repository> <id>maven2-repository.dev.java.net</id> <name>Java.
Guava: Google Core Libraries for Java 1.5+ GoogleのJavaユーティリティライブラリで、Apache Commons の Lang、Collectionsなどに替わる機能を提供してくれるものです。コンパクトながら、かゆいところに手が届く良質なAPIになっていると思います。 いくつかの機能を紹介します。 コレクションの全ての要素を変換したい List<A>を基にしてList<B>を作るとします。 ライブラリを使わない場合はこんな感じになるでしょう。 List<B> blist = new ArrayList<B>(alist.size()); for (A a : alist) { blist.add(new B(a)); } Guavaを使う場合は次のように書きます。 List<B> blist = Lists.transform(alist
このページを最初にブックマークしてみませんか?
『www.akirakoyasu.net』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く