2009-09-18 12 views
6

ここでホイールを再発明しようとしないでください。私は配備の準備をしているGoogle Web Toolkitのページを持っていますが、私が通信しているウェブサービスは、ローカルのテストマシンとは異なる配備されたサーバ上に相対アドレスを持っています。GWTのサーバー側構成

このように、簡単に編集できる設定ファイルを使って簡単にデプロイする方法を探しています。サーバー側で基本設定を行うことができます。私はそれを行う方法についていくつかのアイデアを持っていますが、いくらかハッキーに見えます。この種の問題の解決策が既に存在しているように思えます(サーバーごとの設定は非常に共通です)。

アイデア

編集:これは多くの注目を集めているように見えないので、私は私の最初の考えの概要を説明してみましょう:私は、他のロジックの前にAJAX呼び出しを照会GWTファイルにローカルな静的なファイルを保存します。ファイルが返されると、データを解析してグローバルにアクセス可能な変数として格納し、ページ構築ロジックを実行できるようにします。 clunkyと思われます.AJAXがロード前に戻るのを待つ大きな欠点がありますが、うまくいくでしょう。より良い提案はありますか? (?してください)

マイソリューション: 私は自分自身で解決策を見つけたが、私はそれが一般のユーザーになりますどのように有用かわからないので、それは私の正確なシナリオにかなり具体的です。とにかく、誰かがそれが有用であると感じるオフチャンスに私はここに投稿します。

私が取り組んでいるページは、実際にはASP.netサイトに埋め込まれたGWTコントロールです。

まず、私が望む設定(この場合はWebサービスへのアドレス)がASPに設定されています

<head runat="server"> 
    <title>Picklist Manager</title> 

    <script type="text/javascript" language="javascript"> 
     var AppConfig = { 
      serviceUrl: "<%= ConfigurationManager.AppSettings["serviceUrl"] %>" 
     }; 
    </script> 
    <script type="text/javascript" language="javascript" src="gwtcontrol.nocache.js"></script> <!-- Include my GWT control --> 
</head> 

最後に、GWTで:GWTコントロールを埋め込んだASPページで、.NETのWeb.configファイル

<appSettings> 
    <add key="serviceUrl" value="http://mySite.com/myService.asmx"/> 
</appSettings> 

は、私は私が必要javascriptの設定の設定を含むオブジェクト「静的」を追加します私はこのような設定を公開する静的な "AppConfig"クラスを作成します:

public class AppConfig { 
    public static String serviceUrl = "defaultUrl"; 

    public static void Initialize() { 
     Dictionary appConfig = Dictionary.getDictionary("AppConfig"); 
     if(appConfig == null) { return; } 

     servicePath = appConfig.get("serviceUrl"); 
    } 
} 

そこから私はやれやれ...設定を取得するために私のコードのどこにでもAppConfig.serviceUrlを呼び出すことができます!ええ、それはそれについて行くための素晴らしい長い複雑な方法ですが、それは私のために動作します。アレキサンダーズの答えは、私が探していたものと最もよく似ているようですので、恩恵は彼に行きますが、スティッキーな小さな問題に取り組んだ皆さんに感謝します!

答えて

5

私を修正しても問題ありませんが、ランタイムサーバー側の構成が必要なようには思えません。その柔軟性が本当に必要な場合、またはすべての配備で単一の.zipを使用したい場合は、Yahoo's Performance Rules(「期限切れまたはキャッシュ制御ヘッダーの追加」を参照)で指定された手法を使用できます。 。これは、AJAXリクエストがブラウザによって頻繁にキャッシュされ、最初のリクエストでわずかな減速が発生することを意味します。

これを実行するのではなく、コンパイル時フラグとGWTが提供するプロパティシステムを使用することをお勧めします。これを簡単にするために、私はauto-config available on githubという小さなパッケージを作った。これにより、デプロイメント構成ごとのアクセスが非常に簡単になります。以下のクラスを追加します。

public interface MyConfiguration extends AutoConfiguration { 
    public String getFoobar(); 
} 

GWTコードから値にアクセスするには、このシンプルなヘルパーを追加します。

private MyConfiguration getMyConfiguration() { 
    return (MyConfiguration) GWT.create(MyConfiguration.class); 
} 

は、いくつかの異なる.gwt.xmlファイル、各展開サーバーのための1つを作成します。次に、親.gwt.xmlファイルを使用して重複を最小限に抑えます。持っている

<set-configuration-property name="foobar" value="whee1234" /> 

希望:このトピックの詳細については、あなたのあたりの展開.gwt.xmlさん(及び必要な継承の行を追加してください)に次のコードを追加し、要約するとCompileOnePermutation on the GWT Wiki

を読みます役に立った:

+0

あなたの2番目のリンクは働いていました:)私は最初のものは面白い書式であると思っていますが、それはポイントを取得します。私はこの方法を検討しています... – Toji

+0

うわー...それはかなり複雑な例です。私はそれを見なければならない部分がわからない。 PropertyOracleはジェネレータを介して取得するものですが、ジェネレータは私のために何を行いますか、どのように使用しますか?私は通常これらのことを読んでいるとかなり良いですが、私はこの場合多くの文脈が欠けているように感じます。 : – Toji

+0

プロジェクトにはこれが必要なので、今すぐ掘り下げよう。 –

1

最も簡単な方法は、このコンフィグレーション情報をserverコード(ServiceImplクラス)にアクセスできる場所に保存することです。

あなたは、通常、そのために複数のオプションがあります。

  • は、環境変数を設定します。
  • システムプロパティを設定します。
  • クラスパスにプロパティファイルを配置します。
  • JNDI Beanをルックアップします。
1

私は少しあなたが求めていることについて混乱しています。

あなたが望むのは、一度コンパイルしてGWTアプリケーションをさまざまなオプションで実行し、GUIビルド時にオプションをクライアント側で使用する場合です。

は、使用してプログラムに情報を取得します。

  • 環境変数
  • システムプロパティ
  • その他、各種

して、クライアント側に情報を取得します。

  • ファイルへのAJAXコール(指定通り)
  • スタティックなHTMLではなく、JSPからGUIを表示します。 JSPがJS変数に情報を埋め込むようにしてください。あなたのGUIはJSNI呼び出しを使ってアクセスできます。これはあなたに往復を節約します。
関連する問題