EclipseからGlassFishを起動して、ServletとEJBが動くとこまでやる。
環境
やったこと
Eclipseからglassfish起動する
まず、ServersビューからGlassFishサーバを追加できるようにするために、GlassFish Toolsプラグインをインストールする。Help -> Eclipse Marketplaceを選択して、glassfishとかで検索する。そのあと、使ってるEclipseのバージョンに合わせたプラグインをインストールする。ここではKeplerなので、for Keplerを選ぶ。
Serversビューから新しいServer設定を追加する。今回は4.0を使うので、そちらを選ぶ。
GlassFish Server Directoryには%GLASSFISH_ROOT%\glassfishを指定する。
これで起動させて、http://localhost:8080/ で初期ページが見れたり、http://localhost:4848 で管理コンソールが見れたりすればOK
Mavenでプロジェクトを作る
ぐぐってみると、archetypeはとりあえずwebapp-javaee7を使えばいいらしいことが分かる。
で、いま使ってるEclipseのデフォルトではソレが出てこない。ので、まずArchetype Catalogを追加する。やり方はJavaEE7(GlassFish4.0)のEclipse4.3(Kepler)におけるMaven(M2E)連携 | あらぶるトラブル を参考にしました。まず、Window -> Preferences -> Maven -> Archtypes を選ぶ。
Add Remote Catalogを押して、Catalog Fileに http://repo1.maven.org/maven2/archetype-catalog.xml と入力して、Vefiryを押す。
準備できたのでNew -> Maven Projectからプロジェクトを作っていく。Select an Archtypeでwebapp-javaee7を選ぶ。
Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-dependency-plugin:2.6:copy (execution: default, phase: validate)
JavaEE7(GlassFish4.0)のEclipse4.3(Kepler)におけるMaven(M2E)連携 | あらぶるトラブルによるとPermanently mark goal copy in pom.xml as ignored in Eclipse build.のクイックフィックスを選べば良い、とのこと。
Servletうごかす
環境が出来たので、とりあえずはServletを作ってみる。
package glassfish4test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/hoge") public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("hoge get"); } }
http://localhost:8080/glassfish4test/hoge でブラウザにhoge getと表示されればOK
EJBうごかす
Wizardがあるのでそっから作る。New -> EJBでSession Beanを選ぶ。
で、クラスが生成されるので、そこにいっこ適当なメソッドを追加する。
package glassfish4test; import java.util.Calendar; import javax.ejb.LocalBean; import javax.ejb.Stateless; /** * Session Bean implementation class TestEJB */ @Stateless @LocalBean public class TestEJB { /** * Default constructor. */ public TestEJB() { // TODO Auto-generated constructor stub } public String getHogeMessage() { return Calendar.getInstance().getTime() + " hoge"; } }
さっき作ったServletをちょっと修正する。TestEJBをDIされるようにして、doGetの中でEJBのメソッドを呼ぶようにする。
@WebServlet("/hoge") public class TestServlet extends HttpServlet { @Inject private TestEJB testEJB; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("hoge get:" + testEJB.getHogeMessage()); } }
これでブラウザから http://localhost:8080/glassfish4test/hoge にアクセスして適当な文字列が表示されればOK