Struts2.3+S2JDBC+Flex4を使ってORACLEアクセス - 準備編
Struts2.3+S2JDBC+Flex4のセットアップ方法です。
Flexは強力なRIA(Rich Internet Application)の開発フレームワーク です。Webアプリの構築においては、Javaとの相性がよく、開発言語 ActionScript3 が Java と似ていることから習得も容易です。
ここでは、とにかく動く環境を作ることが目的なので、Strtus2、Seasar、Flex4 の細かな説明は省きます。ORACLEへの接続は次回ご紹介します。
前回までの「Struts2.3+S2JDBCのインストールからDBアクセス(ORACLE)まで」で構築した環境を使って説明します。
Sponsored Links
目次
Flex4の開発環境を準備する
まずは開発環境を準備しましょう。こちらのページを参考に Flex4 を Eclipse プラグインとしてインストールしてください。
Flex4 を Eclipse プラグインとしてインストールできたら、Eclipse 上でプロジェクトを右クリックします。「プロジェクトタイプを追加または変更」-「Flex プロジェクトタイプを追加」を選択します。
「デフォルトの SDK を使用する」にチェックを入れ、次へボタンを押下します。
特定の SDK を利用する場合は「特定の SDK を使用する」にチェックを入れて SDK を選択してください。
アプリケーションサーバーの種類を選択します。本来は アプリサーバーに Java、リモートオブジェクトアクセスツールに BlazeDS を選択 したいところですが、後で設定するのでここでは「なし/その他」を選択します。開発中のビルド先である出力フォルダーは任意に変更可能です。特に変更がなければこのまま終了ボタンを押下します。
プロジェクトの生成が終わると以下のように、ディレクトリが増えます。
/p>
よく見るとプロジェクトにエラーがあるようですね。「HTML ラッパーを作成できません・・・」と出ています。メッセージの通り右クリックします。
サブメニューに「HTML テンプレートの再作成」が出てきますので押下します。
「html-template」というディレクトリが作成され、エラーがなくなりました。
「html-template」とは、bin-debug やリリースビルド先である bin-release にビルドされる html テンプレートです。bin-debug や bin-release の html を修正しても、ビルドの度に html-template の内容で上書きされます。どうしても変更が必要な場合は、html-template 内の index.template.html などを修正できます。
Sponsored Links
Flex4プロジェクトのメインソースフォルダー変更
それでは開発用に設定を変更していきます。まず、プロジェクトの「プロパティ」を開き、右メニューから「Flex ビルドパス」を選択します。
「メインソースフォルダー」を src から flexsrc に変更してOKボタンを押下します。
src 内にある「Main.mxml」は削除してしまいましょう。
Flex4+Seasarの環境構築
Flex4+Seasarを利用するため、BlazeDS, S2BlazeDS を追加します。
BlazeDS とは Action Message Format(AMF) 3 ベースのリモーティングやメッセージングを実装する技術です。BlazeDS を導入することでレスポンスのよい RIA(Rich Internet Application) が実現できます。
まずはこちらのページから BlazeDS をダウンロードしてください。
ダウンロードした zip ファイル内から以下のライブラリをコピーします。
- commons-httpclient-3.0.1.jar
- flex-messaging-common.jar
- flex-messaging-core.jar
- flex-messaging-opt.jar
- flex-messaging-proxy.jar
- flex-messaging-remoting.jar
これをプロジェクト strtus2-s2jdbc 内「src」-「main」-「webapp」-「WEB-INF」-「lib」の中にペーストします。
次は S2BlazeDS です。
S2BlazeDS とは、BlazeDS というミドルウェアを使って Flex/AIR と Seasar2 を連携させるためのフレームワークです。 Seasar2 と S2BlazeDS を組み合わせることで、余計な設定を省き、スムーズに開発を進めることができます。
こちらのページから S2BlazeDS をダウンロードしてください。
ダウンロードした zip ファイル内から以下のライブラリをコピーします。
- blazeds-common-3.2.0.3978.jar
- blazeds-core-3.2.0.3978.jar
- blazeds-opt-3.2.0.3978.jar
- blazeds-proxy-3.2.0.3978.jar
- blazeds-remoting-3.2.0.3978.jar
- s2blazeds-1.0.2.jar
これをプロジェクト strtus2-s2jdbc 内「src」-「main」-「webapp」-「WEB-INF」-「lib」の中にペーストします。
その他にも以下のライブラリをダウンロードしておきます。
同じように strtus2-s2jdbc 内「src」-「main」-「webapp」-「WEB-INF」-「lib」の中にペーストします。
コピーが終わったら、プロジェクトのプロパティから「Java のビルド・パス」を選択し、Jar の追加をおこないます。
ちょっと画像が長いですが lib ディレクトリ内はこうなっています。
Sponsored Links
Flex の設定をWeb.xmlへ追記
Flex の設定を Web.xml に追記します。追加するタグは listener, servlet, servlet-mapping です。
<listener> <listener-class>flex.messaging.HttpFlexSession</listener-class> </listener> <servlet> <servlet-name>MessageBrokerServlet</servlet-name> <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class> <init-param> <param-name>services.configuration.file</param-name> <param-value>/WEB-INF/flex/services-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MessageBrokerServlet</servlet-name> <url-pattern>/messagebroker/*</url-pattern> </servlet-mapping>
flex.messaging.MessageBrokerServlet の load-on-startup は 1 とします。代わりに org.seasar.framework.container.servlet.S2ContainerServlet を 2 とします。
全体の Web.xml はこうなります。
<?xml version="1.0" encoding="UTF-8"?> <web-app id="sakaen" version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"> <filter> <filter-name>hotdeployfilter</filter-name> <filter-class> org.seasar.framework.container.hotdeploy.HotdeployFilter </filter-class> </filter> <filter> <filter-name>s2filter</filter-name> <filter-class> org.seasar.framework.container.filter.S2ContainerFilter </filter-class> </filter> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>sakaen.action</param-value> </init-param> </filter> <filter-mapping> <filter-name>hotdeployfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>s2filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>flex.messaging.HttpFlexSession</listener-class> </listener> <listener> <listener-class> org.seasar.framework.container.servlet.S2ContainerListener </listener-class> </listener> <servlet> <servlet-name>MessageBrokerServlet</servlet-name> <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class> <init-param> <param-name>services.configuration.file</param-name> <param-value>/WEB-INF/flex/services-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>s2servlet</servlet-name> <display-name>Seasar2 Servlet</display-name> <servlet-class> org.seasar.framework.container.servlet.S2ContainerServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>MessageBrokerServlet</servlet-name> <url-pattern>/messagebroker/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>s2servlet</servlet-name> <url-pattern>/s2servlet/*</url-pattern> </servlet-mapping> </web-app>
Flex Configファイルの配備
BlazeDS を利用する場合、いくつかの Config ファイルを設定する必要があります。
ダウンロードした BlazeDS の「WEB-INF」-「flex」の中に、以下のファイルがあるのでコピーしてください。
- messaging-config.xml
- proxy-config.xml
- remoting-config.xml
- services-config.xml
flex ディレクトリを strtus2-s2jdbc 内「src」-「main」-「webapp」-「WEB-INF」の中にペーストします。
今回 アプリサーバーは Tomcat で、S2BlazeDS を利用するのでそのように書き換えます。
services-config.xml
flex.messaging.endpoints.AMFEndpoint を org.seasar.blazeds.endpoints.S2AMFEndpoint に変更します。
<!--channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition--> <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="org.seasar.blazeds.endpoints.S2AMFEndpoint"/> </channel-definition>
flex.messaging.endpoints.SecureAMFEndpoint を org.seasar.blazeds.endpoints.S2SecureAMFEndpoint に変更します。
<!--channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/> <properties> <add-no-cache-headers>false</add-no-cache-headers> </properties> </channel-definition--> <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="org.seasar.blazeds.endpoints.S2SecureAMFEndpoint"/> <properties> <add-no-cache-headers>false</add-no-cache-headers> </properties> </channel-definition>
全体の services-config.xml はこうなります。
<?xml version="1.0" encoding="UTF-8"?> <services-config> <services> <service-include file-path="remoting-config.xml" /> <service-include file-path="proxy-config.xml" /> <service-include file-path="messaging-config.xml" /> </services> <security> <login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/> <!-- Uncomment the correct app server <login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss"> <login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/> <login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/> --> <!-- <security-constraint id="basic-read-access"> <auth-method>Basic</auth-method> <roles> <role>guests</role> <role>accountants</role> <role>employees</role> <role>managers</role> </roles> </security-constraint> --> </security> <channels> <!-- channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition --> <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="org.seasar.blazeds.endpoints.S2AMFEndpoint"/> </channel-definition> <!-- channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/> <properties> <add-no-cache-headers>false</add-no-cache-headers> </properties> </channel-definition --> <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="org.seasar.blazeds.endpoints.S2SecureAMFEndpoint"/> <properties> <add-no-cache-headers>false</add-no-cache-headers> </properties> </channel-definition> <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/> <properties> <polling-enabled>true</polling-enabled> <polling-interval-seconds>4</polling-interval-seconds> </properties> </channel-definition> <!-- <channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel"> <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/> </channel-definition> <channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel"> <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/> <properties> <add-no-cache-headers>false</add-no-cache-headers> </properties> </channel-definition> --> </channels> <logging> <target class="flex.messaging.log.ConsoleTarget" level="Error"> <properties> <prefix>[BlazeDS] </prefix> <includeDate>false</includeDate> <includeTime>false</includeTime> <includeLevel>false</includeLevel> <includeCategory>false</includeCategory> </properties> <filters> <pattern>Endpoint.*</pattern> <pattern>Service.*</pattern> <pattern>Configuration</pattern> </filters> </target> </logging> <system> <redeploy> <enabled>false</enabled> <!-- <watch-interval>20</watch-interval> <watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file> <watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file> <watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file> <watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file> <watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file> <touch-file>{context.root}/WEB-INF/web.xml</touch-file> --> </redeploy> </system> </services-config>
remoting-config.xml
flex.messaging.services.remoting.adapters.JavaAdapter を org.seasar.blazeds.adapters.S2Adapter に変更します。
<adapters> <!-- adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/ --> <adapter-definition id="s2-object" class="org.seasar.blazeds.adapters.S2Adapter" default="true"/> </adapters>
全体の remoting-config.xml はこうなります。
<?xml version="1.0" encoding="UTF-8"?> <service id="remoting-service" class="flex.messaging.services.RemotingService"> <adapters> <!-- adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/ --> <adapter-definition id="s2-object" class="org.seasar.blazeds.adapters.S2Adapter" default="true"/> </adapters> <default-channels> <channel ref="my-amf"/> </default-channels> </service>
Sponsored Links
struts.xmlの変更
struts.xml にも変更が必要です。以下の記述を追加します。
<constant name="struts.action.excludePattern" value="/messagebroker/amf"/>
excludePattern に定義したパターンにマッチするリクエストは、ActionMapper#getMapping や StaticContentLoader 処理がスキップされます。
全体の struts.xml はこうなります。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.action.excludePattern" value="/messagebroker/amf"/> </struts>
これで設定はおしまいです。Tomcat を起動してエラーが出ないことを確認します。
エラーが出たらどこか設定が間違っているので確認してみてください。
次回は Struts2.3+S2JDBC+Flex4を使ってORACLEアクセス - 実装編 で実装する処理をご紹介します。
おつかれさまでした。
Sponsored Links