2011-04-29 10 views
0

私はマルチモジュールのMavenプロジェクト(約10モジュール)を提供しています。ここで、2つのモジュールはFlexプロジェクトで、対応するサーバープロジェクトはBlazeDS経由で通信します。Flex + BlazeDS +マルチモジュールビルドプロジェクト

サーバーモジュールは、共通のものを含む別のモジュールに依存しており、プロジェクト全体で共有されています。共通モジュールのオブジェクトを使用する場合、オブジェクトはシリアル化されず、AMFを介してSWFに送信されます。サーバーモジュール内のすべてがシリアル化されて正常に動作していますが、共通モジュール(サーバー側で有効な値を持つ)のオブジェクトはクライアントに送信されません。

私はこれを構築するためにFlexmojosを使用しています。共通プロジェクトのクラスを直列化で使用できるようにするために、そしてそれらをswfプロジェクトのRemoteClassオブジェクトとして使用できるようにするためには、どうすればよいですか?

基本的な構造は、これに類似している(私は試したことを簡素化するかなり):

swfファイル・モジュール(フレックス):

クラスMyObject.as:

package swf.model { 

    [RemoteClass(alias="server.model.MyObject")] 
    public class MyObject { 
     public var name:String; 
     public var common:MyCommonObject; 
    } 
} 

クラスMyCommonObject.as:

package swf.model { 

    [RemoteClass(alias="common.model.MyCommonObject")] 
    public class MyCommonObject { 
     public var commonNumber:Number; } 
} 

サーバモジュール(ジャワ):

クラスMyObject.java:

package server.model; 

import common.model.MyCommonObject; 

public class MyObject { 
    private String name; 
    private MyCommonObject common; 

    public MyObject() {} 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    public MyCommonObject getCommon() { 
     return common; 
    } 
    public void setCommon(MyCommonObject common) { 
     this.common= common; 
    } 
} 

共通モジュール(ジャワ)

クラスMyCommonObject.java:

package common.model; 

public class MyCommonObject{ 
    private Double commonNumber; 

    public MyCommonObject() {} 

    public Double getCommonNumber() { 
     return commonNumber; 
    } 
    public void setCommonNumber(Double commonNumber) { 
     this.commonNumber= commonNumber; 
    } 
} 
+0

このためにpom.xmlを共有できますか?私は現在、フレックスプロジェクトのメイキングをしようとしていますが、あなたがしたようにいくつかの苦労に直面しています。 –

+1

申し訳ありませんが、公開されるべきではないたくさんのものが含まれているため、pom.xmlを共有できません。この特定の問題は、MyCommonObject.asクラスのcommon.model.MyCommonObjectを参照しないことによって解決されました。代わりに、私はserver.modelのcommon.model.MyCommonObjectのサブクラスを作成し、そのサブクラスに代わりにActionscriptを要求しました。 – thorseye

+0

とにかく私に戻ってくれてありがとう。私の長い道のりで、私はこの問題を解決したことを正確に忘れていますが、私は単に正しいジャー/依存関係がないと確信しています。 –

答えて

1

Javaサーバー側のDTOとActionScriptクライアントのDTOは独立しています。私は以下を意味する。 BlazeDSサービスがAMF直列化DTOを返すとき、そのバイナリ構造はAMF形式で記述されます。また、AMF転送データには、RemoteClassメタデータを使用してクライアント側で記述する完全なクラスパスが含まれています。このようにして、クライアントFlexプロジェクトとJavaサーバープロジェクトは、ビルドの過程で相互に依存しません。しかし、それらを一緒に構築して、クライアントとサーバーの両方の部分を含む同じWARを生成することができます。

+0

だから私は、BlazeDSサービスがDTOをシリアル化しているときに問題が発生していると思います。どのように私は実際のAMFのシリアル化が起こっているときに何がうまくいかないのかデバッグすることができますか? – thorseye

+0

サーバー側で例外はありますか? – Constantiner

+0

私はサーバーから例外をスローすることができますから。 ActionscriptでRemoteObject経由で呼び出される関数はカスタムオブジェクトを返しており、サーバーモジュール内のすべてのプロパティが正しく送信されます。共通モジュールのクラスに基づいて正しく送信されないプロパティは1つだけです。 – thorseye

0

私は 手段がの.jar {共通モジュールを} PUT

試みは、Flexモジュールの戦争で共通モジュールのJARを置くために、あなたの共通モジュールのJARは、Flexモジュール/ WAR/BlazeDSにのクラスパスにはないと思います{BlazeDS} \ WEB-INF \ lib \(展開時)

がない場合は、

は、あなたの心のコンテンツにあなたのプロジェクトおよびデバッグに追加し、それは私が実際にこれを行うために持っていた

+0

{common.jar}は{server.war} \ WEB-INF \ lib \ {common.jar}に置かれているので、それは問題ではないと思います。オブジェクトはサーバー側に配置されていますが、正しくシリアル化されていません。他のアイデア? – thorseye

+0

サーバでエラーがありますか+ DTO – Imran

+0

でカスタムタイプを使用していますか(Constantinerとほとんど同じです)。はい、カスタムDTOです。私はサーバーから例外をスローすることができますから。 ActionscriptでRemoteObject経由で呼び出される関数はカスタムオブジェクトを返しており、サーバーモジュール内のすべてのプロパティが正しく送信されます。共通モジュールのクラスに基づいて正しく送信されないプロパティは1つだけです。 – thorseye

関連する問題