WildFly: JBoss Forgeによるアプリケーション開発
環境
- Mac OSX 10.9
- Eclipse Luna
- Red Hat JBoss Developer Studio (Luna) 8.0.0.Beta3
- Eclipse Market Placeからインストール
プロジェクト作成
Forge Consoleを開きます
- Show View → Forge Console
- 緑の▶ボタンを押して起動
- Forge 2.7.2.Finalを起動 (1.4.4.Finalではない)
新規プロジェクトを作成します
- プロジェクト名: forge-proj
- パッケージ名: com.mythosil.forge
[workspace]$ project-new --named forge-proj --topLevelPackage com.mythosil.forge --type war ***SUCCESS*** Project named 'forge-proj' has been created. [forge-proj]$ ls pom.xml src target
forgeのプロンプトがディレクトリ名(=プロジェクト名)になっています
エンティティ作成
- エンティティクラス名: Person
[forge-proj]$ jpa-new-entity --named Person ***SUCCESS*** Persistence (JPA) is installed. ***SUCCESS*** Entity com.mythosil.forge.model.Person created [Person.java]$ ls [fields] id::java.lang.Long version::int [methods] equals(java.lang.Object)::boolean getId()::java.lang.Long getVersion()::int hashCode()::int setId(java.lang.Long)::void setVersion(int)::void toString()::java.lang.String
jap-new-entityコマンドでは、エンティティクラスの作成だけでなく、persistence.xmlの作成やpom.xmlの修正(依存追加)を行ってくれます
Java EEのバージョンは6.0、JPAのバージョンは2.0で作成されます
(Java EE 7に変更したければ手作業で書き換えるしかない?)
<dependencyManagement> <dependencies> <dependency> <groupId>org.jboss.spec</groupId> <artifactId>jboss-javaee-6.0</artifactId> <version>3.0.2.Final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <scope>provided</scope> </dependency> </dependencies>
データソースとしてはH2が利用されます
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="forge-proj-persistence-unit" transaction-type="JTA"> <description>Forge Persistence Unit</description> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.transaction.flush_before_completion" value="true"/> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> </properties> </persistence-unit> </persistence>
エンティティにフィールド追加
- フィールド名: name
- 型: String
- 長さ: 50
[Person.java]$ jpa-new-field --named name --type String --length 50 ***SUCCESS*** Field name created
RESTエンドポイント作成
Personエンティティを元に作成してみます
(Eclipse上で実行するとエラーが出る場合は、CLIで試してみて下さい)
[Person.java]$ rest-generate-endpoints-from-entities --targets com.mythosil.forge.model.Person ***SUCCESS*** JAX-RS has been installed. ***SUCCESS*** Endpoint created
この際、RESTエンドポイントクラス作成と同時に、Personクラスに@XmlRootElementアノテーションが付加されます
また、エンティティ作成時と同様、pom.xmlが自動で修正されます
<dependency> <groupId>org.jboss.spec.javax.servlet</groupId> <artifactId>jboss-servlet-api_3.0_spec</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.spec.javax.ws.rs</groupId> <artifactId>jboss-jaxrs-api_1.1_spec</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.jboss.spec.javax.ejb</groupId> <artifactId>jboss-ejb-api_3.1_spec</artifactId> <scope>provided</scope> </dependency>
ビルド
[PersonEndpoint.java]$ build ***SUCCESS*** Build Success
デプロイ
jboss-cli.shを利用してデプロイします
(wildflyは事前に起動しておく)
$ cd /path/to/forge-proj $ $JBOSS_HOME/bin/jboss-cli.sh -c --command="deploy target/forge-proj-1.0.0-SNAPSHOT.war"
実行
$ curl -XPOST 'http://localhost:8080/forge-proj-1.0.0-SNAPSHOT/rest/people' \ -d '{"name":"my name"}' \ -H "Content-Type: application/json" $ curl 'http://localhost:8080/forge-proj-1.0.0-SNAPSHOT/rest/people/1' {"id":1,"version":0,"name":"my name"}