アーカイブ

‘Google App Engine’ カテゴリーのアーカイブ

Google App Engine for Java で Google Data (GData) API を使う 1

2010 年 3 月 11 日 tdtsh コメントはありません

Google App Engine/Java (以下 GAE/J) のアプリケーションから、Google Calender とか、Google Mapとか、Picasa Web Albums とかと連携したい。

なんでも、Google Data (GData) APIなるものを使えば良いらしい。

Google Data (GData) APIとは

GData APIとはなんでしょう。
Google Data (GData) APIのサイトによると、
「Google DATA API では、Web 上のデータを読み書きするシンプルな標準プロトコルを提供します。」ということです。

サポートされているGoogleのサービスは、こんなにあります。(2010年3月現在)


Google Data (GData) API クライアント ライブラリ

GAE/JなのでJava版を使いますけど、phpやJavaScriptでもイケるので簡単に試せますね。

Downloads – gdata-java-client – Project Hosting on Google Codeからライブラリをダウンロードします。
サンプルは要らないので、gdata-src.java-1.40.3.zip にしましたが、ライブラリが欲しいだけならどっちでもいいです。

ダウンロードしたzipファイルの、gdata/java/lib に、たくさんjarファイルがあります。
利用したいGoogleのサービスに対し、jarファイルの名称から何が必要かなんとなく想像がつきますね。

gdata-analytics-2.1.jar
gdata-analytics-meta-2.1.jar
gdata-appsforyourdomain-1.0.jar
gdata-appsforyourdomain-meta-1.0.jar
gdata-base-1.0.jar
gdata-blogger-2.0.jar
gdata-blogger-meta-2.0.jar
gdata-books-1.0.jar
gdata-books-meta-1.0.jar
gdata-calendar-2.0.jar
gdata-calendar-meta-2.0.jar
gdata-client-1.0.jar
gdata-client-meta-1.0.jar
gdata-codesearch-2.0.jar
gdata-codesearch-meta-2.0.jar
gdata-contacts-3.0.jar
gdata-contacts-meta-3.0.jar
gdata-core-1.0.jar
gdata-docs-3.0.jar
gdata-docs-meta-3.0.jar
gdata-finance-2.0.jar
gdata-finance-meta-2.0.jar
gdata-gtt-2.0.jar
gdata-gtt-meta-2.0.jar
gdata-health-2.0.jar
gdata-health-meta-2.0.jar
gdata-maps-2.0.jar
gdata-maps-meta-2.0.jar
gdata-media-1.0.jar
gdata-photos-2.0.jar
gdata-photos-meta-2.0.jar
gdata-projecthosting-2.1.jar
gdata-projecthosting-meta-2.1.jar
gdata-sidewiki-2.0.jar
gdata-sidewiki-meta-2.0.jar
gdata-sites-2.0.jar
gdata-sites-meta-2.0.jar
gdata-spreadsheet-3.0.jar
gdata-spreadsheet-meta-3.0.jar
gdata-webmastertools-2.0.jar
gdata-webmastertools-meta-2.0.jar
gdata-youtube-2.0.jar
gdata-youtube-meta-2.0.jar

gdata/java/deps にも、こんなんいてはります。

google-collect-1.0-rc1.jar
jsr305.jar

疲れたから次回に続きます。

カテゴリー: Google App Engine, java タグ:

GAE/J (Google App Engine for Java) で Struts を動かす

2010 年 2 月 9 日 tdtsh コメントはありません

GAE/J (Google App Engine for Java) で Struts を動かす

GAE/J でも Struts は動く

GAE/J では Spring を始め、いわゆる「重い」フレームワークは避けたい。

今後オレオレフレームワークを作るのか、Slim3等に移行するのかは、まだ決めかねています。

当面は Spring は兎も角、使い慣れた Struts と Velocity を使うことにします。

Velocityは先日やりましたから、今回はStrutsです。

先人の知恵、こちらや、こちらを参考に、環境を作ります。

因みにWill it play in App Engine – Google App Engine for Java | Google Groupsによると、Struts1系は 1.2.28 で COMPATIBLE となっています(2010年02月09日現在)。

 


ダウンロードとインストール

Apache Software Foundation の Strutsのサイトからダウンロードします。ライブラリだけで良いので、struts-1.3.10-apps.zip をダウンロードして解凍します。

解凍して出来た struts-1.3.10/lib/ の中身を全部、ワークスペースのプロジェクト下の war/WEB-INF/lib/ にコピーします。

eclipseを起動して、war/WEB-INF/lib/ の下にコピーしたjarファイルを、[CTRLキー]を押しながらポチポチと選択していきます。それらを右クリックして、[ビルド・バス(B)] – [ビルド・パスに追加(A)]をクリックします。

念のため、プロジェクトの[参照ライブラリー]にそれらが追加されている事を確認します。

 


web.xml に追加

WEBアプリケーションの設定ファイル( web.xml )に、Strutsのマッピングとかを追加します。(プロジェクト下の war/WEB-INF/にあります)

ベタに書くならこんなかんじです。
※load-on-startup は一応書いてますが、GAE/Jでは無視されます

<servlet>
	<servlet-name>action</servlet-name>
	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
	<init-param>
		<param-name>config</param-name>
		<param-value>/WEB-INF/classes/struts-config.xml</param-value>
	</init-param>
	<load-on-startup>0</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>action</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

 


log4j.properties に追加

ロギングはlog4jを使ってます。
Struts関係のデバッグログとかが多くて困るので、追加したライブラリ関係のロギングをWARNに変更する設定を追加しました。

log4j.logger.org.apache.struts=WARN,A1
log4j.logger.org.apache.commons=WARN,A1

勿論、アペンダー(A1)は環境にあわせて適宜変えて下さい。

 


struts-config.xml を作成

Strutsの設定ファイル (struts-config.xml)をプロジェクトの src/ に作ります(ビルドしたら、war/WEB-INF/classes/にコピーされます)。

フォーマットとかは割愛しますが、encoding に UTF-8 を明示的に指定して上げるのが、文字化け対策としての作法の様です。

こんな風に。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
    <form-beans>
	.
	.
	.

 


appengine-web.xml に追加

Google App Engine設定ファイル(/war/WEB-INF/appengine-web.xml)に設定を追記し、セッションを有効にします。

    <sessions-enabled>true</sessions-enabled>

これをしないと、「Session support is not enabled in appengine-web.xml」とかがいっぱい出て動きません。

カテゴリー: Google App Engine タグ:

GAE/J (Google App Engine for java) で 拡張log4jを使う(日本時間)

2010 年 2 月 4 日 tdtsh コメントはありません

先日、GAE/J (Google App Engine for java) で log4jを使うの続きです。

こんな素敵なエントリーを発見!
GAE/Jでlog4jの日付を日本時間で出力する。- 今週のキャリッジさん

GAEの管理コンソールの[Logs]の表示を日本時間にする事は出来ないけど、ログ出力の中身を日本時間にする事は出来る模様。

logging.apache.orgから、apache-log4j-extras-1.0.tar.gz を取ってきて、解凍した apache-log4j-extras-1.0.jar を、war/WEB-INF/lib にコピーして、eclipseのビルドパスに追加しました。

それから、src/log4j.properties を修正します。

log4j.appender.A1.layout=org.apache.log4j.PatternLayout
↓
log4j.appender.A1.layout=org.apache.log4j.EnhancedPatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] - %m%n
↓
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}{Asia/Tokyo} %-5p - %m%n

war/WEB-INF/appengine-web.xml 書いときます。

<system-properties>
	<property name="org.apache.commons.logging.Log" value="org.apache.commons.logging.impl.Log4JLogger"/ >
	<property name="java.util.logging.config.file" value="WEB-INF/classes/log4j.properties"/>
</system-properties>
カテゴリー: Google App Engine, java タグ:

GAE/J (Google App Engine for java) で log4jを使う

2009 年 11 月 30 日 tdtsh コメントはありません

先日、GAE SDK for Javaでのログのダウンロードについて書きました。
GAE/Jはデフォルトでjava.util.loggingを使う様になっていますが、デフォルトのままではデバッグの時ちょっと見づらいです。
そこで、設定ファイルの使い慣れている log4j に移行する事にしました。

 


プロジェクトへ log4j.jar を追加

apache.orgから、log4j-1.2.15.jar をダウンロードして、war/WEB-INF/libに置きます。
この辺の依存性の管理は、後日 maven でやりたいなぁ。

 


設定ファイルの編集

以前構築したeclipseの開発環境では、src/log4j.properties がデフォルトで作成されていました。
これを編集すれば良いようです。

デフォルトでは、こうなっています。

# A default log4j configuration for log4j users.
#
#
# To use this configuration, deploy it into your application's WEB-INF/classes
# directory.  You are also encouraged to edit it as you like.

# Configure the console as our one appender
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n

# tighten logging on the DataNucleus Categories
log4j.category.DataNucleus.JDO=WARN, A1
log4j.category.DataNucleus.Persistence=WARN, A1
log4j.category.DataNucleus.Cache=WARN, A1
log4j.category.DataNucleus.MetaData=WARN, A1
log4j.category.DataNucleus.General=WARN, A1
log4j.category.DataNucleus.Utility=WARN, A1
log4j.category.DataNucleus.Transaction=WARN, A1
log4j.category.DataNucleus.Datastore=WARN, A1
log4j.category.DataNucleus.ClassLoading=WARN, A1
log4j.category.DataNucleus.Plugin=WARN, A1
log4j.category.DataNucleus.ValueGeneration=WARN, A1
log4j.category.DataNucleus.Enhancer=WARN, A1
log4j.category.DataNucleus.SchemaTool=WARN, A1

上記に、ルートロガーの定義

log4j.rootLogger=INFO, A1

を追記して、

ログファイルのフォーマットを好みに変更

log4j.appender.appLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] - %m%n

して、

Jakarta Velocity関係のデバッグログとかが多くて困るので、

log4j.logger.org.apache.velocity=WARN,A1

WARNに変更する設定を追加しました。

最終的にこうなりました。

#
# log4j.properties for GAE/J
#

log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.appLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%F:%L] - %m%n
log4j.logger.org.apache.velocity=WARN,A1

log4j.category.DataNucleus.JDO=WARN, A1
log4j.category.DataNucleus.Persistence=WARN, A1
log4j.category.DataNucleus.Cache=WARN, A1
log4j.category.DataNucleus.MetaData=WARN, A1
log4j.category.DataNucleus.General=WARN, A1
log4j.category.DataNucleus.Utility=WARN, A1
log4j.category.DataNucleus.Transaction=WARN, A1
log4j.category.DataNucleus.Datastore=WARN, A1
log4j.category.DataNucleus.ClassLoading=WARN, A1
log4j.category.DataNucleus.Plugin=WARN, A1
log4j.category.DataNucleus.ValueGeneration=WARN, A1
log4j.category.DataNucleus.Enhancer=WARN, A1
log4j.category.DataNucleus.SchemaTool=WARN, A1

 


あとは、こんなユーティリティクラスを作っておいて、

package my.package.util;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class MyLog {
    public static final Log log = LogFactory.getLog(MyLog.class);
}

コードの中で、こんな風に書くだけです。

MyLog.log.info("something to logging");

こでで、eclipse上のコンソールログはちゃんと出る様になりました。

 


App Engine上でのログ出力

WEB-INF/appengine-web.xml を編集します。

デフォルトでは、こうなっています。

<system-properties>
<property name=”java.util.logging.config.file” value=”WEB-INF/logging.properties”/>
</system-properties>

こんな風に修正します。

<system-properties>
<property name=”java.util.logging.config.file” value=”WEB-INF/classes/log4j.properties”/>
</system-properties>

これで一応、appengine.google.comのlogsに出力される様になりました。
でもちょっと見にくい。時間もずれとるし。
今後の課題です。

参考サイト

Google App Engine/Javaでcommons-logging+Log4jでロギングする。 – 北海道を愛するプログラマの覚書

カテゴリー: Google App Engine タグ:

Google App Engine / Java (GAE/J)で URL フェッチ APIを使う

2009 年 11 月 28 日 tdtsh コメントはありません

Google App Engine/Java (以下 GAE/J) のアプリケーションから、URL Fetch Java API (以下 URLフェッチAPI)を使って、Web上の他のリソースにアクセスできます。

今回は、とりあえずGETでリモートのページ内容を取得してみます。

URLフェッチAPIの利用には、2つの方法があります。

1) Java標準ライブラリ java net を使用

2) GAEの 低レベルAPI を使用

1) は 2) のラッパーの様です。


まずは、 1) java net を使用の方から。

public String fetchUrl(String urlStr) throws IOException{
	StringBuilder sb = new StringBuilder();
	BufferedReader reader = null;
	URL url = new URL(urlStr);
	reader = new BufferedReader(new InputStreamReader(url.openStream()));
	String line;
	while ((line = reader.readLine()) != null) {
		sb.append(line + "\n");
	}
	reader.close();
	return sb.toString();
}

これで一応動きますが、エンコーディングがUTF-8のページを表示する際に文字化けしてしまいました。


次に、2) 低レベルAPIのサンプルです。

public static String fetchUrl(String urlStr, String encoding) throws IOException {
	URLFetchService urlFetchSrv = URLFetchServiceFactory.getURLFetchService();
	HTTPResponse res = null;
	URL url = new URL(urlStr);
	res = urlFetchSrv.fetch(url);
	return new String(res.getContent(), encoding);

	//上記をインラインで書くとこんな感じ
	//return new String(URLFetchServiceFactory.getURLFetchService().fetch(new URL(urlStr)).getContent(), encoding);
}

エンコーディングを指定して適宜変換しています。
この方法で、文字化けが解消されました。

実際には、さまざまなクウォータを気にしながらになると思いますが、うまく使えば色んな事が出来そうです。
サイトをGAEに移行する際に、旧コンテンツをしばらく残したい場合に使えないかな、と思っています。
あと、決済ASPなどとの連携にも活躍しそうですね。

色々試してみたいと思います。

カテゴリー: Google App Engine タグ: