tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

はじめてのFlex その13

今回はサーバ側です。

Eclipseを起動して、新規にプロジェクトを作成します。
TomcatプラグインDoltengプラグインを使用していますので、事前に入れておく必要があります。

(以下、諸般の事情でEclipse3.3英語版での例)

メニューからFile -> New -> Projectを選択します。
プロジェクトの種類はDolteng Projectを選択して「Next」を押下します。
プロジェクト情報を以下のように指定します。

  • Proejct Name:HelloAmf3World
  • Root package Name:examples
  • Persistence:S2Dao
  • Presentation:S2Flex2

「Finish」でプロジェクトを作成します。


雛型ができあがります。
ここから、いくつか設定ファイルを修正します。

src/main/resources/convention.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">
<components>
	<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
		<initMethod name="addRootPackageName">
			<arg>"examples"</arg>
		</initMethod>
	</component>
</components>

src/main/resources/aop.dicon

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">
<components namespace="aop">
	<component name="traceInterceptor" class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
	<component name="traceThrowsInterceptor" class="org.seasar.framework.aop.interceptors.TraceThrowsInterceptor"/>
	<component name="classLoaderAwareTraceInterceptor" class="org.seasar.framework.aop.interceptors.ClassLoaderAwareTraceInterceptor"/>
</components>

src/main/resources/cooldeploy.dicon

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">
<components>
	<include path="convention.dicon"/>
	<include path="customizer.dicon"/>
	<component class="org.seasar.framework.container.creator.DtoCreator"/>
	<component class="org.seasar.framework.container.creator.LogicCreator"/>
	<component class="org.seasar.framework.container.creator.ServiceCreator"/>
	<component class="org.seasar.framework.container.cooldeploy.CoolComponentAutoRegister"/>
</components>

src/main/resources/app.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">
<components>
	<include path="convention.dicon"/>
	<include path="aop.dicon"/>
	<include path="remoting_amf3.dicon"/>
	<include condition="#ENV != 'ut'" path="cooldeploy.dicon"/>
</components>


設定ファイルは、ほとんどおまじないです。
詳しくはSeasar - DI Container with AOP -を参考にしてください。


以降はJavaファイルを作成していきます。

src/main/java/examples/dto/HelloDto.java

package examples.dto;

public class HelloDto {
	
	private String myName;
	private String message;
	
	public String getMyName() {
		return myName;
	}
	
	public void setMyName(String myName) {
		this.myName = myName;
	}
	
	public String getMessage() {
		return message;
	}
	
	public void setMessage(String message) {
		this.message = message;
	}
}

まずはサーバ側のDTOを作成します。
Flex側のHelloDtoクラスに付けたメタデータタグと対応しますので、パッケージ名を含めて同じになるようにします。

[RemoteClass(alias="examples.dto.HelloDto")]

src/main/java/examples/service/HelloService.java

package examples.service;

import examples.dto.HelloDto;

public interface HelloService {
	
	public HelloDto remotingAction(HelloDto helloDto);
}

次にサービスクラスです。
interfaceクラス内に、外部からアクセスできるメソッドを定義しておきます。
今回はパラメータと戻り値にHelloDtoクラスを返すremotingAction()メソッド1つだけを定義します。

src/main/java/examples/service/impl/HelloServiceImpl.java

package examples.service.impl;

import org.seasar.flex2.rpc.remoting.service.annotation.RemotingService;
import examples.dto.HelloDto;
import examples.service.HelloService;

@RemotingService
public class HelloServiceImpl implements HelloService {
	
	public HelloDto remotingAction(HelloDto helloDto) {
		helloDto.setMessage("こんにちは、" + helloDto.getMyName() + "さん");
		return helloDto;
	}
}

最後にサービスの実装クラスです。
HelloServiceのremotingAction()をオーバーライドして、処理を実装しています。

Flex側からこのサービスを呼び出すと、HelloDtoのmessage変数に"こんにちは、○○さん"といったメッセージが格納されて返されるようになります。