本日は Windows Azure Advent Calendar9日目の記事だ。
WebLogic Server を Windows Azure上で利用するための情報をまとめて来たが、今回は WebLogic Server から SQL Database に JPA(JavaEE標準の O/R マッパー)を利用して接続する手順もまとめた。以下の記事を未参照の方は、まずは以下の記事を通読して欲しい。
- WebLogic Server 12c を Windows Azureの Windows Server 2012 R2 で動かしてみる id:waritohutsu:20131130:1385804228
- Eclipseを使った JavaEE6 環境(主にWebLogic Server)を簡単に用意して開発してみる on Windows Azureid:waritohutsu:20131206:1386320343
今回紹介する内容は、上記の記事を利用して構築した環境が必須となる点に注意頂きたい。
WebLogic Server で SQL Database を設定するためのアレコレ
ざっくりとは以下の手順が必要となる。
上記をスライドにまとめたので参照して欲しい。
EAR アプリの開発
上記だけではソースコード部分が分かりにくいところもあると思うので、以下に実際に利用したソースコードを記載する。
WAR側のコード
- index.xhtml
<!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:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"><f:loadBundle basename="resources.application" var="msg" /><head><title><h:outputText value="#{msg.welcomeTitle}" /></title></head><body><h3><h:outputText value="#{msg.welcomeHeading}" /></h3><p><h:outputText value="#{msg.welcomeMessage}" /></p><h:form><h:dataTable value="#{viewDto.erogeList}" var="eroge"border="1"><h:column><f:facet name="タイトル"></f:facet><h:outputText value="#{eroge.name}" /></h:column><h:column><f:facet name="価格"></f:facet><h:outputText value="#{eroge.price}円" /></h:column><h:column><f:facet name="コメント"></f:facet><h:outputText value="#{eroge.comment}" /></h:column></h:dataTable><h:commandButton action="#{indexAction.doAction()}"value="アクション実行" /></h:form></body></html>
- IndexAction.java
package org.mydomain.action; import javax.inject.Inject; import javax.inject.Named; import org.mydomain.dto.ViewDto; import org.mydomain.logic.IndexLogic; @Namedpublicclass IndexAction { @Inject IndexLogic indexLogic; @Inject ViewDto viewDto; public String doAction() { String result = "0"; System.out.println("!!!! do action"); viewDto.setErogeList(indexLogic.doLogic()); return result; } }
- ViewDto.java
package org.mydomain.dto; import java.io.Serializable; import java.util.List; import javax.enterprise.context.ConversationScoped; import javax.inject.Named; import org.mydomain.entity.Eroge; @Named@ConversationScopedpublicclass ViewDto implements Serializable { private List<Eroge> erogeList; public List<Eroge> getErogeList() { return erogeList; } publicvoid setErogeList(List<Eroge> erogeList) { this.erogeList = erogeList; } }
EJB側のコード
- META-INF/persistence.xml
<?xml version="1.0" encoding="UTF-8"?><persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"version="1.0"><persistence-unit name="em"transaction-type="JTA"><provider>org.eclipse.persistence.jpa.PersistenceProvider</provider><jta-data-source>JDBC_Data_Source</jta-data-source></persistence-unit></persistence>
- IndexLogic.java
package org.mydomain.logic; import java.util.List; import javax.ejb.Stateless; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.mydomain.entity.Eroge; @Named@Statelesspublicclass IndexLogic { @PersistenceContextprivate EntityManager em; public List<Eroge> doLogic() { System.out.println("!!!! do logic"); List<Eroge> resultList = em.createQuery("select k from Eroge k", Eroge.class).getResultList(); return resultList; } }
- Eroge.java
package org.mydomain.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity@Table(schema = "dbo", name = "Eroge") publicclass Eroge implements Serializable { @Id@Column(name = "Id") privateint id; @Column(name = "Price") privateint price; @Column(name = "Name") private String name; publicint getPrice() { return price; } publicvoid setPrice(int price) { this.price = price; } publicint getId() { return id; } publicvoid setId(int id) { this.id = id; } public String getName() { return name; } publicvoid setName(String name) { this.name = name; } public String getComment() { return comment; } publicvoid setComment(String comment) { this.comment = comment; } @Column(name = "Comment") private String comment; }