<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hello World!!&#187; Hello World!</title>
	<atom:link href="http://bhags.org/?feed=rss2&#038;tag=hello-world" rel="self" type="application/rss+xml" />
	<link>http://bhags.org</link>
	<description>Welcome to Sinyu&#039;s  site</description>
	<lastBuildDate>Mon, 06 Nov 2017 04:17:27 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8.1</generator>
	<item>
		<title>Vert.x 3.1.0 Tutorial &#8211; 1 : Hello World</title>
		<link>http://bhags.org/?p=690</link>
		<comments>http://bhags.org/?p=690#comments</comments>
		<pubDate>Sat, 07 Nov 2015 11:56:02 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Infra]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Vert.x]]></category>
		<category><![CDATA[Hello World!]]></category>
		<category><![CDATA[Vert.x 3.1.0]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=690</guid>
		<description><![CDATA[Vert.xの紹介は本家サイト(http://vertx.io/)に譲ってとりあえずHello Wo[...]]]></description>
				<content:encoded><![CDATA[<h1><span style="font-size: 14px; font-weight: normal; line-height: 21px;">Vert.xの紹介は本家サイト(</span><a style="font-size: 14px; font-weight: normal; line-height: 21px;" title="Vert.x" href="http://vertx.io/" target="_blank">http://vertx.io/</a><span style="font-size: 14px; font-weight: normal; line-height: 21px;">)に譲ってとりあえずHello Word！</span></h1>
<h6>まず、今回のソースコードは<a title="こちら" href="https://github.com/bhags1981/hello-verticle" target="_blank">こちら</a></h6>
<h2>0.開発環境</h2>
<hr />
<ul>
<li>Mac OS  X</li>
<li>java 1.8 以上</li>
<li>IntelliJ 14.</li>
</ul>
<h1>1 : IntelliJでmaven新規プロジェクト作成</h1>
<hr />
<ol>
<li>File -&gt;New -&gt; Project</li>
<li>Mavenを選択しNext<a href="http://bhags.org/wp-content/uploads/2015/11/maven_setting.png" target="_blank"><br />
<img class="wp-image-696 aligncenter" alt="Project Setting" src="http://bhags.org/wp-content/uploads/2015/11/maven_setting.png" width="343" height="230" /></a></li>
<li>maven project 設定<a href="http://bhags.org/wp-content/uploads/2015/11/create_mvn_project.png" rel="fancybox[690]" target="_blank"><img class="wp-image-691 aligncenter" alt="maven project create" src="http://bhags.org/wp-content/uploads/2015/11/create_mvn_project.png" width="342" height="229" /></a>
<ul>
<li>GroupId : totorial.vertx</li>
<li>ArtifactId : hello-verticle</li>
<li>Version : 1.0-SNAPSHOT</li>
</ul>
</li>
<li>Project name / location<a href="http://bhags.org/wp-content/uploads/2015/11/project_setting.png" rel="fancybox[690]" target="_blank"><img class=" wp-image-712 aligncenter" alt="project_setting" src="http://bhags.org/wp-content/uploads/2015/11/project_setting.png" width="363" height="245" /></a>
<ul>
<li>name : hello-virticle</li>
<li>location : すきなところへ</li>
</ul>
</li>
</ol>
<h1>2 : pom.xml に依存関係を追加</h1>
<hr />
<p>以下の依存関係およびbuildをpom.xml のversionの下に追加</p>
<pre>&lt;dependencies&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;io.vertx&lt;/groupId&gt;
        &lt;artifactId&gt;vertx-core&lt;/artifactId&gt;
        &lt;version&gt;3.1.0&lt;/version&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;

&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
            &lt;version&gt;3.3&lt;/version&gt;
            &lt;configuration&gt;
                &lt;source&gt;1.8&lt;/source&gt;
                &lt;target&gt;1.8&lt;/target&gt;
            &lt;/configuration&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;</pre>
<p>Maven Project Windowより[Reimport All Maven Projects]を実行</p>
<p style="text-align: center;"><a href="http://bhags.org/wp-content/uploads/2015/11/reimport_mavent_project.png" rel="fancybox[690]" target="_blank"><img class="aligncenter  wp-image-720" alt="reimport_mavent_project" src="http://bhags.org/wp-content/uploads/2015/11/reimport_mavent_project.png" width="685" height="371" /></a></p>
<h1>3.Hello Verticle</h1>
<hr />
<p>HelloVerticle 作成</p>
<pre>package tutorial.vertx;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;
/**
 * Created by bhags on 15/11/07.
 */
public class HelloVerticle extends AbstractVerticle {

    @Override
    public void start(Future&lt;Void&gt; fut) {
        vertx
                .createHttpServer()
                .requestHandler(r -&gt; {
                    r.response().end(
                            "&lt;h1&gt;Hello Verticle!!! "&lt;/h1&gt;");
                })
                .listen(8080, result -&gt; {
                    if (result.succeeded()) {
                        fut.complete();
                    } else {
                        fut.fail(result.cause());
                    }
                });
    }
}

</pre>
<p>まず、HelloVerticleは AbstractVerticleを継承している。Vert.xの世界では 全ての<em>verticle</em>はコンポーネントである。AbstractVerticleを継承することでHelloVerticleよりvertxフィールドを取得することができる。</p>
<p>startメソッドはverticleがデプロイされると呼び出される。stopメソッドの実装も必要だがここではVert.xが代わりにGCを行ってくれる。また、startメッソドはFutureオブジェクトを受け取る。Futureメッソドはstartシーケンスの無事終わったか、エラーが発生したかなどをVert.x側に教えられる。Vert.xの特徴の一つとして非同期/non-blockingがある。verticleがデプロイされるとverticleはstart methodの終了を待たない。だからFutureパラメータの終了通知が大事である。</p>
<p>このHelloVerticleのstartではHTTPサーバーを生成しリクエストハンドラーをアタッチしている。request handlerはlambda式でrequestHandlerへ伝達されている。最後にサーバーは8080ポートにバウンドされポートのバウンドに問題なければfut.complete()を問題があれば(8080が使われているなど)fut.fail(失敗)を通知する。</p>
<h1>4:Create fatjar</h1>
<hr />
<p>pom.xmlに以下ソースを追加</p>
<pre>&lt;plugin&gt;
    &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
    &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt;
    &lt;version&gt;2.3&lt;/version&gt;
    &lt;executions&gt;
        &lt;execution&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;goals&gt;
                &lt;goal&gt;shade&lt;/goal&gt;
            &lt;/goals&gt;
            &lt;configuration&gt;
                &lt;transformers&gt;
                    &lt;transformer
                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"&gt;
                        &lt;manifestEntries&gt;
                            &lt;Main-Class&gt;io.vertx.core.Launcher&lt;/Main-Class&gt;
                            &lt;Main-Verticle&gt;tutorial.vertx.HelloVerticle&lt;/Main-Verticle&gt;
                        &lt;/manifestEntries&gt;
                    &lt;/transformer&gt;
                &lt;/transformers&gt;
                &lt;artifactSet/&gt;
                &lt;outputFile&gt;${project.build.directory}/${project.artifactId}-${project.version}-fat.jar&lt;/outputFile&gt;
            &lt;/configuration&gt;
        &lt;/execution&gt;
    &lt;/executions&gt;
&lt;/plugin&gt;</pre>
<p>Run/Debug Configurationsでmaven実行configurationを追加 (Command line : clean package)</p>
<p style="text-align: center;"><a href="http://bhags.org/wp-content/uploads/2015/11/mvn_run_configuration.png" rel="fancybox[690]" target="_blank"><img class="aligncenter  wp-image-722" alt="mvn_run_configuration" src="http://bhags.org/wp-content/uploads/2015/11/mvn_run_configuration.png" width="691" height="389" /></a></p>
<h1>5:結果確認</h1>
<p>targetに生成されたhello-verticle-1.0-SNAPSHOT-fat.jarを実行</p>
<pre>java -jar /path/to/fatjar/hello-verticle-1.0-SNAPSHOT-fat.jar

*以下が表示されれば
11 07, 2015 10:31:44 午後 io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
情報: Succeeded in deploying verticle</pre>
<p>http://127.0.0.1:8080へアクセス後以下が表示されればOK</p>
<pre>Hello Verticle!!!</pre>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=690</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
