PicketLinkのデータベース対応サンプルを作成しました

Java EEの認証フレームワークであるPicketLinkについてこのブログで何度か紹介してきましたが、今回はデータベースに対応したユーザ管理のCRUDアプリケーションのサンプルを作成してみました。

picketlink-database-example

実行環境
Windows 7
JDK 1.8.0
Eclipse Mars.1
JBoss Tools 4.3.0.Final

サーバ
WildFly 9.0.1.Final
MySQL Community Server 5.6.27

ライブラリ
PicketLink 2.7.0.Final
PrimeFaces 5.3

サンプルのソースコード
https://github.com/subsonicsystems/picketlink-database-example-ja

事前準備 – MySQL
picketlink_database_exampleという名前のスキーマを作成します。データベースユーザを作成し、picketlink_database_exampleスキーマに対する権限を与えます。

テーブルは、アプリケーションのデプロイ時に自動作成されます。

事前準備 – WildFly
データベースドライバをWildFlyに設定します。設定方法は、次の記事を参照してください。
http://subsonic.info/ja/2015/08/19/subsonic-airlines-wildflyへjdbcドライバをインストール/

それから、データソースを設定します。データソースの設定例は、次の通りです。パラメータについては、環境に応じて変更してください。

<datasource jndi-name="java:jboss/datasources/picketlink-database-example-ds" pool-name="picketlink-database-example-ds" enabled="true">
    <connection-url>jdbc:mysql://localhost:3306/picketlink_database_example</connection-url>
    <driver>mysql</driver>
    <security>
        <user-name>admin</user-name>
        <password>admin</password>
    </security>
    <validation>
        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
        <background-validation>true</background-validation>
        <background-validation-millis>60000</background-validation-millis>
        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
    </validation>
</datasource>

設定方法は、次の記事を参照してください。
http://subsonic.info/ja/2015/08/21/subsonic-airlines-wildflyへデータソースを設定/

ライブラリ
サンプルではApache Mavenを使っています。

使用ライブラリは次の通りです。
PicketLink
picketlink-2.7.0.Final.jar
picketlink-idm-simple-schema-2.7.0.Final.jar

PrimeFaces
primefaces-5.3.jar
bootstrap-1.0.10.jar

Apache Commons Lang
commons-lang3-3.4.jar

persistence.xml
/WEB-INF/classes/META-INF/persistence.xmlは、次の通りです。jta-data-sourceの値は、使用環境に合わせて変更してください。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="primary">
        <jta-data-source>java:jboss/datasources/picketlink-database-example-ds</jta-data-source>
        <class>org.picketlink.idm.jpa.model.sample.simple.AttributedTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.AccountTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.RoleTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.GroupTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.IdentityTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.RelationshipTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.RelationshipIdentityTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.PartitionTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.PasswordCredentialTypeEntity</class>
        <class>org.picketlink.idm.jpa.model.sample.simple.AttributeTypeEntity</class>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
        </properties>
    </persistence-unit>
</persistence>

propertyのhibernate.hbm2ddl.autoをcreateとしているため、アプリケーションのデプロイ時にデータベーステーブルが自動作成されます。また、このままではWildFlyを再起動するとデータベーステーブルのデータが削除されるので、データベーステーブルが作成された後にこのpropertyをコメントアウトしてください。