<?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>技術ブログ &#124; 株式会社クラウディア &#187; エディタ</title>
	<atom:link href="https://cloudear.jp/blog/?cat=28&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://cloudear.jp/blog</link>
	<description>クラウド専門の業務システム・社内ツール開発</description>
	<lastBuildDate>Fri, 12 Nov 2021 05:00:35 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.1</generator>
	<item>
		<title>JavaEEだけでここまで出来る！GlassFish+Eclipseで高速Webアプリ開発【開発編】</title>
		<link>https://cloudear.jp/blog/?p=1435</link>
		<comments>https://cloudear.jp/blog/?p=1435#comments</comments>
		<pubDate>Mon, 17 Aug 2015 01:09:29 +0000</pubDate>
		<dc:creator><![CDATA[tomo]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[エディタ]]></category>
		<category><![CDATA[フレームワーク]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1435</guid>
		<description><![CDATA[JavaEEでWebアプリを高速開発する手順をご紹介するエントリの第２弾です。前回の記事はこちら。 今回はいよいよWebアプリを作っていきます。 このエントリのゴール 簡単にJavaEE開発環境を構築する手順を説明します [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>JavaEEでWebアプリを高速開発する手順をご紹介するエントリの第２弾です。前回の記事は<a title="JavaEEだけでここまで出来る！GlassFish+Eclipseで高速Webアプリ開発【環境構築編】" href="https://cloudear.jp/blog/?p=1375">こちら</a>。</p>
<p>今回はいよいよWebアプリを作っていきます。</p>
<p><span id="more-1435"></span></p>
<h2>このエントリのゴール</h2>
<ul>
<li>簡単にJavaEE開発環境を構築する手順を説明します<span style="color: #0000ff;">【前回ご紹介】</span></li>
<li>JavaEEを使ったRDBにアクセスする簡単なサンプルを作成する手順を説明します<span style="color: #ff0000;">【今回はこちらの手順をご紹介】</span></li>
</ul>
<h2>前提</h2>
<ul>
<li>前回のエントリに沿って開発環境が構築されていること</li>
</ul>
<h2>アプリケーションの作成</h2>
<p>JavaEEの仕様は重厚長大ですが、Webアプリを作るだけならほんの少しのことを知っているだけでOKです。</p>
<p>ここでは、JPAを使って単一テーブルからのCRUDを実行するシンプルな１画面のみのアプリを作ってみます。画面イメージは以下のようになります。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/08/8c66225166aca937086df4d28b5ac669.png"><img class="alignnone size-full wp-image-1408" src="https://cloudear.jp/blog/wp-content/uploads/2015/08/8c66225166aca937086df4d28b5ac669.png" alt="スクリーンショット 2015-08-13 14.55.52" width="663" height="384" /></a></p>
<p>それでは、EJB→Servlet→JSPの順番で作成していきます。</p>
<h3>EJB</h3>
<p>EJBといっても大げさに考える必要はなく、DBアクセスを担当するフツーのクラスのことです。</p>
<p>今回は、JavaEE標準のDBアクセス仕様であるJPAを使ってEJBを実装します。まずはJPAの動作に必要な設定ファイルとクラスを作成しましょう。</p>
<h4>JPA設定ファイル（persistence.xml）の作成</h4>
<p>Eclipse上にソースフォルダsrc/main/resourcesが無い場合は作成し、更にその中にMETA-INFフォルダを作って下さい。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/08/d2acd52ca8e31576bd37b33e581374d2.png"><img class="alignnone size-full wp-image-1397" src="https://cloudear.jp/blog/wp-content/uploads/2015/08/d2acd52ca8e31576bd37b33e581374d2.png" alt="スクリーンショット 2015-08-13 13.46.45" width="316" height="255" /></a></p>
<p>META-INFフォルダの中にpersistence.xmlを次の通りに作成します。</p>
<pre class="lang:xhtml decode:true" title="persistence.xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"&gt;
    &lt;persistence-unit name="pu" transaction-type="JTA"&gt;
        &lt;jta-data-source&gt;jdbc/App&lt;/jta-data-source&gt;
        &lt;exclude-unlisted-classes&gt;false&lt;/exclude-unlisted-classes&gt;
        &lt;properties&gt;
            &lt;property name="eclipselink.ddl-generation" value="create-tables" /&gt;
            &lt;property name="eclipselink.logging.level.sql" value="FINE" /&gt;
            &lt;property name="eclipselink.logging.parameters" value="true" /&gt;
            &lt;!-- eclipseのConsoleビューにSQLを出力するための設定. http://stackoverflow.com/questions/4676705/jpa-2-0-logging-and-tracing-through-with-glassfish-3-0-1-and-netbeans-6-9-1 --&gt;
            &lt;property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.DefaultSessionLog"/&gt;
        &lt;/properties&gt;
    &lt;/persistence-unit&gt;
&lt;/persistence&gt;
</pre>
<p>&nbsp;</p>
<p class="lang:xhtml decode:true " title="persistence.xml">&lt;property name=&#8221;eclipselink.ddl-generation&#8221; value=&#8221;create-tables&#8221; /&gt;という記述のおかげで、サーバ起動時にテーブルが自動で作られます。</p>
<p class="lang:xhtml decode:true " title="persistence.xml">また、DBデータはプロジェクト内のdbフォルダの中に作られます。このフォルダを削除すれば、再度テーブルが作られます。</p>
<h4>エンティティクラスの作成</h4>
<p>DBのテーブルに対応するクラスを作成しましょう。</p>
<p>src/main/java下のパッケージsandbox.entityに以下の通りにEmployeeクラスを作成します。</p>
<pre class="lang:java decode:true" title="Employee.java">package sandbox.entity;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Employee implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long   id;

    @Column(nullable = false, unique = true, length = 100)
    String name;

    public Long getId() {
        return this.id;
    }

    public String getName() {
        return this.name;
    }

    public void setId(final Long pId) {
        this.id = pId;
    }

    public void setName(final String pName) {
        this.name = pName;
    }
}
</pre>
<h4>EJBクラスの作成</h4>
<p>src/main/java下のパッケージsandbox.serviceにEmployeeServiceクラスを作成します。INSERT、SELECT、DELETE用に３つのメソッドを作成しましょう。</p>
<pre class="lang:java decode:true " title="EmployeeService.java">package sandbox.service;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;

import sandbox.entity.Employee;

@Stateless
public class EmployeeService {

    @PersistenceContext(unitName = "pu")
    EntityManager em;

    public Employee delete(final long pDeleteEmployeeId) {
        final Employee emp = this.em.find(Employee.class, Long.valueOf(pDeleteEmployeeId));
        this.em.remove(emp);
        return emp;
    }

    public List&lt;Employee&gt; getAll() {
        final CriteriaBuilder builder = this.em.getCriteriaBuilder();
        final CriteriaQuery&lt;Employee&gt; query = builder.createQuery(Employee.class);
        query.from(Employee.class);
        return this.em.createQuery(query).getResultList();
    }

    public Employee insert(final String pName) {
        final Employee newEmp = new Employee();
        newEmp.setName(pName);
        this.em.persist(newEmp);
        return newEmp;
    }
}
</pre>
<p>たったこれだけです。メソッドの前後で自動的にトランザクションが仕込まれます。また以前の記事「<a title="依存性注入（DIコンテナ）について" href="https://cloudear.jp/blog/?p=1247" target="_blank">依存性注入（DIコンテナ）について</a>」で紹介したDI機能によって、JPA用のEntityManagerオブジェクトが良い感じでインジェクトされます。</p>
<p>またSQLが全く登場しないことにも注目して下さい。JPAのCriteria Queryという機能を使うと、SQLを書かずに済むシーンが増えます。文字列に頼らず型を使ってDBアクセス出来るようになることは、Javaの型安全性ととても相性の良い手法だと思います。JPAを使う場合は、ぜひ有効活用してみて下さい。</p>
<p>これら全ての機能がJavaEEによって提供されている点にも注目です。SpringやHibernateなどのライブラリを組み合わせて使う場合、ライブラリ同士をうまく接続するために多少なりとも設定を書く必要がありますが、JavaEEであればライブラリを、それもたった２つのJARを参照するだけ。</p>
<p>このお手軽さがJavaEEを使って開発する際の魅力です。</p>
<h3>Servletの作成</h3>
<p>続いてHTTPリクエストを受け取るためのServletを作成します。今回は、ルート（ / ）へのGETで社員一覧、ルートへのPOSTで社員の追加を行うようにしましょう。</p>
<p>src/main/java下のパッケージsandbox.web.handlerにEmployeeHandlerクラスを作成します。</p>
<pre class="lang:default decode:true" title="EmployeeHandler.java">package sandbox.web.handler;

import java.io.IOException;
import java.util.List;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sandbox.entity.Employee;
import sandbox.service.EmployeeService;

@WebServlet(urlPatterns = "/")
public class EmployeeHandler extends HttpServlet {

    @Inject
    EmployeeService employeeService;

    @Override
    protected void doGet(final HttpServletRequest pReq, final HttpServletResponse pResp) throws ServletException, IOException {
        final List&lt;Employee&gt; emps = this.employeeService.getAll();
        pReq.setAttribute("emps", emps);
        pReq.getRequestDispatcher("WEB-INF/emp.jsp").forward(pReq, pResp);
    }

    @Override
    protected void doPost(final HttpServletRequest pReq, final HttpServletResponse pResp) throws ServletException, IOException {
        final String empName = pReq.getParameter("employee-name");
        this.employeeService.insert(empName);
        pResp.sendRedirect("/");
    }
}
</pre>
<p>もう１つServletを作ります。/deleteへのPOSTで社員一覧を削除するようにしましょう。</p>
<p>src/main/java下のパッケージsandbox.web.handlerにEmployeeDeleteHandlerクラスを作成します。</p>
<pre class="lang:default decode:true" title="EmployeeDeleteHandler.java">package sandbox.web.handler;

import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sandbox.service.EmployeeService;

@WebServlet(urlPatterns = "/delete")
public class EmployeeDeleteHandler extends HttpServlet {

    @Inject
    EmployeeService employeeService;

    @Override
    protected void doPost(final HttpServletRequest pReq, final HttpServletResponse pResp) throws ServletException, IOException {
        final String employeeIdStr = pReq.getParameter("employee-id");
        try {
            final long employeeId = Long.parseLong(employeeIdStr);
            this.employeeService.delete(employeeId);
        } catch (final NumberFormatException e) {
            // nop
        }
        pResp.sendRedirect("/");
    }
}
</pre>
<p>各メソッドでやっていることは</p>
<ol>
<li>EJBを呼び出してDB操作</li>
<li>JSP呼び出し、または/へのリダイレクト</li>
</ol>
<p>という単純な処理です。</p>
<p>ServletクラスでもDI機能が使えるため、EmployeeServiceオブジェクトが良い感じでインジェクトされます。</p>
<h3>JSPの作成</h3>
<p>最後に、JSPで画面を作成しましょう。</p>
<p>src/main/webapp/WEB-INFの下にemp.jspを作成して下さい。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/08/82ce28448bfdf72db673788bb3f69aa3.png"><img class="alignnone size-full wp-image-1406" src="https://cloudear.jp/blog/wp-content/uploads/2015/08/82ce28448bfdf72db673788bb3f69aa3.png" alt="スクリーンショット 2015-08-13 14.34.58" width="315" height="327" /></a></p>
<pre class="lang:asp decode:true" title="emp.jsp">&lt;%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"&gt;
    &lt;title&gt;社員情報&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="container"&gt;
      &lt;fieldset&gt;
        &lt;legend&gt;社員一覧&lt;/legend&gt;
        &lt;table class="table table-striped"&gt;
          &lt;thead&gt;
            &lt;tr&gt;
              &lt;td&gt;#&lt;/td&gt;
              &lt;td&gt;名前&lt;/td&gt;
              &lt;td&gt; &lt;/td&gt;
            &lt;/tr&gt;
          &lt;/thead&gt;
          &lt;tbody&gt;
            &lt;c:forEach  items="${emps}" var="emp"&gt;
              &lt;tr&gt;
                &lt;td&gt;${emp.id}&lt;/td&gt;
                &lt;td&gt;${emp.name}&lt;/td&gt;
                &lt;td&gt;
                  &lt;form method="post" action="${request.contextPath}/delete"&gt;
                    &lt;input type="hidden" value="${emp.id}" name="employee-id" /&gt;
                    &lt;button class="btn btn-danger"&gt;&lt;span class="glyphicon glyphicon-trash"&gt;&lt;/span&gt;&lt;/button&gt;
                  &lt;/form&gt;
                &lt;/td&gt;
              &lt;/tr&gt;
            &lt;/c:forEach&gt;
          &lt;/tbody&gt;
        &lt;/table&gt;
      &lt;/fieldset&gt;
      &lt;fieldset&gt;
        &lt;legend&gt;社員登録&lt;/legend&gt;
        &lt;form method="post" action="${request.contextPath}"&gt;
          &lt;div class="form-group"&gt;
            &lt;input type="text" name="employee-name" class="form-control" /&gt;
          &lt;/div&gt;
          &lt;button class="btn btn-primary"&gt;追加&lt;/button&gt;
        &lt;/form&gt;
      &lt;/fieldset&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
<p>手軽に見栄えを良くするために、Bootstrapを使っています。</p>
<h3>文字化け防止クラスの作成</h3>
<p>実はこのままでは日本語が文字化けします。次のクラスを作成して文字コードをUTF-8に統一します。</p>
<p>src/main/java下のパッケージsandbox.webにCharacterEncodingFilterクラスを作成します。</p>
<pre class="lang:java decode:true" title="CharacterEncodingFilter.java">package sandbox.web;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(urlPatterns = "/*", dispatcherTypes = DispatcherType.REQUEST)
public class CharacterEncodingFilter implements Filter {

    @Override
    public void destroy() {
        // nop
    }

    @Override
    public void doFilter(final ServletRequest pRequest, final ServletResponse pResponse, final FilterChain pChain) throws IOException,
            ServletException {
        ((HttpServletRequest) pRequest).setCharacterEncoding(StandardCharsets.UTF_8.name());
        ((HttpServletResponse) pResponse).setCharacterEncoding(StandardCharsets.UTF_8.name());
        pChain.doFilter(pRequest, pResponse);
    }

    @Override
    public void init(final FilterConfig pFilterConfig) throws ServletException {
        // nop
    }
}
</pre>
<p>&nbsp;</p>
<p>以上でコーディングは終了です！おつかれさまでした。</p>
<p>Eclipseプロジェクトは次のような状態になっているはずです。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/08/b928497fe3d80b633a9e8e70c93941d0.png"><img class="alignnone size-full wp-image-1412" src="https://cloudear.jp/blog/wp-content/uploads/2015/08/b928497fe3d80b633a9e8e70c93941d0.png" alt="スクリーンショット 2015-08-13 15.17.11" width="321" height="584" /></a></p>
<h3>動作確認</h3>
<p>前回作成したJavaEEContainerStarterクラスを起動した上で、以下のURLにアクセスして動作を確認してみて下さい。</p>
<p><a title="http://localhost:8081" href="http://localhost:8081">http://localhost:8081</a></p>
<h2>まとめ</h2>
<p>Eclipse上でJavaEEを使った開発の手順を説明してきました。</p>
<p>RoRほどではないものの、思ったよりも簡単に開発を始められ、割りと少ないコード量でWebアプリが作成出来ることがご理解いただけたかと思います。</p>
<p>フルJavaEEを使って開発する利点は、機能が豊富で、更にそれらの機能が既に統合されている、という点です。新しい機能を使うときにJAR参照を追加したりする必要はありません。RESTfulなWebアプリを作るためのJAX-RSであっても、WebSocketのハンドラクラスであっても、適切なアノテーションを付与したクラスを作れば、それだけで動作します。またビジネスロジックをEJBとして作成すれば、DI機能によってどこからでも利用出来ます。</p>
<p>しかしこう言った利点を享受したくてJavaEEを使おうとしても、環境構築が面倒で挫折した、という人は少なくないと思います。</p>
<p>今回ご紹介した環境構築手順を使えば、簡単高速に開発が始められますので、ぜひJavaEEを体験してその便利さに触れていただきたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1435</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaEEだけでここまで出来る！GlassFish+Eclipseで高速Webアプリ開発【環境構築編】</title>
		<link>https://cloudear.jp/blog/?p=1375</link>
		<comments>https://cloudear.jp/blog/?p=1375#comments</comments>
		<pubDate>Fri, 07 Aug 2015 07:21:00 +0000</pubDate>
		<dc:creator><![CDATA[tomo]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[エディタ]]></category>
		<category><![CDATA[フレームワーク]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1375</guid>
		<description><![CDATA[JavaでのWeb開発と言えばSpringMVC+Hibernate(MyBatis)辺りが人気の組み合わせでしょうか。他にもWicket、Struts、PlayFrameworkなど様々なフレームワークが実用されていま [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>JavaでのWeb開発と言えばSpringMVC+Hibernate(MyBatis)辺りが人気の組み合わせでしょうか。他にもWicket、Struts、PlayFrameworkなど様々なフレームワークが実用されています。</p>
<p><span id="more-1375"></span></p>
<p>そんな中、標準仕様であるJavaEEは人気が今ひとつな気がしますね。仕様が重い、動作が重い、などの悪印象があるのがその原因かもしれません。</p>
<p>しかし実は相当に開発しやすくなっているんです。</p>
<p>このエントリでは、JavaEEを活用してWebアプリを高速開発する手順を２回に分けてご紹介します。</p>
<h2>このエントリのゴール</h2>
<ul>
<li>簡単にJavaEE開発環境を構築する手順を説明します<span style="color: #ff0000;">【今回はこちらの手順をご紹介】</span></li>
<li>JavaEEを使ったRDBにアクセスする簡単なサンプルを作成する手順を説明します <span style="color: #0000ff;">【次回ご紹介】</span></li>
</ul>
<h2>前提</h2>
<ul>
<li>Eclipseをインストールしておいて下さい</li>
<li>Maven3系を導入しておいて下さい</li>
</ul>
<h2>開発環境の構築</h2>
<p>APサーバとDBサーバをインストールせずにEclipseでの開発環境を構築します。具体的には、組み込みGlassFishと組み込みH2 Database Engineを利用します。</p>
<h3>Eclipseプロジェクトの作成</h3>
<p>以下のコマンドでプロジェクトのひな形を作成して下さい。</p>
<pre class="lang:sh decode:true" title="mvn archetype:create">mvn -B archetype:create -DgroupId=sandbox -DartifactId=rapid-javaee -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=1.0</pre>
<p>これでrapid-javaeeというディレクトリが作られ、その中にpom.xmlが作られます。このファイルの中身を次のように書き換えます。設定の意味は極力ファイル内にコメントを付けておきましたので参照して下さい。</p>
<pre class="lang:xhtml decode:true" title="pom.xml">&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;groupId&gt;sandbox&lt;/groupId&gt;
    &lt;artifactId&gt;rapid-javaee&lt;/artifactId&gt;
    &lt;version&gt;1.0&lt;/version&gt;
    &lt;packaging&gt;war&lt;/packaging&gt;
    &lt;name&gt;rapid-javaee&lt;/name&gt;
    &lt;url&gt;http://maven.apache.org&lt;/url&gt;
    &lt;dependencies&gt;
        &lt;!-- JavaEE7のAPI --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;javax&lt;/groupId&gt;
            &lt;artifactId&gt;javaee-web-api&lt;/artifactId&gt;
            &lt;version&gt;7.0&lt;/version&gt;
            &lt;scope&gt;provided&lt;/scope&gt;
        &lt;/dependency&gt;
        &lt;!-- 組み込みGlassFish --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.glassfish.main.extras&lt;/groupId&gt;
            &lt;artifactId&gt;glassfish-embedded-web&lt;/artifactId&gt;
            &lt;version&gt;4.1&lt;/version&gt;
            &lt;scope&gt;provided&lt;/scope&gt;
        &lt;/dependency&gt;
        &lt;!-- H2 Database Engine --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.h2database&lt;/groupId&gt;
            &lt;artifactId&gt;h2&lt;/artifactId&gt;
            &lt;version&gt;1.4.181&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
    &lt;build&gt;
        &lt;finalName&gt;rapid-javaee&lt;/finalName&gt;
        &lt;!-- JavaEEの仕様に従ってclassファイルを配置するための設定 --&gt;
        &lt;outputDirectory&gt;src/main/webapp/WEB-INF/classes&lt;/outputDirectory&gt;
        &lt;testOutputDirectory&gt;src/main/webapp/WEB-INF/test-classes&lt;/testOutputDirectory&gt;
        &lt;!-- javaファイル以外のファイル格納用ソースフォルダの設定 --&gt;
        &lt;resources&gt;
            &lt;resource&gt;
                &lt;directory&gt;src/main/resources&lt;/directory&gt;
            &lt;/resource&gt;
            &lt;resource&gt;
                &lt;directory&gt;src/main/java&lt;/directory&gt;
                &lt;includes&gt;
                    &lt;include&gt;**&lt;/include&gt;
                &lt;/includes&gt;
                &lt;excludes&gt;
                    &lt;exclude&gt;**/*.java&lt;/exclude&gt;
                &lt;/excludes&gt;
            &lt;/resource&gt;
        &lt;/resources&gt;
        &lt;testResources&gt;
            &lt;testResource&gt;
                &lt;directory&gt;src/test/resources&lt;/directory&gt;
            &lt;/testResource&gt;
            &lt;testResource&gt;
                &lt;directory&gt;src/test/java&lt;/directory&gt;
                &lt;includes&gt;
                    &lt;include&gt;**&lt;/include&gt;
                &lt;/includes&gt;
                &lt;excludes&gt;
                    &lt;exclude&gt;**/*.java&lt;/exclude&gt;
                &lt;/excludes&gt;
            &lt;/testResource&gt;
        &lt;/testResources&gt;
        &lt;plugins&gt;
            &lt;!-- UTF-8のソースを正しくコンパイルしてもらうための設定 --&gt;
            &lt;plugin&gt;
                &lt;inherited&gt;true&lt;/inherited&gt;
                &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&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.7&lt;/source&gt;
                    &lt;target&gt;1.7&lt;/target&gt;
                    &lt;optimize&gt;true&lt;/optimize&gt;
                    &lt;debug&gt;true&lt;/debug&gt;
                    &lt;encoding&gt;UTF-8&lt;/encoding&gt;
                &lt;/configuration&gt;
            &lt;/plugin&gt;
            &lt;!-- WAR作成時にweb.xmlがなくてもOKにする --&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                &lt;artifactId&gt;maven-war-plugin&lt;/artifactId&gt;
                &lt;version&gt;2.6&lt;/version&gt;
                &lt;configuration&gt;
                    &lt;failOnMissingWebXml&gt;false&lt;/failOnMissingWebXml&gt;
                &lt;/configuration&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/build&gt;
&lt;/project&gt;</pre>
<p>さらに、Eclipseで開発できるようにするために、以下のコマンドも実行しておきます。</p>
<pre class="lang:sh decode:true" title="mvn eclipse">mvn eclipse:eclipse</pre>
<p>これでEclipseプロジェクトが作成されました。</p>
<h3>Eclipseプロジェクトのインポート</h3>
<p>作成したプロジェクトをEclipseにインポートして下さい。ただ、この時点ではAppTest.javaにコンパイルエラーがあるはずです。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/08/d0630b06ba57b5f3f3c55358a1974266.png"><img class="alignnone size-full wp-image-1391" src="https://cloudear.jp/blog/wp-content/uploads/2015/08/d0630b06ba57b5f3f3c55358a1974266.png" alt="スクリーンショット_2015-08-13_13_20_15" width="416" height="253" /></a></p>
<p>このファイル、今回は使わないので削除して下さい。</p>
<h3>JavaEEサーバ（GlassFish）起動クラスの作成</h3>
<p>JavaEEサーバをEclipseから起動出来るようにします。src/test/javaソースフォルダ下のsandboxパッケージに、JavaEEContainerStarterというクラスを次の通りに作成して下さい。コードの意味はコメントを参照して下さい。</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2015/08/43f2591f9e7d4a2dab6c9df857dd439b.png"><img class="alignnone size-full wp-image-1393" src="https://cloudear.jp/blog/wp-content/uploads/2015/08/43f2591f9e7d4a2dab6c9df857dd439b.png" alt="スクリーンショット_2015-08-13_13_30_20_1" width="353" height="161" /></a></p>
<pre class="lang:java decode:true" title="JavaEEContainerStarter.java">package sandbox;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;

import javax.sql.DataSource;

import org.glassfish.embeddable.GlassFish;
import org.glassfish.embeddable.GlassFishProperties;
import org.glassfish.embeddable.GlassFishRuntime;
import org.h2.jdbcx.JdbcDataSource;

public class JavaEEContainerStarter {
    /**
     * 当クラスのソースの参考ページURL. &lt;br&gt;
     * http://www.coppermine.jp/docs/programming/2013/12/glassfish-embedded-server.html
     */
    @SuppressWarnings("nls")
    public static void main(final String[] pArgs) throws Exception {
        final long s = System.currentTimeMillis();
        final GlassFishProperties properties = new GlassFishProperties();

        // HTTPは8081番ポート、HTTPSは8082番ポートでリッスン
        properties.setPort("http-listener", 8081);
        properties.setPort("https-listener", 8082);

        // サーバ起動
        final GlassFish glassfish = GlassFishRuntime.bootstrap().newGlassFish(properties);
        glassfish.start();

        // コネクションプール作成. 組み込みH2 Database Engineを利用する.
        final String connectionPoolName = "AppConnectionPool";
        glassfish.getCommandRunner().run("create-jdbc-connection-pool" //
                , "--datasourceclassname=" + JdbcDataSource.class.getName() //
                , "--restype=" + DataSource.class.getName() //
                , "--property", "url=jdbc\\:h2\\:./db/db" //
                , connectionPoolName //
                );

        // JDBCリソースとしてコネクションプールを、jdbc/Appという名前で登録する.
        glassfish.getCommandRunner().run("create-jdbc-resource" //
                , "--connectionpoolid", connectionPoolName //
                , "jdbc/App" //
        );

        // Webアプリを配備.
        glassfish.getDeployer().deploy( //
                new File("src/main/webapp") //
                , "--name=app" //
                , "--contextroot", "/");

        System.out.println("GlassFishサーバを起動しました.");
        System.out.println(System.currentTimeMillis() - s + " ms");

        // Enterを押せばサーバ停止.
        new BufferedReader(new InputStreamReader(System.in)).readLine();
        glassfish.stop();
        System.out.println("GlassFishサーバを停止.");
    }
}
</pre>
<p>このクラスが本エントリの大きなポイントです。通常、JavaEEサーバは別途インストールして起動、Eclipseで開発するためにアダプタを導入して・・・と面倒な手順を踏む必要がありますが、この方法だと起動は簡単かつスピーディ、環境構築に苦労はなしと良いこと尽くしです。</p>
<p>試しにこのクラスを起動してみて下さい。10秒以内には起動完了するはずです。</p>
<p>以上で開発環境構築は完了！これでJavaEEの全ての機能を使った開発が開始出来ます。びっくりするほど簡単ですね。</p>
<h2>次回予告</h2>
<p>次回はいよいよJavaEEを使ったWebアプリ開発の手順をご紹介します。JavaEEは機能が豊富な上に手軽に利用出来る点が利点です。この利点を活用してWebアプリを簡単高速に作成していきます。</p>
<p>お楽しみに。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1375</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>個人的によく使うVimテクニック5選</title>
		<link>https://cloudear.jp/blog/?p=1352</link>
		<comments>https://cloudear.jp/blog/?p=1352#comments</comments>
		<pubDate>Sun, 19 Jul 2015 13:22:07 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[エディタ]]></category>
		<category><![CDATA[プログラム]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=1352</guid>
		<description><![CDATA[みなさんこんにちは masa です。今回はエディタネタの中でも Vim テクニックを取り上げてみたいと思います。普段、コンパイラ系の言語を書く場合は IDE を使いますが、それ以外の言語やシェルスクリプトを書く場合は V [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんこんにちは masa です。今回はエディタネタの中でも Vim テクニックを取り上げてみたいと思います。普段、コンパイラ系の言語を書く場合は IDE を使いますが、それ以外の言語やシェルスクリプトを書く場合は Vim でちゃっちゃっとやることが多かったりします。</p>
<p><span id="more-1352"></span></p>
<p>今回はノーマルの Vim で使えるもので、個人的によく使うテクニックをご紹介。</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　ここからここまでコピー or 切り取りしたい</strong></span></p>
<p>なんといっても一番使う行コピーと行切り取りです。いえいえ <strong>5yy</strong> とか<strong> 10dd</strong> とかじゃないですよ！</p>
<p>5行など行数が少なければ目測で 5yy とかできますが、コピーしたい行数が 127行だったりしたら大変ですね。<br />
あまり Vim に慣れていない方は :set nu で行数を表示して、コピーしたい行を引き算してヤンクするというのを見掛けます。<br />
これは効率が悪いですし、計算違いで関係ない行までコピー or 切り取りしてしまう可能性もあります。</p>
<p>そんなときは以下を使いましょう。</p>
<pre class="theme:dark-terminal lang:default decode:true ">ここは1行目ですよ。    //この行でmsと打つ
ここは2行目ですよ。 
ここは3行目ですよ。
ここは4行目ですよ。
（中略）
ここは126行目ですよ。
ここは127行目ですよ。  //この行でy'sもしくはd'sと打つ</pre>
<p>上の例ではコピーをしたい始めの行でmsと打ち、コピー終わりの行でy&#8217;sと打つと、1~127行がヤンクされます。（d&#8217;sだとヤンクではなく切り取りになります）</p>
<p>これだと始点と終点でコマンドを打つだけなので間違いもないし簡単ですね。知らなかった方はレッツトライ！</p>
<p>&nbsp;</p>
<p><span class="hcss1" style="font-size: 14pt;"><strong>　大文字と小文字を切り替える or どちらかに統一する</strong></span></p>
<p>シェルスクリプトの変数や PHP の定数などは大文字で書くのが慣習ですが、そうなっていないものを直したりするときに使えます。</p>
<p>選択した文字を大文字⇔小文字にトグルさせる場合は~（チルダ）で、選択した文字をすべて小文字に統一したい場合はu（小文字）、大文字に統一したい場合はU（大文字）でできます。</p>
<pre class="theme:dark-terminal lang:default decode:true ">//まずは ctrl+v で対象文字を選択します

this is komoji   //左の文字すべてを選択した状態でUと打つと大文字へ変換されます

THIS IS OMOJI    //左の文字すべてを選択した状態でuと打つと大文字へ変換されます

ThIs Is KoNGoU   //左の文字すべてを選択した状態で~を打つとすべての大文字と小文字が反転します</pre>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 14pt;">　一文字づつもしくは複数文字をリプレイスする</span></strong></p>
<p>わざわざ挿入モードに入らずに1文字だけ修正したいとか、この単語だけ修正したいとかあると思いますが、その際はコマンドモードで以下を実施してください。</p>
<pre class="theme:dark-terminal lang:default decode:true ">understanf   //fの上にカーソルを移動してr、そのまま変換したい文字(d)を入力

disk  //dの上にカーソルを移動してR、そのまま変換したい文字を打ち、最後にESC</pre>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 18.6666660308838px;">　マクロを組んで同じ操作をワンキーで繰り返す</span></strong></p>
<p>なにやら難しい感じですが、めちゃくちゃ簡単です。 Vim では操作を記録して実行するマクロ機能がありますが、それを.（ドット）で繰り返すだけです。</p>
<pre class="theme:dark-terminal lang:default decode:true ">//qaと打ち記録を開始　qの後ろは任意の覚えやすい文字で結構です

This is Macro Test!  //左のように記録したい操作をやりきります　
    1234567          //今回は簡単ですが3行の文字入力をしました
  Test is End

//qと打ち記録を停止します

//@aと打つと1回マクロを実施しますが、.（ドット）だけでも実施できます。

This is Macro Test!
    1234567
  Test is End

//回数指定でマクロを実行したい場合は7@aと押すと7回実行できます</pre>
<p>上の例だとコピーしたほうが早いですが、複雑な操作を再実行したい場合はマクロのほうが良いですね。</p>
<p>&nbsp;</p>
<p><strong><span class="hcss1" style="font-size: 18.6666660308838px;">　大文字小文字に関係なく検索</span></strong></p>
<p>地味ですが検索時は必須ですね。わざわざ大文字で検索して、次に小文字で検索してとやっている人を見掛けました。検索文字列の後ろに\cとつけるだけでOKですw</p>
<pre class="theme:dark-terminal lang:default decode:true ">banana BaNANA Apple
Grape Banana ORANGE
orange PEAR peAR GRAPE

//（スラッシュ）を押して検索文字列banana\cと打つとすべてのバナナが引っ掛かります</pre>
<p>&nbsp;</p>
<p>いかがでしたか？今回はノーマルの Vim で使えるテクニックをご紹介しました。みなさんの作業効率を高める一助にしていただければ幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=1352</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sublime Text で PHP 実行する方法</title>
		<link>https://cloudear.jp/blog/?p=353</link>
		<comments>https://cloudear.jp/blog/?p=353#comments</comments>
		<pubDate>Sun, 21 Dec 2014 03:17:02 +0000</pubDate>
		<dc:creator><![CDATA[masa]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[エディタ]]></category>

		<guid isPermaLink="false">https://cloudear.jp/blog/?p=353</guid>
		<description><![CDATA[みなさんはローカル開発環境でエディタは何を使っていますか？私は Java の場合は Eclipse で、PHP の場合は『Sublime Text2/3』を使っています。 Sublime Text を選んだ理由は4つ 右 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>みなさんはローカル開発環境でエディタは何を使っていますか？私は Java の場合は Eclipse で、PHP の場合は『Sublime Text2/3』を使っています。<br />
<span id="more-353"></span><strong><br />
Sublime Text を選んだ理由は4つ</strong></p>
<ol>
<li>右のミニマップが便利</li>
<li>動作が軽い</li>
<li>vim 化が簡単</li>
<li>GUI のデザインがイケてる</li>
</ol>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2014/12/sublime_demo.bmp"><img class="alignnone size-full wp-image-372" src="https://cloudear.jp/blog/wp-content/uploads/2014/12/sublime_demo.bmp" alt="sublime_demo" width="825" height="523" /></a></p>
<p>PHP みたいにコンパイルが必要ない言語は、サーバー上で vim を使ってちゃちゃっと書いちゃってもいいんですが、案件によってはサーバーにログイン出来ないこともあるしねー</p>
<p>今日はそんな Sublime Text で PHP を書いた後にそのまま実行して結果をコンソールに出す方法をご紹介。</p>
<p><strong>1.　何はともあれ PC に PHP をインストールする</strong></p>
<p><a href="http://windows.php.net/download/#php-5.6-nts-VC11-x86">PHP5.6 ダウンロードサイト</a> へアクセスして、32bit版 or 64bit版をお使いの PC の環境に合わせてダウンロード</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2014/12/php_dl.bmp"><img class="alignnone size-full wp-image-378" src="https://cloudear.jp/blog/wp-content/uploads/2014/12/php_dl.bmp" alt="php_dl" width="927" height="756" /></a></p>
<p>Zip ファイルをダウンロードし終わったら、解凍してフォルダ名を「php」に変えて、Cドライブ直下に置きましょう↓</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2014/12/folder_php.bmp"><img class="alignnone size-full wp-image-383" src="https://cloudear.jp/blog/wp-content/uploads/2014/12/folder_php.bmp" alt="folder_php" width="591" height="189" /></a></p>
<p>&nbsp;</p>
<p><strong>2. Sublime Text から 以下の項目を選択</strong></p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2014/12/newbuild.bmp"><img class="alignnone size-full wp-image-384" src="https://cloudear.jp/blog/wp-content/uploads/2014/12/newbuild.bmp" alt="newbuild" width="765" height="349" /></a></p>
<p>以下のコードを書いて、下図のように「PHP.sublime-build」という名前で保存</p>
<pre class="lang:default decode:true">{
    "path": "C:\\php",
    "cmd": ["php", "-f", "$file"],
    "selector": "source.php",
    "encoding": "UTF-8"
}</pre>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2014/12/php_setting.bmp"><img class="alignnone size-full wp-image-385" src="https://cloudear.jp/blog/wp-content/uploads/2014/12/php_setting.bmp" alt="php_setting" width="811" height="661" /></a></p>
<p>そうすると、以下のように PHP がビルドで選べるようになります</p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2014/12/php_build.bmp"><img class="alignnone size-full wp-image-387" src="https://cloudear.jp/blog/wp-content/uploads/2014/12/php_build.bmp" alt="php_build" width="801" height="397" /></a></p>
<p>&nbsp;</p>
<p><strong>3. PHP コードを書いて 『Ctrl + B』 を押すか、メニューの「Tools &gt; Build」を選択</strong></p>
<p><a href="https://cloudear.jp/blog/wp-content/uploads/2014/12/res_php.bmp"><img class="alignnone size-full wp-image-388" src="https://cloudear.jp/blog/wp-content/uploads/2014/12/res_php.bmp" alt="res_php" width="625" height="361" /></a></p>
<p>上記のようにPHP が実行されて、結果が下のコンソールにでてきます</p>
<p>&nbsp;</p>
<p>いかがでしたか？<br />
ローカルでそのまま PHP が実行出来るとデバッグがはかどりますよね。<br />
私はいつも vim 化して使っています。Sublime Text は様々なプラグインがありますのでみなさんもカスタマイズしてみてください。</p>
]]></content:encoded>
			<wfw:commentRss>https://cloudear.jp/blog/?feed=rss2&#038;p=353</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
