2012-03-06 7 views
0

プロファイル別のサーバー環境用に構築します。私は何をしようとしてることは、それは私ができる何かにserver.cfgは、私は、カスタマイズを構築するためにMavenのプロファイルによって提供される機能を使用しようとしてる

​​

という名前のファイルにこの値を変換するためのプロファイルメカニズム

<profiles> 
    <profile> 
     <id>mock</id> 
     <properties> 
      <application-url>http://mock-server-url</application-url> 
     </properties> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
    </profile> 
</profiles> 

だと

<resources> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 

をフィルタリングMavenのリソースを組み合わせることですここでの使用:

public interface ServerResource extends ClientBundle { 
    public static final ServerResource INSTANCE = GWT.create(ServerResource.class); 

    @Source("server.cfg") 
    public TextResource server(); 

} 

値がWEB-INF/classesで置き換えられましたが、GWTがファイルを置換えとともに使用してアプリケーションのJavaScriptを作成しているようには見えません。これどうやってするの?このような構成を適用するためにGWTコンパイラーの順列を使用して

+0

あなたのGWTアプリケーションの特定のサーバープロパティをハードコンパイルしているように見えます。アプリケーションの起動時に、たとえばAsyncコールバックを介してサーバーから値を取得しない理由がありますか?この方法では、最初に複数のバージョンをコンパイルする必要はありません。 –

+0

私はちょっと新しいので、my_server/instance1からGWTアプリケーションをダウンロードすると、コールバックはmy_server/instance1_servicesに行くことを知っています。これは最終的に私がやりたいことです。そして、my_server/instance2とmyserver/instance2_servicesに別のアプリケーションインスタンスを作成してください。私はExternalSourceResourceを使用しようとしましたが、成功しませんでした。私もGINを見てきましたが、それも分かりませんでした。 – Vinnie

+0

あなたは 'services'で正確に何を意味するのか、より具体的にすることができますか?別の配備されたアプリケーションですか?それらは実際のWebサービスまたはGWT RPCサーブレットですか?あなたはどのようにそれらのサービスとコミュニケーションをしますか? –

答えて

1

I私がMavenプロファイルやGWT ClientBundle(私が質問を書いたときに意図したやり方で働かなかったこと)を使わずに達成しようとしていたことを解決しました。ホスト・モードで

  1. 使用モックMVPモデル

    // inside the initialization for my model locator 
    boolean hostedMode = GWT.getPermutationStrongName().equals("HostedMode"); 
    
    if (hostedMode) { 
        // instantiate mock models 
    } else { 
        // instantiate real models to call REST web services 
    } 
    
  2. :ここ

    は、私はMavenのプロファイルと私は手で問題を解決するために使用される回避策を使用して解決することを望んだ主な問題でした

  3. 実際のモデルに正しいRESTfulサーバーURLを入力してください。

    私のGWTアプリとRESTfulウェブサービスのURLが命名規則に従っているので、これを達成できました。私は基本的に私はすでにだった私ができるよう

    MVPプレゼンター(活動&場所)のできるだけ多くのテストを有効にURLから「/」の末尾を削除し、追加「「

    String createServicesBaseUrl() { 
        StringBuffer baseUrl = new StringBuffer(GWT.getHostPageBaseURL()); 
        int length = baseUrl.length(); 
        baseUrl.replace(length-1, length, "_services"); 
        return baseUrl.toString(); 
    } 
    
  4. を_servicesモデルのロケータを私のActivityクラスに注入したので、JUnitで使用するモックモデルロケータに置き換えることは簡単でした。私の見解では同じことを行い、ブラウザ外で動作しないようなコードをいくつか抽象化しました(GWT PlaceControllerのように)

私のビルドはまったく同じですが、テスト、GWTアプリケーションが接続するサーバーインスタンスの構成、およびアプリケーションが使用するモデル(ホスト型サーバーモード)。

+0

今私はあなたがやろうとしていることを見ています...面白いです。 – Renato

1

は私の意見では非常に悪い考えです。 GWTに関する最も一般的な苦情の1つは、コンパイルにかかる時間です。これを行うことで、問題に追加するだけです。

設定は通常shown hereのようなコンフィギュレーションファイル(驚き!)、から読まれるべきです。

とにかく、あなたが何をしようとしていることは不可能に思えます。クライアント側のコードに接続するサーバーを指定することはできません。これはsame-origin policyに違反します。アプリは、それが来たサーバーとのみ通信できます。

は異なるURLで実行されている別のアプリケーションを持っているために、あなたは(彼らは基本的に同じであっても)別の名前を持ついくつかのGWTアプリケーションを展開する必要があります。次に、ブラウザに各アプリ(バージョン)の正しいURLを入力するだけで、適切なアプリを「見る」でしょう。ですから、このようなURLを持つことができます:

GWTアプリケーションと同じサーバーで実行されているさまざまなアプリケーションに要求を行うため、あなたはこのような何かを行うことができますで
http://myserver.com/app1 
http://myserver.com/app2 

String serviceUrl = "/app2/someService"; // or some other String sourced from a config file, using a GWT ClientResource for example 
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, 
      serviceUrl); 
    try { 
     // send request from app1 to app2 
     rb.sendRequest(null, new RequestCallback() { 
      @Override 
      public void onResponseReceived(Request request, 
        Response response) { 
       log.info("Response: " + response.getStatusText()); 
       // if response is 200 it's ok, you can read the outputStream to see what's in there 
      } 
      @Override 
      public void onError(Request request, Throwable exception) { 
       log.warning("Request Error", exception); 
       // do something more 
      } 
     }); 
    } catch (RequestException e) { 
     log.warning("Request Exception", e); 
     // getting here means trouble with the connection or service! 
    } 
+0

同じオリジンポリシーに違反していないのは、同じサーバーになり、サーバー上の別のインスタンスになります。インスタンスを指定する必要があります。 FlexにはSOPの制限があり、Flex UIをGWTに置き換えようとしています。後であなたの投稿でさまざまなアプリのバージョンについて提案したのは、私がやろうとしていることです。それは、app1がapp1_web_servicesを使用し、app2がapp2_web_servicesを使用するということだけです。そのマッピングをどこかに指定する必要があります。 Flexでは、私は戦争パッケージングでそれをやった。あなたの設定例を見ていきます。ありがとう! – Vinnie

+0

参照する構成ファイルの例は、サーバー側コンポーネントの構成を設定するように見えます。本当?私がやりたいことは、クライアント側のコンポーネント(gwtコンパイラで生成されたjsから見える)でこのタイプの設定を行うことです。 – Vinnie

+0

私は速くコンパイル時のパフォーマンスを喜んで交換したいと思います。 – Vinnie

関連する問題