Seam on Jetty でさくさく開発
JBoss ToolsのSeam Web Projectを使えば簡単にIncremental Hot Deployが可能な構成で開発できるのだが、デフォルト状態のJBossだと起動がもっさりしててちょっとやだ。
どうせHot DeployでEJB使えないし開発環境用なんだから、もっと軽量のサーバでいいじゃんと思ってたところ、takezoeさんのところで紹介されていたrun-Jetty-runでJetty使うと幸せになれそうと思って試してみた。
- 今回はJBossTools2.0.1.GAで試してます。Seamのバージョンも2.0.1.GAです。
- JBossTools、Seam両方とも新しいバージョンが出てますが、たぶんそんなに変わっていないと思う。
以下、手順です。
環境の準備〜プロジェクトの作成・設定
- run-jetty-runをEclipseにインストールします。ここで配布されています。サイトにEclipseの更新サイトがあるので、普通にインストールしてEclipseを再起動します。
- Seam Web Projectのウィザードでプロジェクトを新規作成します。
- 注意点は、WARプロジェクトとするくらい
- 設定ファイルをJetty用に変更します。
<persistence-unit name="seamOnJetty" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" /> <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" /> <property name="hibernate.connection.username" value="sa" /> <property name="hibernate.connection.password" value="" /> <property name="hibernate.connection.url" value="jdbc:hsqldb:." /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> </properties> </persistence-unit>
<?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:persistence="http://jboss.com/products/seam/persistence" xmlns:drools="http://jboss.com/products/seam/drools" xmlns:bpm="http://jboss.com/products/seam/bpm" xmlns:security="http://jboss.com/products/seam/security" xmlns:mail="http://jboss.com/products/seam/mail" xmlns:transaction="http://jboss.com/products/seam/transaction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.0.xsd http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.0.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.0.xsd http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd"> <transaction:entity-transaction entity-manager="#{entityManager}"/> (以下、省略)
Jettyの実行設定
- プロジェクトを選択し、右クリック->[Run As]->[Open Run Dialog]を選択する。
- Jetty Webappを選択し、右クリック->[New]を選択する。
- Jettyの起動設定ページが開くので、[Context]に適当なコンテキストルートを入力、[WebApp]にWEB-INFフォルダを格納しているフォルダを指定する(デフォルトの設定でSeam Web Projectを作成している場合は、WebContentです)。
- 次に、Classpathタブをクリックしてページを開きます。ここでちょっとクラスパスの設定で工夫が必要となります。
- User Entriesに登録されている自分のプロジェクトを選択し、Removeボタンをクリックして削除します。
- User Entriesを選択し、Advancedボタンをクリックします。
- 開いたダイアログで、Add Libraryを選択してOKボタンをクリックする。
- Server Runtimeを選択してNextボタンをクリックする。
- JBoss 4.2 Runtimeを選択してFinishボタンをクリックする。すると、User EntriesにJBossのランタイムが追加されます。
- 再び、User Entriesを選択し、Advancedボタンをクリックします。
- Add Folderを選択してOKボタンをクリックする。
- プロジェクト名/build/classesを選択し、OKボタンをクリックします。これでUser Entriesにclassesフォルダが追加されます。ここまでの設定で以下のようになっているはず。
- 以上で設定完了なので、Applyボタンをクリックして保存します。
Jettyの実行
- 前の設定画面でそのままRunボタンをクリックすると、Jettyが起動します。コンソールに以下のように出れば起動完了です! 私のMacBookだとSeamの初期化も含めて7秒くらいで起動完了とかなり速い!!
(ちなみにJBoss4.2.2.GAのdefaultサーバだと、27s:120msでした。かなり違うね。。。)
2008-06-05 01:51:38.895::INFO: Logging to STDERR via org.mortbay.log.StdErrLog 2008-06-05 01:51:38.05::INFO: jetty-6.1.6 2008/06/05 1:51:43 com.sun.faces.config.ConfigureListener contextInitialized 情報: Initializing Sun's JavaServer Faces implementation (1.2_04-b16-p02) for context '/seamOnJetty' 2008/06/05 1:51:43 com.sun.faces.spi.InjectionProviderFactory createInstance 情報: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed. 2008-06-05 01:51:44.661::INFO: Started SelectChannelConnector@0.0.0.0:8080
もちろん、このJetty上でSeamのIncremental Hot Deployも利用可能です。