<?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; Vert.x</title>
	<atom:link href="http://bhags.org/?cat=80&#038;feed=rss2" 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; 2 : Hello World TEST</title>
		<link>http://bhags.org/?p=727</link>
		<comments>http://bhags.org/?p=727#comments</comments>
		<pubDate>Sun, 08 Nov 2015 04:36:28 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Vert.x]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=727</guid>
		<description><![CDATA[Vert.x applicationはJUnitとvertx-unitでunitテストが可能なので [...]]]></description>
				<content:encoded><![CDATA[<p>Vert.x applicationはJUnitとvertx-unitでunitテストが可能なので<br />
今回は前回のHello WorldのUnitテスト手順を投稿</p>
<h6>本家の説明は<a title="こちら" href="http://vertx.io/blog/my-first-vert-x-3-application/" target="_blank">こちら</a><br />
前回の記事は<a title="Vert.x 3.1.0 Tutorial – 1 : Hello World" href="http://bhags.org/?p=690" target="_blank">こちら</a><br />
今回のソースは<a title="こちら" href="https://github.com/bhags1981/hello-verticle" target="_blank">こちら</a></h6>
<h1></h1>
<h1>1.依存関係追加</h1>
<p>JUnitとvertx-unitテスト用の依存関係をpom.xmlに追加</p>
<pre>&lt;dependency&gt;
    &lt;groupId&gt;junit&lt;/groupId&gt;
    &lt;artifactId&gt;junit&lt;/artifactId&gt;
    &lt;version&gt;4.12&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;io.vertx&lt;/groupId&gt;
    &lt;artifactId&gt;vertx-unit&lt;/artifactId&gt;
    &lt;version&gt;3.1.0&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;</pre>
<p>追加後libraryを更新[Maven Project パネルより-&gt;Reimport all maven projectsを実施]</p>
<h1>2.テストソース</h1>
<p>以下ソースをsrc/test/java/tutorial/vertx/HelloVerticleTest.javaに生成</p>
<pre>/**
 * Created by bhags on 15/11/08.
 */

package tutorial.vertx;
import io.vertx.core.Vertx;
import io.vertx.ext.unit.Async;
import io.vertx.ext.unit.TestContext;
import io.vertx.ext.unit.junit.VertxUnitRunner;

import io.vertx.core.logging.LoggerFactory;
import io.vertx.core.logging.Logger;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(VertxUnitRunner.class)
public class HelloVerticleTest {

    private Vertx vertx;
    private final static Logger log = LoggerFactory.getLogger(HelloVerticleTest.class);
    @Before
    public void setUp(TestContext context) {
        log.info("SETUP");
        vertx = Vertx.vertx();
        vertx.deployVerticle(HelloVerticle.class.getName(),
                context.asyncAssertSuccess());
    }

    @After
    public void tearDown(TestContext context) {
        log.info("TEAR DOWN");
        vertx.close(context.asyncAssertSuccess());
    }

    @Test
    public void testMyApplication(TestContext context) {
        log.info("TEST MY APPLICATION");
        final Async async = context.async();

        vertx.createHttpClient().getNow(8080, "localhost", "/",
                response -&gt; {
                    response.handler(body -&gt; {
                        context.assertTrue(body.toString().contains("Hello"));
                        async.complete();
                    });
                });
    }
}</pre>
<h1>3.TEST 実行</h1>
<pre>mvn clean test</pre>
<h1>4.JUnit テスト Methods</h1>
<p>以上でHelloVeticleの JUnit テストが無事完了した。上記のunitテストはvertx-unitを使っていてcustom runnerを利用している。vertx-unitのおかげでvert.xアプリケージョンの非同期動作を簡単にテストできるようになっている。</p>
<h3>setUp</h3>
<p>setup methodではvertxのインスタンスが生成される。そして、HelloVeticle verticleデプロイしてくれる。また、setUpがTestContextを引数として取っている。このオブジェクトがテストの非同期面をコントロール可能にしてくれている。例えばverticleをデプロイするとそれは非同期で実行されるためそれが正しく実行されるまでプログラム側でチェックすることはできない。そのためdeployVerticleメソッドの2番目の引数としてresult handlerを渡している。それがcontext.axyncAssertSuccess();である。これはverticleが正しく実行されなければ失敗を返す。さらにこれはverticleのstart シーケンスが終了することを待ってくれる。実際にはHelloVerticleのfut.complete()を待つのである。</p>
<h3>tearDown</h3>
<p>tearDownでは単純に生成されたvertx instanceを終了している。</p>
<h3>testMyApplication</h3>
<p>このメソッドは実際にリクエストを発行し結果をチェックしている。リクエストの発行および結果の取得はもちろん非同期である。これらを制御するためにTestContextを利用する。このオブジェクトのasync.complete()を利用することでいつテストが終わるのかを制御できる。</p>
<p>つまり、async handleが生成されるとgetNow()メソッドを利用してHTTPクライアントを作成し,また、テストアプリケージョンによって管理されるhttpリクエストを発行することができる(getNow() は　get(&#8230;).end() のショートカット)。リクエストの結果はlambdaで管理されbodyの中にHelloがあるかを確認している。</p>
<p>context.assert&#8230;はエラーが発生した段階ですぐにテストを中止し、エラーを出力する。非同期のVert.xアプリケージョンでのテストは常にassertionメッソドを利用する必要がある。</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=727</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
		<item>
		<title>Vert.x 3.1.0 Service Tutorial</title>
		<link>http://bhags.org/?p=683</link>
		<comments>http://bhags.org/?p=683#comments</comments>
		<pubDate>Sat, 07 Nov 2015 08:20:36 +0000</pubDate>
		<dc:creator><![CDATA[bhags]]></dc:creator>
				<category><![CDATA[Vert.x]]></category>
		<category><![CDATA[Vert.x Service Redis]]></category>

		<guid isPermaLink="false">http://bhags.org/?p=683</guid>
		<description><![CDATA[[前置き] Vert.x 3.0よりv直接classnameもしくはscript nameを利用しd[...]]]></description>
				<content:encoded><![CDATA[<p>[前置き]<br />
Vert.x 3.0よりv直接classnameもしくはscript nameを利用しdeployせずに,<br />
ServicVerticleFactoryを利用しdeployすることが可能。</p>
<p>[Tutorial]<br />
1.pom.xmlに以下のService Factory Dependencyを追加</p>
<pre>&lt;dependency&gt;
  &lt;groupId&gt;io.vertx&lt;/groupId&gt;
  &lt;artifactId&gt;vertx-service-factory&lt;/artifactId&gt;
  &lt;version&gt;3.0.0&lt;/version&gt;
&lt;/dependency&gt;</pre>
<p>ServiceFactoryはservice nameを元にverticleをdeployするためのVeticleFactoryの実装</p>
<p>2.First Sample Service &#8211; Serviceが呼び出されたら&#8221;This is my test service&#8221;を出力</p>
<pre>package biz.playport.vertx.services;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.logging.Logger;
import io.vertx.core.logging.LoggerFactory;

/**
 * Created by bhags on 15/11/07.
 */
public class FirstServiceVerticle extends AbstractVerticle {
    private final static Logger log = LoggerFactory.getLogger(FirstServiceVerticle.class);

    @Override
    public void start(){
        log.info("This is my test service");
    }

}</pre>
<p>3.Serviceを呼び側</p>
<p>参考URL</p>
<p>https://github.com/vert-x3/vertx-service-factory</p>
<p>https://groups.google.com/forum/?hl=ja#!searchin/vertx/Service/vertx/vezlmH-H4NI/uBe9iM5Z1U8J</p>
<p>http://qiita.com/p-baleine@github/items/d26999fe42ace182aca1</p>
<p>Vert.x</p>
<p>To do list -<br />
1.Vert.x用 + message pack用のjava socket libraryを構築<br />
2.multi port를 쓰는것이 좋은가?</p>
<p>3.vertx에서<br />
서비스 만들기<br />
서비스 쓰기<br />
서비스 프록시 쓰기<br />
Vert.x 3 Tutorials<br />
1. Start with maven<br />
To run with maven<br />
mvn compile exec:java</p>
<p>To build a &#8220;fat jar&#8221;<br />
mvn package</p>
<p>To run the fat jar:<br />
java -jar target/maven-simplest-3.1.0-fat.jar</p>
<p>&gt;&gt;(You can take that jar and run it anywhere there is a Java 8+ JDK. It contains all the dependencies it needs so you don’t need to install Vert.x on the target machine).</p>
<p>1.</p>
]]></content:encoded>
			<wfw:commentRss>http://bhags.org/?feed=rss2&#038;p=683</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
