2009年11月9日月曜日

JSF2.0/jBPM4.1/Maven2/WTP/Galileo

JSF2.0 と JBoss jBPM の併用。

Eclipse 3.5 上 で、WTP と m2eclipse を使ってやってみる。試しに、jBPM のプロセス定義をJSF 2.0の表で表示してみる。

■ 使用プロダクト

  • Eclipse 3.5 Galileo
  • Maven 2.2.1
  • WTP 3.1.1
  • MySQL 5.0.45
  • JSF 2.0.1
  • jBPM 4.1

■ プロジェクトの作成

  • 名前:jsf-jbpm2 で Dynamic Web Projectを作成。
  • プロジェクトのコンテキストメニューから [Maven]->[Enable Dependency Management]を実行
  • pom.xml の dependencies に以下を追記
    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.10</version>
    </dependency>
    <dependency>
       <groupId>org.jbpm.jbpm4</groupId>
       <artifactId>jbpm-jboss4</artifactId>
       <version>4.1</version>
       <exclusions>
          <exclusion>
             <groupId>juel</groupId>
             <artifactId>juel</artifactId>
          </exclusion>
       </exclusions>
    </dependency>
    <dependency>
       <groupId>javax.faces</groupId>
       <artifactId>jsf-api</artifactId>
       <version>2.0.1-FCS</version>
    </dependency>
    <dependency>
       <groupId>javax.faces</groupId>
       <artifactId>jsf-impl</artifactId>
       <version>2.0.1-FCS</version>
    </dependency>
  • もし、なんかの jar が 無いとか言われたら repositories に、例えば以下の URL とかを追加するといいかもしれない。ダメかもしれない。 http://repository.jboss.com/maven2/
  • プロジェクトの Properties の[Java EE Module Dependencies] で、Maven Dependencies にチェックを入れる

■ JSF 2.0 の確認

  • Servers ビューで jsf-jbpm2 プロジェクトを追加する
  • WebContent 直下に以下の test.xhtml を置く
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://java.sun.com/jsf/html">
    <h:body>
       <h:outputLabel for="text1">
          <h:outputText id="text1" value="Hello, World!" />
       </h:outputLabel>
    </h:body>
    </html>
    
  • Servers ビューから Tomcat v6.0 を起動する
  • 適当なブラウザで、http://localhost:8080/jsf-jbpm2/test.faces を見てみる
  • ”Hello, World!”が表示されて、ソースにも怪しいところが無ければ成功。
■ jBPMの確認

※ 以下、すでにプロセス定義がいくつか登録されている前提

  • ソースフォルダ resources を新規作成する
  • resources 下で、以下のファイルを作成する
    • jbpm.cfg.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <jbpm-configuration>
         <import resource="jbpm.default.cfg.xml" />
         <import resource="jbpm.jpdl.cfg.xml" />
         <import resource="jbpm.tx.hibernate.cfg.xml" />
         <import resource="jbpm.identity.cfg.xml" />
      </jbpm-configuration>
      
    • jbpm.hibernate.cfg.xml (MySQL サービスが立ち上がっている前提。データベースは適当でOK。)
      <?xml version="1.0" encoding="utf-8"?>
      
      <!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
      
      <hibernate-configuration>
        <session-factory>
          <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
          <property name="hibernate.connection.url">jdbc:mysql://localhost/jbpm</property>
          <property name="hibernate.connection.username"></property>
          <property name="hibernate.connection.password"></property>
          <property name="hibernate.hbm2ddl.auto">verify</property>
          <property name="hibernate.format_sql">true</property>
      
          <mapping resource="jbpm.repository.hbm.xml" />
          <mapping resource="jbpm.execution.hbm.xml" />
          <mapping resource="jbpm.history.hbm.xml" />
          <mapping resource="jbpm.task.hbm.xml" />
          <mapping resource="jbpm.identity.hbm.xml" />
      
        </session-factory>
      </hibernate-configuration>
      
    • log4j.properties を適当に書く
      log4j.rootLogger=DEBUG, CONSOLE
      log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
      log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
      log4j.appender.CONSOLE.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %C{1} : %m%n
      log4j.logger.org.jbpm=DEBUG
      log4j.logger.org.hibernate=INFO
      
  • ソースフォルダ src を新規作成する
  • 以下のクラスを src 下に作成する
    package mypackage;
    
    import 略
    
    @ManagedBean(name="definitionList")
    public class ProcessDefinitions {
       public List<ProcessDefinition> getItems() {
          ProcessEngine engine = Configuration.getProcessEngine();
          RepositoryService rs = engine.get(RepositoryService.class);
    
          return rs.createProcessDefinitionQuery().list();
       }
    }
  • resources 下に以下のようにmessages.properties を作成する
    idLabel=ID
    keyLabel=KEY
    nameLabel=NAME
    versionLabel=VERSION
    
  • WebContent 下に、以下のようにprocessDefinitions.xhtmlを作成する。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
       <title>rules</title>
       <style>
       .list-background{border-collapse:collapse;border:1px solid grey;}
       .list-header{background-color:Plum;border:1px solid grey;width:96px;}
       .col-center{border-right:1px solid grey;}
       .row-odd{background-color:moccasin;}
       .row-even{background-color:mistyRose;}
       </style>
    </h:head>
    <h:body>
       <f:loadBundle basename="messages" var="msg" />
       <h:dataTable id="processDefinitionList"
          columnClasses="col-center,col-center,col-center"
          headerClass="list-header" rowClasses="row-odd,row-even"
          styleClass="list-background" value="#{definitionList.items}" 
          var="definition"
          cellpadding="0"
          cellspacing="0">
          <h:column>
             <f:facet name="header">#{msg.idLabel}</f:facet>
             #{definition.id}
          </h:column>
          <h:column>
             <f:facet name="header">#{msg.keyLabel}</f:facet>
             #{definition.key}
          </h:column>
          <h:column>
             <f:facet name="header">#{msg.nameLabel}</f:facet>
             #{definition.name}
          </h:column>
          <h:column>
             <f:facet name="header">#{msg.versionLabel}</f:facet>
             #{definition.version}
          </h:column>
       </h:dataTable>
    </h:body>
    </html>
    

・以下のように内容が表示されれば、JSF と jBPM の両方がちゃんと使えてる事になる。

0 件のコメント:

コメントを投稿