Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

はじめてのWindows Azure ~SQLデータベース作成からNetBeansでの接続まで~

昨日試したAzureでの仮想マシン作成はかなりあっさりできました(^^)

はじめてのWindows Azure ~登録から仮想マシン構築まで~

今日はSQLデータベースを触ってみました。
http://www.windowsazure.com/ja-jp/services/sql-database/

これも簡単だなぁ。なんて便利な時代なんだ…。

SQLデータベース

メニューからSQLデータベースを選択します。

「SQLデータベースを作成します」をクリックしました。
f:id:kikutaro777:20140104003427j:plain

生成するデータベースの情報を入力します。

今回はWebエディションにしました。このエディションではデータベースサイズの制限が1GB,5GBと選べました。
Businessエディションを選ぶと10GB,20GB,30GB,40GB,50GB,100GB,150GBが選べました。

f:id:kikutaro777:20140104003918j:plain

照合順序はとりあえずそのまま。照合順序については以下サイトなど。Windows Server 2008R2のだけど(^^;
http://technet.microsoft.com/ja-jp/library/ms187582(v=sql.105).aspx

で、サーバーで「新しいSQLデータベースサーバー」を選ぶと、ダイアログにメニューが増えます。(上の画像と見比べるとわかりますが、「2」のページができてる。)
この辺のUIが何かカッチョ良いなぁ(^^;
f:id:kikutaro777:20140104004516j:plain

ログイン情報を入力します。

データベースへのログイン情報ですね。saとかはダメー。
f:id:kikutaro777:20140104004617j:plain

f:id:kikutaro777:20140104004713j:plain

この後、環境が作成されます。

管理ボタンを押します。

生成されたSQLデータベースを選択したまま、画面下の管理を押します。
ファイアウォール設定の確認メッセージが表示されるのでOKにします。
f:id:kikutaro777:20140104004841j:plain

f:id:kikutaro777:20140104004851j:plain

Silverlightのインストールをします。

別タブが起動して、私の環境ではSilverlightが入っていなかったため、以下画面となりました。はい、おとなしく入れます(^^;
f:id:kikutaro777:20140104005045j:plain

f:id:kikutaro777:20140104005108j:plain

f:id:kikutaro777:20140104005114j:plain

f:id:kikutaro777:20140104005118j:plain

Silverlightが正常にインストールされたのち、再度アクセスすると今度は以下の画面になりました。
f:id:kikutaro777:20140104005153j:plain

ログオンします。

先に作ったログイン情報を入れてログオンします。成功すると以下のような画面に。おーSQL ServerのManagement Studio的な。
f:id:kikutaro777:20140104005253j:plain

デザインからテーブル作成してみます。

クエリで作れると思いますが、せっかくなのでデザインメニューから作成してみました。
テーブル名入れて
f:id:kikutaro777:20140104005442j:plain

スキーマを決めるだけで簡単です。
f:id:kikutaro777:20140104005524j:plain

クエリでinsertしてみる。

Employeeという超簡単な顧客テーブルを作ったので、レコードをinsertしてみます。
「新しいクエリ」を押すとクエリ入力のモードになるので、そこで
f:id:kikutaro777:20140104005655j:plain
みたいな。で、実行します。
f:id:kikutaro777:20140104005723j:plain
できたっぽい。

select文で確認します。
f:id:kikutaro777:20140104010044j:plain
できてます(^^)

NetBeansのデータベースサービスからつないでみる。

これでDBとテーブルがそろったので、NetBeansでつなげることができれば、そこからスキーマの自動生成したりあれこれできそう…ですね。
これもあっさりできました(^^;

NetBeansを起動して、サービスタブからデータベースを選択します。

右クリックして「新規接続」を選びます。
f:id:kikutaro777:20140104010623j:plain

ドライバの設定をします。

Azureの「Java での Windows Azure SQL データベースの使用方法」ページを読むと普通にsqljdbcのjarを使えばいいようです。

私はSQL Server 2008 R2で接続した際に落としていましたが、なければ以下ダウンロードします。
http://www.microsoft.com/ja-jp/download/details.aspx?id=11774

で、ドライバの一覧にMS SQL Serverのがない場合は「新規ドライバ」を選択します。

f:id:kikutaro777:20140104011355j:plain

追加ボタンで落としたjdbcのsqljdbc4.jarなどを指定します。
以下スクショでの名前が2005となってますが、適宜読み替えて下さい(^^;(自分で入れてないのでNetBeansで自動に読み込まれた気が…)
f:id:kikutaro777:20140104011645j:plain

f:id:kikutaro777:20140104011656j:plain

以下画面となります。
f:id:kikutaro777:20140104011744j:plain

接続情報を確認します。

Azure側で簡単にJDBC URLの確認ができました。

生成されたSQLデータベースを選択します。
f:id:kikutaro777:20140104012637j:plain

以下のような画面になるので、下のほうにある「データベースに接続する」の「~接続文字列を表示する」をクリックします。
f:id:kikutaro777:20140104012738j:plain

f:id:kikutaro777:20140104012911j:plain

すると以下のようなダイアログが表示されます。
f:id:kikutaro777:20140104012935j:plain

一番下のJDBC接続情報をコピーして、そのまま先ほどNetBeansで表示されたダイアログのJDBC URLにペーストします。
パスワードを入れて「接続をテスト」して成功すればOKです。なんて楽なんだ…。
f:id:kikutaro777:20140104013108j:plain

ちなみにホストとポートの部分は自動で読み取って反映してくれました。
あとでNetBeansuでJPAのエンティティを自動生成したり、というのを考えると本当はデータベース名やユーザ名、パスワードをベタにいれるほうがいいのかもしれません。(ここら辺はまた今度)

スキーマはdboを選択しておきます。

f:id:kikutaro777:20140104013428j:plain

接続名を入力します。

デフォのままでもいいです。NetBeansのデータベース一覧に出る名前となります。
f:id:kikutaro777:20140104013609j:plain

NetBeansで確認する。

できてる!
f:id:kikutaro777:20140104013639j:plain

select文をNetBeansから投げてみます。
f:id:kikutaro777:20140104013717j:plain

おー!

これであとはJPAでゴニョゴニョできる!けど、それはまた次回に(^^;

NetBeans 8でWildFlyが使えるようになるらしい!

少し前に「NetBeansからWildFlyが使えませんでした…」を書いたのですが、現在開発中のNetBeans8では、WildFly用のプラグインが使えるようになっていて、NetBeansからも利用できるようになるようです!(ちなみにNetBeans 7.4からはこのプラグインがみえないみたいです(*´Д`))

残念ながら自分の手元の環境で動かせなかったのですが、以下のブログでArun Guptaさんが動かしていたり、Facebookの何かのグループでも動かせた!といってる海外の方がいたので、多分できるのだと思います。とりあえず、セットアップしたところまで書いてみます。

NetBeans 8 and WildFly 8 (Tech Tip #6)

WildFlyのダウンロードは「NetBeansからWildFlyが使えませんでした…」で書いたので省略。

NetBeansは開発段階のNightly Buildなので、まだ安定版ではありません。
私がインストールしたのは「NetBeans Dev 201312190002」という12/19版のものです。

インストール後、「ツール」メニューの「プラグイン」を選択します。
使用可能なプラグインタブで右上にある「検索」で「WildFly」と打てばフィルタされてプラグインがみつかります。

f:id:kikutaro777:20131221113230j:plain

「インストール」ボタンを押して、あとは淡々と進むだけです。

f:id:kikutaro777:20131221113333j:plain

f:id:kikutaro777:20131221113400j:plain

f:id:kikutaro777:20131221113405j:plain

で、NetBeansが再起動されます。再起動後、「ツール」メニューから「サーバ」を選ぶと

f:id:kikutaro777:20131221113426j:plain

おお!WildFlyが!ワイルドだぜ~!

で、以下でダウンロード済のWildFlyを指定して

f:id:kikutaro777:20131221113456j:plain

最初standaloneが選ばれていたので、これで

f:id:kikutaro777:20131221113652j:plain

f:id:kikutaro777:20131221113721j:plain

すると、サーバーに追加されます。

f:id:kikutaro777:20131221113744j:plain

で、起動したのですが、エラーで起動できませんでした(^^;うーむ。
standaloneではなく、domainで作り直したりもしたのですが、同じエラーでした。
何かstandalone.xmlが悪いのか、もうちょっと調べます。

11:17:10,448 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final
11:17:10,819 ERROR [stderr] (main) java.lang.IllegalStateException: JBAS014805: Could not get main file: wildfly-8.0.0.Beta1/standalone/configuration/standalone.xml. Specified files must be relative to the configuration dir: D:\software\Java\AP\wildfly-8.0.0.Beta1\wildfly-8.0.0.Beta1\standalone\configuration

でも、こんな感じでNetBeansからもWildFlyが使えるようになりそうなので、まだまだGlassFishをメインに使う予定ですが、その横でWildFlyも触ってみたいなーと思います。

Java EEを使って10分で作れる「いろふさんを探せ!」ゲーム #irof_history

この記事はいろふ Advent Calendar 2013の11日目の記事です。
昨日は@pocketberserkerさんの「いろふさんとの遭遇記」 でした。
明日は@akuraruさんです。
http://atnd.org/events/44814

「いろふさんを探せ!」ゲーム

こんなゲーム(?といえるのか)を10分くらいで作りました。細かい解説は後ほど。


そもそも@irofさんって何なん…

去年Javaを触り始めて、一番理解が難しかったのが「いろふさん」の存在でした。
でも今年の春にJJUG CCCで実物を見て、おぉ、実際に存在する方だったのか…と理解(^^;
そのときの参加ブログ↓
JJUG CCC 2013 Springに参加しました~!

いろふAdvent Calendarとは…

謎でした。書いてる今も謎です…w

数日前まで参加する気も全然なかったのですが、以下、鬼のような行為によって参加に至ります…。

@bitter_foxさんが「動くirofさんに会いたい!!」を書いていて、面白いなぁと何気なく、以下つぶやきました。

そこから





既に登録されてました…鬼に出会いました orz

いろふさんを探せ!解説編

気を取り直して、私のネタは、NetBeansJava EEが入っていればすぐ作れる簡単なゲーム紹介です。
ウォーリーを探せ!のいろふさん版的な。。。

本当はNetBeans7.4とGlassFish4.0のJava EE7でやる予定でしたが、かくかくしかじかで、NetBeans7.3.1、GlassFish3.1.2.2のJava EE6で作りました(^^;

先に流れから

まずは、Webアプリを起動すると以下画面が表示されます。
f:id:kikutaro777:20131211191131j:plain

デスクトップに、いろふさんがいます。
f:id:kikutaro777:20131211191205j:plain

ドラッグ&ドロップしましょう。(ちなみに召喚ボタン押すとファイル選択ダイアログ)
f:id:kikutaro777:20131211191227j:plain

召喚されました。
f:id:kikutaro777:20131211191453j:plain

ゲームの世界に連れ込みます(単なるアップロードボタン)
成功すると、消え去ります。
f:id:kikutaro777:20131211191517j:plain

ゲーム画面へボタンで次のページにいきます。
こんな画面です。
f:id:kikutaro777:20131211191549j:plain

召喚されたいろふさんを触ると、スライドしていろふさんが出てきます。
f:id:kikutaro777:20131211191654j:plain
f:id:kikutaro777:20131211191646j:plain

画像からマウスポイントを離すと崩れ去ります。
f:id:kikutaro777:20131211191718j:plain

これが本物のいろふさんです。

では次に、増殖ボタンを押します。すると、偽物のいろふさんをいくらでも発生することができます。
f:id:kikutaro777:20131211191746j:plain

本物のいろふさんも、偽物のいろふさんもドラッグで自由に移動できるので、ごちゃまぜにして準備完了です。

いろふさんを愛するプレイヤーに、どこに本当のいろふさんがいるか探してもらいましょう!

みつけると
f:id:kikutaro777:20131211191839j:plain

いいことあるかも!

コード

ドラッグ&ドロップとか、画像にマウスオーバーしてエフェクト(画像がスライドイン、コラスプしたり)、画像を移動したり…10分はうそでしょ!と思われるかもしれませんが、JSFのPrimeFacesというコンポーネントを使っていて、簡単に実現しています。

  • ドラッグ&ドロップのアップロードやアップ画像のサムネイル表示はFileUploadコンポーネント

http://www.primefaces.org/showcase/ui/tooltip.jsf

http://www.primefaces.org/showcase/ui/draggableBasic.jsf

を使ってます。

なので、ほとんどビュー定義のみで

最初のアップロードするページビューはこんな感じ。

<h:body>
    <h:form>
        <p:fileUpload mode="advanced" 
                  label="召喚する"
                  uploadLabel="ゲームの世界に連れ込む"
                  cancelLabel="現実世界に戻してあげる"
                  fileUploadListener="#{irofSanUploadBean.handleFileUpload}" />
        <p:commandButton value="ゲーム画面へ" ajax="false" action="irofSanCooking.xhtml" />
    </h:form>
</h:body>

次のゲームページはこんな感じ。

<h:body>
    <h:form id="frm">
        <p:commandButton value="増殖" actionListener="#{irofSanCookingBean.incrementIrofSan()}" update="@form"/>
        <p:graphicImage id="irofSan" url="/images/irof.jpeg" />
        <p:draggable for="frm:irofSan" />
        <p:tooltip for="frm:irofSan" showEffect="slide" hideEffect="explode">
            <p:graphicImage id="tooltipIrofSan1" url="/images/irof.jpeg" />
        </p:tooltip>
    </h:form>
</h:body>

コンポーネント置いてID指定するだけ…(^^;

増殖ボタンでコンポーネントが増える部分はプログラム側でコンポーネントを生成しています。

package jp.co.hoge.irofsanwebapp;

import java.io.Serializable;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
import javax.faces.context.FacesContext;
import org.primefaces.component.dnd.Draggable;
import org.primefaces.component.graphicimage.GraphicImage;

@Named
@SessionScoped
public class IrofSanCookingBean implements Serializable{
    
    private int cnt;
    
    public void incrementIrofSan(){
        cnt++;

        //プログラムでコンポーネントを追加
        UIForm form = (UIForm) findComponent(":frm");
        GraphicImage img = new GraphicImage();
        img.setId("irofSan" + cnt);
        img.setUrl("/images/irof.jpeg");
        img.setStyle(randomPosition());
        form.getChildren().add(img);
        
        Draggable dra = new Draggable();
        dra.setFor(img.getId());
        form.getChildren().add(dra);
    }
    
    private String randomPosition(){
        StringBuilder posStr = new StringBuilder();
        posStr.append("position:absolute;left:");
        posStr.append(Math.round(Math.random() * 1280));
        posStr.append("px;top:");
        posStr.append(Math.round(Math.random() * 640));
        posStr.append("px;");
        return posStr.toString();
    }
    
    private UIComponent findComponent(String componentId){
        return FacesContext.getCurrentInstance().getViewRoot().findComponent(componentId);
    }
}

ちなみに昨日の時点では、アップロードした画像をImageCropperコンポーネントでバラバラにするという残酷なネタだったのですが、ImageCropperが動かなくて、デバッグしてもわからなかったので断念しました(^^;
http://www.primefaces.org/showcase/ui/imageCropper.jsf
うーん、なぜ動かない。。。

NetBeansでGlassFishのリモートデバッグ

この記事は「GlassFish Advent Calendar 2013」の2日目の記事となります。

昨日はGlassFish Users Group Japanの運営をされていますHASUNUMA Kenjiさん(@btnrouge)による「GlassFish Community便り」でした。

明日は再度HASUNUMA Kenjiさん(@btnrouge)です!

デプロイした環境で動かない…だと

先日、手元の開発環境(NetBeans+GlassFish)で上手く動くのに、デプロイしたサーバ環境(GlassFish)で上手く動かない、という事象がお隣のチームであったようです。

ログを解析すれば何らか情報が得られるでしょうが、なんと信じがたいことにアプリケーションによるログ埋め込みしてないとか何とか聞こえ………いや、聞こえないっ、僕には何も聞こえないっ(((゚Д゚)))ガタガタ

f:id:kikutaro777:20131202182457j:plain

横で聞いてるだけでショボ-ン(´・ω・`)

それはさておき、そういう状況下でも、VisualStudioって確かリモートデバッグして原因究明できたよなぁ…とふと思ってNetBeans+GlassFishってどうなんだろと調べてみたら…

普通にできるらしい(^^;

知らなかった…ってか、これ知ってたら何かと便利なのに気づいてなかった……

うわぁぁ(ノД`)

ということで、2010年に@backpaper0さんがEclipseベースに既に書かれて(さらにそこに@shinsan68kさんがNetBeansなら超簡単にできるよと突っ込みあり)いますが、NetBeansでの具体的な手順を書いてみようと思います!

確認環境

自分が試したのは以下環境でした。

■サーバ(リモートデバッグ対象)環境
OS :Windows Server 2008 R2 64bit
AP :GlassFish 3.1.2.2
Java :JDK7

■クライアント(開発)環境
OS :Windows 7 Professional 64bit
IDE :NetBeans 7.3
Java :JDK7

手順

まずはデバッグしたいサーバ環境のGlassFishを一旦止めて、以下のdebugオプション付きで起動します。

asadmin start-domain --debug

今回の環境ではdomainは1つだったのでドメイン名は省いてます。

でこんな感じのメッセージが表示されました。
f:id:kikutaro777:20131129191911j:plain

続いてサーバマシンのデバッグポート(上記メッセージに合ったので9009)をあけました。

サーバ側の設定はこれで完了。

で、手元の開発マシンのNetBeansを起動してデバッグメニューから「デバッガのアタッチ」を選びます。

f:id:kikutaro777:20131129192552j:plain

すると以下のウィンドウが表示されます。今回はそのままJPDAにして、サーバのIPと先ほどあけたポートを入れました。

f:id:kikutaro777:20131129192556j:plain

ちなみにJPDAって何…(^^;と調べたらJava Platform Debugger Architectureの略称とのこと。知らなかった(>_<)

Java SE7のドキュメントは英語ですが、SE6では日本語のドキュメントがありました。
http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/
http://docs.oracle.com/javase/jp/6/technotes/guides/jpda/

で、OKボタンを押すと、しばらくして以下の状態がNetBeans画面下の出力に表示されて

f:id:kikutaro777:20131129192604j:plain

その後、ユーザー・プログラム実行中が出てデバッグ実行しているような状態となります(下図のようにデバッグ終了ボタンが出たり)。

f:id:kikutaro777:20131202183622j:plain

次にデプロイしたWebのプロジェクトを開いて、止めたい部分のソースにブレイクポイントを置きます。

f:id:kikutaro777:20131129192608j:plain

で、ブラウザを起動して、デプロイされてるWebアプリケーションに普通にアクセスして、ブレイクの部分に該当するような操作をすると…

f:id:kikutaro777:20131129192612j:plain

おお!ブレイクに止まった!!!

もちろん普通にウォッチもできるし、ローカルでデバッグしてるのと同じ感じです。

結局最初の問題がなんだったか…私はわからないのですが、リモートデバッグ機能を確認できて個人的にはめでたしめでたしでした。

NetBeansからH2 Databaseへ接続する手順のメモ

少し前にGitBucketを触ったとき、warを手にいれてAPサーバ(自分の場合はGlassFishでした)に展開するだけで、すぐにでも使えるWebシステムができあがる、という手軽さに感動しました。

え!もう使えるの!?みたいな。

自分もいつの日か、そういう手軽に使えるプロダクトを作ってみたいよなぁ、なんて思ったり(^^;

で、そもそもGitBucketってDB設定とか全然しなかったけど、どうなってるの…?と気になって、ユーザ配下にできるgitbucketフォルダをみていたら「data.h2.db」というのがありました。

H2ってチョコチョコ聞くよなぁ…なんていうレベルの低い自分ですが調べたらすぐ出てきました。

H2 Database
http://www.h2database.com/html/main.html

去年のちょうど今頃、Apache Derbyを触ってましたが、Derbyよりも軽量だけど機能豊富とか(by 上記H2サイトのtopページにある表)

便利そうなので少し触ってみました。NetBeansに加える所までで力尽きたので、次はJPA使っての簡単なサンプルとか作ってみたい(^^)

まずは上記の公式サイトへアクセス。

f:id:kikutaro777:20131106211823j:plain

環境はWindows8ですが、なんとなく「All Platforms」を落としました(^^;

f:id:kikutaro777:20131106211843j:plain

適当なフォルダに解凍して、binをみてみます。

f:id:kikutaro777:20131106211947j:plain

で、h2.batを実行してみました。どうでもいいですが、Dドライブ移動って何気に毎回忘れるんですよね。「cd /d D:\」のdオプションを。。。

f:id:kikutaro777:20131106212004j:plain

実行すると、ブラウザが突然立ち上がって以下のページが表示されました。

f:id:kikutaro777:20131106212137j:plain

日本語にして、EmbeddedをServerにしました。パスワードの初期値はユーザ名と同じでした。
接続ボタンを押します。

f:id:kikutaro777:20131106214817j:plain

ログインするとこんな画面が、おお。

f:id:kikutaro777:20131106215018j:plain

下にある「SQLステートメントのサンプル」の部分がリンクになっています。
クリックするとクエリが反映されました。

f:id:kikutaro777:20131106215239j:plain

で、実行してみると、左のツリーに「TEST」というテーブルが追加されました。

f:id:kikutaro777:20131106215807j:plain

展開してみるとこんな感じです。

f:id:kikutaro777:20131106215837j:plain

とりあえず接続を切りました。

f:id:kikutaro777:20131106220033j:plain

続けてNetBeansを起動します(7.3.1で行いました)
サービスタブのデータベースを開いて、ドライバの部分を展開します。

f:id:kikutaro777:20131106221807j:plain

右クリックして「新規ドライバ」を選択します。

f:id:kikutaro777:20131106221823j:plain

以下のダイアログが表示されるので「追加」を押します。

f:id:kikutaro777:20131106221848j:plain

batファイルを実行したフォルダを選択しにいくとjarファイルがみえるので選びます。

f:id:kikutaro777:20131106230734j:plain

ドライバクラスのプルダウンは空白なのですが

f:id:kikutaro777:20131106231457j:plain

検索ボタンを押すと「org.h2.Driver」が反映されました。

f:id:kikutaro777:20131106231555j:plain

名前を適当につけます。

f:id:kikutaro777:20131106231627j:plain

OKを押します。

f:id:kikutaro777:20131106231640j:plain

右クリックして「接続」を選びます。

f:id:kikutaro777:20131106231656j:plain

ウィザードでユーザ名、パスワード、JDBC URLを指定して「接続テスト」をします。
成功したら「次へ」を選択します。

f:id:kikutaro777:20131106231754j:plain

スキーマのプルダウンで「PUBLIC」を選びます。

f:id:kikutaro777:20131106231819j:plain

「次へ」で接続名をいれます。

f:id:kikutaro777:20131106231848j:plain

これでNetBeansからTESTテーブルが確認できるようになりました!

ふぅ(^^;

NetBeansからWildFlyが使えませんでした…

今日は朝からOracleさんのGlassFishの商用サポート、商用版の打ち切り話でJava界隈のTLが埋まってましたね(^^;

Oracleさんの英語情報
https://blogs.oracle.com/java/entry/glassfish_and_javaee_roadmap_update1
https://blogs.oracle.com/theaquarium/entry/java_ee_and_glassfish_server

日本語での速報
http://jvm.techmood.jp/2013/11/05/343

OSS版は今後もコミットされていくとのことで、個人的には近々で問題はないと思っていますし、とりあえず王子を信じます(^^!

と思いつつも、せっかくの機会なので、ほかのアプリケーションサーバを試してみるのもいいかなぁ、と思ってお昼休みに試してみました。

Java EE準拠のアプリケーションサーバは様々ありますが、RedHatWildFlyは前々から少し触ってみたいなーと思っていたので、NetBeansで簡単なWebアプリを作ってみようとしたのですが…

動かせませんでした(>_<)
(※良い情報お持ちの方は是非…)

それっぽいバグチケットは
https://netbeans.org/bugzilla/show_bug.cgi?id=234452
かなと。

せっかく画面キャプチャしたので、一応何がダメだったか載せておきます(^^;

自分の環境は以下でした。

OS: Windows 8 Pro 64bit
IDE: NetBeans7.4 (その後7.3.1もトライ)
JDK: 7 (32bit)

まずはWildFlyのサイトにアクセス。

WildFly
http://www.wildfly.org/

f:id:kikutaro777:20131105184020j:plain

画面下のメニュー「Download」をクリック

f:id:kikutaro777:20131105184041j:plain

一番新しい8.0.0 Beta1のzipをダウンロードしました。

f:id:kikutaro777:20131105185421j:plain

zipを適当な所で解凍して、NetBeansを起動して「ツール」メニューから「サーバー」を選択します。

f:id:kikutaro777:20131105193228j:plain

現状はGlassFish4.0のみがあります。左下の「サーバーの追加」ボタンを押します。

f:id:kikutaro777:20131105193630j:plain

JBossアプリケーション・サーバーを選択して、名前を適当に入れました。

f:id:kikutaro777:20131105193732j:plain

f:id:kikutaro777:20131105193737j:plain

サーバーの場所はzipを解凍したフォルダを指定しました。

f:id:kikutaro777:20131105193807j:plain

f:id:kikutaro777:20131105193815j:plain

で、「次へ」でインスタンス・プロパティのところにくるのですが、ドメインが空欄で進められませんでした。

f:id:kikutaro777:20131105193847j:plain

チケットをみると

Domain combo box is empty, so I can not choose a domain. Finish button is disabled.

とあって、同じ現象のようです。

一応NetBeans7.3.1で試しましたが同じでした。

JavaOneNetBeansWildFly動かしてたようにみえたけど、違ったのかなぁ…。
それかもっとゴリゴリ設定するとできるのか。
むしろEclipseとかのほうがやりやすいのか。

というか先にJBossAS7とかを確認するべきだったかな…(^^;

SendGridFX : JavaFX meets SendGrid ! #JavaFX #SendGrid

I'm new to JavaFX and want to make something interesting.

A month ago I signed up SendGrid, because my old colleague @nakansuke starts to new business with SendGrid company.
He advised me that there is a good Java wrapper library of SendGrid WebAPI, it's sendgrid4j.
http://oss.flect.co.jp/libs/en/sendgrid4j.html

Exactly, it's good and easy to use SendGrid WebAPI.

Today I was having fun with JavaFX and SendGrid.
My simple idea is sending HTML mail with HTMLEditor on JavaFX.

This is my simple application.
I only use Label, TextField, Button and HTMLEditor.

f:id:kikutaro777:20131025233829j:plain

Only input sending e-mail address and subject and contents of mail by HTML.

f:id:kikutaro777:20131025234142j:plain

HTMLEditor component on JavaFX is good to write HTML.

I sent this mail to my web-mail of Yahoo, so checked it.

I think JavaFX programmer might say "Hey guy, why don't you check your web mail by WebView?" Yeah, that's true. I did it :)

This is my JavaFX application includes WebView.
Yes! I got the mail!
f:id:kikutaro777:20131025234414j:plain

I opened it and saw HTML mail.

f:id:kikutaro777:20131025235010j:plain

Of course, it's same looking of HTMLEditor :)

I show my code of JavaFX Controller class. It's very simple.

package jp.co.hoge.sendgridfx;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.web.HTMLEditor;
import jp.co.flect.sendgrid.SendGridClient;
import jp.co.flect.sendgrid.SendGridException;
import jp.co.flect.sendgrid.model.WebMail;

public class SendGridFXController implements Initializable {
    
    //SMTP authentication info of SendGrid
    private static final String SMTP_AUTH_USER = "blah-blah-blah";
    private static final String SMTP_AUTH_PWD  = "blah-blah-blah";
    
    //Mail from info
    private static final String MAIL_FROM = "kiku@test.com";
    private static final String MAIL_FROM_NAME = "Test from Kiku";
    
    SendGridClient client;
    
    @FXML
    private HTMLEditor editor;
    
    @FXML
    private TextField textTo;
    
    @FXML
    private TextField textTitle;
    
    @FXML
    private Label message;
    
    @FXML
    private void sendButtonAction(ActionEvent event) {
        try {
            WebMail mail = new WebMail();
            
            //setting mail from
            mail.setFrom(MAIL_FROM);
            mail.setFromName(MAIL_FROM_NAME);
            
            //setting mail to
            mail.setTo(textTo.getText());
            
            //setting mail subject
            mail.setSubject(textTitle.getText());
            
            //setting HTML content
            mail.setHtml(editor.getHtmlText());
            
            //sending mail
            client.mail(mail);
            
            message.setText("Sending mail is success.");
        } catch (IOException | SendGridException ex) {
            message.setText("Sending mail is failed.");
        }
    }
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        client = new SendGridClient(SMTP_AUTH_USER, SMTP_AUTH_PWD);
    }    
}

We can use sendgrid4j by maven.

Here is pom.xml.
Repository setting of sendgrid4j.

<repositories>
    <repository>
        <id>jp.co.flect</id>
        <name>FLECT maven repository</name>
        <url>http://flect.github.io/maven-repo/</url>
    </repository>
</repositories>

Dependency is here.

<dependencies>
    <dependency>
        <groupId>jp.co.flect</groupId>
        <artifactId>sendgrid4j</artifactId>
        <version>0.9.1</version>
    </dependency>
</dependencies>

That's it :)

JavaFXとSendGridで簡易送信メーラーSendGridFXを作る!

少し前にSendGridへ登録したのですが、結構放置してました(^^;

登録の流れやJavaで送信する簡易プログラムは前のエントリを参照下さい↓

JavaでSendGridを利用したメール送信

sendgrid4j使うとJavaで簡単にSendGrid経由にメール送れるので何か面白いことできないかなぁ、と思ってたのですが、最近遊んでるJavaFXと合わせてみました。

名付けてSendGridFX!(なにそれ

すごい簡単なプログラムですが、JavaFXのHTMLEditorコンポーネントを使って、SendGrid経由でHTMLメールを送る、というものです(^^;それだけ

画面は以下のような感じで、ラベルとテキストとボタン、そしてHTMLEditorだけの超シンプルな構成です。

f:id:kikutaro777:20131025193729j:plain

宛先とタイトルを入れて、メール内容をHTMLEditorで書きます。

f:id:kikutaro777:20131025193805j:plain

HTMLEditorで

  • フォント色やサイズ、太字・イタリックに変えたり
  • 横罫線入れたり
  • 箇条書き(番号つきも)
  • センタリングや右寄せ

などなどしてみました。

で、送信!!

受信したメーラ(ThunderBird)でみると(本当はメーラもJavaFXで作ってるとかっこいい気も…)

ちゃんとHTMLメール!!(あたりまえっ

f:id:kikutaro777:20131025194056j:plain

せっかくなので、Yahooメール辺りに送って、JavaFXのWebViewからみてみます(^^;

こんなメールを

f:id:kikutaro777:20131025195149j:plain

送信!

JavaFXでWebViewを置いたアプリでYahooのメールをみてみます。

f:id:kikutaro777:20131025195218j:plain

おおー

f:id:kikutaro777:20131025195227j:plain

やはりJavaFX面白い!そしてSendGridも便利そう!

ちなみにSendGridは前に一緒に仕事していた後輩がSendGrid社とパートナーになって最近力を入れていますので興味ある方は是非彼に!ブログも始めたらしい(^^↓

プログラム

NetBeans7.4からJavaFXプロジェクトをMavenで作れるようになったので、sendgrid4jもpom.xml

リポジトリ

<repositories>
    <repository>
        <id>jp.co.flect</id>
        <name>FLECT maven repository</name>
        <url>http://flect.github.io/maven-repo/</url>
    </repository>
</repositories>

依存性を書けばOKですね。

<dependencies>
    <dependency>
        <groupId>jp.co.flect</groupId>
        <artifactId>sendgrid4j</artifactId>
        <version>0.9.1</version>
    </dependency>
</dependencies>

Maven使えるとやはり楽w

コードはこんなレベルです(^^;JavaFXのコントローラだけですが

package jp.co.hoge.sendgridfx;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.web.HTMLEditor;
import jp.co.flect.sendgrid.SendGridClient;
import jp.co.flect.sendgrid.SendGridException;
import jp.co.flect.sendgrid.model.WebMail;

public class SendGridFXController implements Initializable {
    
    //SendGridのSMTPアクセス情報
    private static final String SMTP_AUTH_USER = "hogehoge";
    private static final String SMTP_AUTH_PWD  = "hogehoge";
    
    //送信元の情報
    private static final String MAIL_FROM = "kiku@test.com";
    private static final String MAIL_FROM_NAME = "キクタローテスト";
    
    SendGridClient client;
    
    @FXML
    private HTMLEditor editor;
    
    @FXML
    private TextField textTo;
    
    @FXML
    private TextField textTitle;
    
    @FXML
    private Label message;
    
    @FXML
    private void sendButtonAction(ActionEvent event) {
        try {
            WebMail mail = new WebMail();
            
            //送信元情報
            mail.setFrom(MAIL_FROM);
            mail.setFromName(MAIL_FROM_NAME);
            
            //送信先
            mail.setTo(textTo.getText());
            
            //送信タイトル
            mail.setSubject(textTitle.getText());
            
            //HTMLエディタ入力内容
            mail.setHtml(editor.getHtmlText());
            
            //メール送信
            client.mail(mail);
            
            message.setText("メールの送信に成功しました。");
        } catch (IOException | SendGridException ex) {
            message.setText("メールの送信に失敗しました。");
        }
    }
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        client = new SendGridClient(SMTP_AUTH_USER, SMTP_AUTH_PWD);
    }    
}

簡単なメール送信するだけなら、こんなレベルで作れます(^^;

ちなみにJDK8で作っていたのですが、HTMLEditorを使うと実行時に以下のエラーで落ちました…。


Exception in Application start method
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1959)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:699)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:694)
at javafx.scene.control.ListCell.updateItem(ListCell.java:442)
at javafx.scene.control.ListCell.indexChanged(ListCell.java:320)
at javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:115)
at com.sun.javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1730)
at com.sun.javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1627)
//略
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:491)
//略
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:868)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:55)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:157)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1959)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:699)
at com.sun.javafx.scene.web.skin.HTMLEditorSkin$15$1.updateItem(HTMLEditorSkin.java:694)
at javafx.scene.control.ListCell.updateItem(ListCell.java:442)
//略
at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:101)
... 1 more
Exception running application jp.co.hoge.sendgridfx.MainApp

JDKというよりmavenまわりなのかな(^^;JDK7にしたら動いたので、とりあえず今回のサンプルはNetBeans7.4とJDK7で作りました。

NetBeans7.4では起動ブラウザの選択が楽ちんになってる(^^;

昨日(10/16)、NetBeans7.4の正式版が出ましたね(^^)
以下日本語サイトではトップページは7.3と出てますが、ダウンロードリンクの先は7.4になってます。
https://ja.netbeans.org/

RC1は入れてました(RC2は見逃してた…)が、仕事では普段7.3.1を使ってるので7.4で増えた機能に気づかなかったのですが、まず目につくところではメニューアイコンが何やら増えてますね。

7.3.1(下図の上段)と7.4(下図の下段)を並べてみると…(この場合は地球みたいな)アイコンが(^^)/
f:id:kikutaro777:20131017232019j:plain

クリックしてみるとこんな感じにブラウザ選択ができます。おおー。
f:id:kikutaro777:20131017232127j:plain
自分の環境にAndroidの開発環境はなかったのでAndroidのは選んでも起動しませんが、ここでブラウザ選択できるのは地味に便利そう。
(ちなみにOperaとかはインストールしたら出てくるの…かしら(^^;未確認)

Chromeにして実行すると、Chromeが起動。
f:id:kikutaro777:20131017232222j:plain

ちなみに先の地球アイコンは埋込みWebKitブラウザで、上記Chromeで実行したものと同じアプリケーションを起動すると以下のような感じです。
f:id:kikutaro777:20131017232453j:plain

埋込みWebKitブラウザ自体は7.3からですかね。以下@kisさんが7.3が出たときに紹介されていたブログ記事です。
NetBeans7.3(Beta)に組込みブラウザがついて想像以上にすばらしい

起動ブラウザの選択って今までは「ツール」の「オプション」から「一般」でWebブラウザを選んでいました。(これ自体は7.4でも、もちろんあります)
でもクロスブラウザ試験するときとか、結構めんどうだったんですよね。
f:id:kikutaro777:20131017232725j:plain

このメニューができて嬉しいのは

  • 実行時に簡単に選択できること
  • プロジェクトごとに設定できること

ですね。2個目も地味だけど便利。

以下のように2つプロジェクトがあって、1つはFirefox
f:id:kikutaro777:20131017232938j:plain
もう1つは埋込WebKitみたいに設定できます。
f:id:kikutaro777:20131017232945j:plain

実行ボタンの横にある辺りもいいですね。

ちなみにプロジェクトを右クリックして「プロパティ」の「実行」からも設定できます。
f:id:kikutaro777:20131017233154j:plain

ってキャプチャとるためにプロパティ開いたらカテゴリのメニューも何か色々と増えてる!!この辺はまた触ってみないとー。

Git未経験者ですがGitBucket入れてみました…(^^;

ブログ書くようになって1年くらい経ちました。
ブログ向けに作ったサンプルのソースコードは特に管理していないのですが、たまに自分自身で「ああ、あのとき自分で書いたやつのサンプルコード欲しい…」とかなることもしばしば(^^;

GitHubにアカウント作るかー、でも全然Git知らないなぁ…(-_-;うーん

と思ってた所、最近よくTwitterでGitBucketなるものが流れてきて、これは手軽そう!と思ってトライしてみました。まずはGitの使い方に慣れるため…みたいな(^^;

GitBucketとは?というのは作者ご本人の方が書かれた以下記事で把握できます(^^)
イマドキのIDE事情 162 手軽に設置できるGithubクローン「GitBucket」を使ってみよう

GitBucket自体は
https://github.com/takezoe/gitbucket
上記からリンクありますが、warファイルはreleaseページから取得しました。
https://github.com/takezoe/gitbucket/releases

GlassFish 3.1.2にgitbucket.warを展開してみる

デプロイ先のサーブレットコンテナの例としてはTomcatとJettyがあがっていたのですが、自分の手元にあるリモートマシンではGlassFishしかないので、GlassFish 3.1.2にデプロイしてみました。結果的にはあっさり動きました(^^)

warファイルを

f:id:kikutaro777:20131011192910j:plain

GlassFishの管理コンソールから指定してデプロイ

f:id:kikutaro777:20131011192942j:plain

あっさり!

f:id:kikutaro777:20131011192956j:plain

ブラウザでアクセスしてみる

デプロイ後、URL叩くと以下のような画面が起動します。

f:id:kikutaro777:20131011193130j:plain

デフォルトではユーザ/パスワードがroot/rootとのことで、ログインします。

ユーザ作成

まずはユーザ作成しました。
右上のAdministrationメニューからUser Managementへ

f:id:kikutaro777:20131011193416j:plain

必要情報を入れて

f:id:kikutaro777:20131011193512j:plain

できました!

f:id:kikutaro777:20131011193554j:plain

リポジトリ作成

次はリポジトリを作ってみます。
右上のCreate a new repoでリポジトリ作成画面へ。

f:id:kikutaro777:20131011193704j:plain

とりあえずroot配下に「samples」という名前を入れて保存しました。
ここではpublicなリポジトリを選択しました。

一旦ログアウトすると、News Feedにリポジトリ作成のフィードが出てたり(^^)

f:id:kikutaro777:20131011193923j:plain

NetBeansのプロジェクトから

自分は日頃NetBeansを使っているので、NetBeansのGit連携機能を使ってみました(^^)

ブログのサンプルで作った適当なプロジェクトを右クリックしてバージョン管理からGitリポジトリの初期化を選択します。

f:id:kikutaro777:20131011194105j:plain

リポジトリを作成するディレクトリの指定ダイアログが出ます。
とりあえずデフォルトのままOKにしました。

本当はちゃんとGitを学ぶならまずはコマンドラインからしっかり覚えたほうが良さそうですが…(^^;

f:id:kikutaro777:20131011194156j:plain

すると、プロジェクト内のファイルが以下のように

f:id:kikutaro777:20131011194217j:plain

で、コミットします。
慣れてなくて勢いで全部コミットしてしまいました(^^;まあ練習練習。

f:id:kikutaro777:20131011194524j:plain

リモートのリポジトリへプッシュしてみます。
プロジェクトを右クリックして「Git->リモート->プッシュ」を選択。

f:id:kikutaro777:20131011194639j:plain

Gitリポジトリの場所を指定します。
ここで素人っぽくハマったのですが、デプロイした先のURLをそのままのコピペしてました(^^;
http//10.25.66.77:8080/gitbucket/root/samples」みたいな。

画面をキャプチャし忘れてしまったのですが、GitBucketの「Code」というところの画面にコマンドラインでのサンプルがあって、そこにリポジトリへのプッシュの例があります。

そこに(ちゃんと自分の例で)表示されているURLがあるので、それを指定します。自分の場合は
http://10.25.66.77:8080/gitbucket/git/root/samples.git」でした。

f:id:kikutaro777:20131011194720j:plain

ローカル分岐にチェック入れて「終了」ボタンを押します。

f:id:kikutaro777:20131011195220j:plain

で、ブラウザを再読込してみると

f:id:kikutaro777:20131011201012j:plain

おお(^^)

Git初めてなので、文章的におかしい所とかあるかも…ですが、とりあえず今日はここまで。
あとは普通にソース管理ツールとしての機能を色々試していきたいと思います。

Gitに慣れたらGitHubにアカウント作ってみたい(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村