自己紹介

自分の写真
最近、iphoneアプリをリリースしました。
UxU
無料アプリですので、是非遊んで下さい。 第二弾アプリ:工場夜景写真集 今後も色々なアプリをリリースしていく予定です。
次は、コスプレ or 漫画 or 騎乗日記

2010年1月1日金曜日

java mail

2010年あけましておめでとうございます。

早速、google app engine で実践した機能を紹介します。

Java Mailです。

web上からメールを送る機能ですが、
google app engine のJava Mail は、基本的に今までJavaMailを使った事が
ある人には、簡単です。

ほとんど、そのまんまだからです。

一点注意が必要なのは、ログインユーザのメールアドレスを必ず、Fromに入れることです。
管理人が送るので、ほとんど大丈夫だと思いますが、

「javax.mail.SendFailedException:
Send failure (javax.mail.MessagingException:
Illegal Arguments (java.lang.IllegalArgumentException:
Unauthorized Sender: Unauthorized sender))」

上記のエラーが出て、驚かされます。


実装ですが、
---------------
import javax.mail.Message.RecipientType;
import javax.mail.internet.*;
import javax.mail.*;

Session session = Session.getDefaultInstance(new Properties());
MimeMessage message = new MimeMessage(session);
message.setRecipients(RecipientType.TO, InternetAddress.parse("kanrinin@gmail.com"));
message.setRecipients(RecipientType.BCC, InternetAddress.parse(aToMail));
   //件名
message.setSubject(aSubject, "ISO-2022-JP");
//message.setText(aText, "ISO-2022-JP");
//送信日付を指定
message.setSentDate(new Date());

//本体
MimeMultipart mm = new MimeMultipart("alternative");
//本文
MimeBodyPart mbText = new MimeBodyPart();
mbText.setText(aText,"ISO-2022-JP");
mm.addBodyPart(mbText);
//HTML
String htmlmessage = aText;
MimeBodyPart mbHtml = new MimeBodyPart();
mbHtml.setContent(htmlmessage,"text/html; charset=ISO-2022-JP");
//ボディパートを追加
mm.addBodyPart(mbHtml);

message.setContent(mm);

//送信者
message.setFrom(new InternetAddress("login@gmail.com","管理者","ISO-2022-JP"));
//送信
Transport.send(message);

-----------------------------
BCCに入れて、アドレスを隠しております。
メーリングリストで送りたい場合は、String aToMail = "aa@gmail.com,bb@gmail.com"
というような文字列でメールアドレスを作成すると、複数の人達に同じ内容のメールを送る事が
可能です。

2009年12月30日水曜日

投資信託

今日、年末ということで
2つ新たに「投資信託」を始めました。
まだ、サブプライムの影響で安いというのと
最近、保険年金に本当に入ろうかと検討したところ、
長く預ける割に金利が低いということに気がつきました。
年利:1.25%でした。

確かに、タンス貯金(もしくは、銀行に預けている)だけなら
その方がずっとお得な商品なのですが、
積極的に運用している人にとっては・・・という感じです。

そして、2010年から積極的に投資をしていきたいので、
さっそく、外国の投資信託に預け入れしてきました。

皆さんも積極的に資金運用して経済を活発に刺激していきましょう!
ネットで、2010年必ず来ると思われているのが、「クラウド」でしょうね。

それで足元すくわれるのが、ハウジング・ホスティングサービス(データセンター)を行っている会社かも
しれないですね。

Amazon EC2/S3を利用するとコストを非常に落とす事が可能となりますし、

これからWEBシステムを作成したい方にお勧めなのが、Google App Engineです。
保守がほとんど要らないので、社内SE等がいない会社で、
Webサービスをしたい会社様にはもってこいだと思います。
クラウドを利用するとサーバを自前で用意することがなくなります。
ということは、データセンターの利用が減るってことに繋がると思いませんか?

私は、そう思うので、今[google app engine]を勉強しているのです。

2009年12月28日月曜日

JCacheについて

毎回同じデータを呼ぶ際は、データベースにアクセスするよりも
メモリ上からデータを取得する方が圧倒的に早いので、
JCacheというものを利用する。
裏にあるエンジンは、[Memcache]である。

実際には、どのように使うのかというと、
私の場合は、キャッシュデータがない時だけ、マスタデータを呼び出して、設定することにしている。

----------
CacheManager manager = CacheManager.getInstance();
Cache cache = manager.getCache(GaeUtil.getUniqueKey());
if(cache == null){
      //キャッシュがない場合、マスタを取得して設定する
Query qeyLM = pm.newQuery(LessonMaster.class);
qeyLM.setOrdering("level asc");
List lessonList = (List) qeyLM.execute();

JCacheBean cBean = new JCacheBean();
Map dataLesson = Maps.newLinkedHashMap();

for (LessonMaster l : lessonList)
{
dataLesson.put(l.getId(), l.getLessonName());
}
cBean.setLessonMap(dataLesson);
//データ設定
cache.put(JCacheBean.CACHE_KEY, cBean);
//キャッシュ登録
manager.registerCache(GaeUtil.getUniqueKey(), cache);
}

※キャッシュにセットするクラスは、java.io.Serializable をインターフェイスを実装したクラスである
必要があります。

2009年12月24日木曜日

管理者メニュー

~管理者限定のページの作り方~
1.web.xmlでアクセス制限を架ける
2. com.google.appengine.api.users.UserServiceクラスのisUserAdmin()メソッドを使用する

1. 具体的な方法
  <security-constraint>
<web-resource-collection>
<web-resource-name>manager</web-resource-name>
<url-pattern>/manager/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name></auth-constraint>
</security-constraint>

上記で[/manager/以下のフォルダまたはファイルは管理者のみアクセスを有効とする
という設定となる。

2.具体的な方法

<%
 PersistenceManager pm = PMF.get().getPersistenceManager();
UserService userService = UserServiceFactory.getUserService();
if (userService.isUserAdmin())
{
%>

<input type="button" value="管理メニュー" />   

<%
}
%>

上記の方法で、管理者がアクセスしてきた時のみ、ボタンを表示するということになる

2009年12月21日月曜日

logの設定

appengine-web.xmlファイル上に、

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

と設定して、

logging.properties
logを出したいパッケージを書く。
例:jp.co.xxx.sampleServeltがあるとした場合、

jp.co.xxx
.level = INFO
と記述する事で、info以上のlogが出力されます。

たまに、eclipseで「自動的にビルド」しているとビルドしていない場合が
あるので、クリーンもしましょう!

2009年12月20日日曜日

indexについて

サイト上では、「アプリケーションの WAR 内の WEB-INF/ ディレクトリに格納されている datastore-indexes.xml 」があると書かれているのですが・・・
そのファイルが見つからないので、
「アプリケーションの WAR 内の WEB-INF/appengine-generated/ ディレクトリに datastore-indexes-auto.xml」を作成して解決。


自動生成されるはずでは・・・まぁ、indexを作成できるので問題は回避できましたが。
なぜ、自動作成できないの???

参照URL

2009年12月19日土曜日

Google app engine上でSSL

SSL通信をGoogle app engine上で行うとすると、*.appspot.com上でないと「Forbidden」エラーが出ます。

早く、Gppgle Appsドメインでも可能としてもらいたい

設定は、web.xml
<security-constraint>
<web-resource-collection>
<!-- /ssl/フォルダ(パス)以下をHTTPS通信を行う -->
<url-pattern>/ssl/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

あと、appengine-web.xml
<ssl-enabled>true</ssl-enabled>

以上で、https://***.appspot.com/ssl/ssl.html等にアクセスするとSSL通信が可能となります。

参考URL