2012-03-06 5 views
0

Maven 프로파일에서 제공하는 기능을 사용하여 다른 서버 환경에 맞게 사용자 정의 빌드를 작성하려고합니다. 내가 무엇을 시도하고있어이 프로파일 메커니즘이GWT Maven 빌드 (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> 

을 결합이다 내가 할 수있는 뭔가를 server.cfg

${application-url} 

여기에서 사용 :

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

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

} 

값이 WEB-INF/classes에서 대체되었지만 GWT가 파일을 대체 파일과 함께 사용하여 애플리케이션 자바 스크립트를 생성하지 않는 것으로 보입니다. 어떻게해야합니까?

+0

GWT 응용 프로그램의 특정 서버 속성에서 하드 컴파 일한 것처럼 보입니다. 응용 프로그램이 시작될 때 예를 들어 비동기 콜백을 통해 서버에서 해당 값을 가져 오지 않는 이유가 있습니까? 이렇게하면 처음부터 여러 버전을 컴파일 할 필요가 없습니다. –

+0

저는 약간 새로운데, my_server/instance1에서 GWT app을 다운로드하면 콜백이 my_server/instance1_services로 이동하는 것을 어떻게 알 수 있습니까? 이것은 궁극적으로 내가하고 싶은 것입니다. 그리고 my_server/instance2와 myserver/instance2_services에 다른 어플리케이션 인스턴스를 가지고 있습니다. ExternalSourceResource를 사용하려고했지만 그걸로 성공하지 못했습니다. 나는 진 (GIN)을 들여다 보았고 그것도 이해할 수 없었다. – Vinnie

+0

'서비스'로 정확히 무엇을 의미 할 수 있습니까? 별도의 배포 응용 프로그램입니까? 실제 웹 서비스 또는 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. :

    여기

    내가 받는다는 프로파일과 해결 방법을 사용하여 해결하기 위해 희망의 주요 문제는 내가 손에 문제를 해결하기 위해 사용했다
  3. 실제 모델에 올바른 RESTful 서버 URL을 제공하십시오.

    내 GWT 앱과 RESTful 웹 서비스 URL이 일련의 명명 규칙을 따르므로이 작업을 수행 할 수있었습니다.나는 기본적으로

    String createServicesBaseUrl() { 
        StringBuffer baseUrl = new StringBuffer(GWT.getHostPageBaseURL()); 
        int length = baseUrl.length(); 
        baseUrl.replace(length-1, length, "_services"); 
        return baseUrl.toString(); 
    } 
    
  4. 내가 이미

    했다시킬 수 있으므로 MVP 발표자 (활동 & 장소)만큼의 테스트를 사용 "_services 'URL에서 후행'/ '제거 및 추가 모델 로케이터를 내 Activity 클래스에 삽입 했으므로 JUnit에서 모의 ​​모델 로케이터로 사용하도록 모의 모델 로케이터를 교체하는 것은 간단했습니다. 내보기에도 동일하게 수행했으며 브라우저 외부에서 작동하지 않는 다른 코드를 추상화했습니다. (예 : GWT PlaceController)

내 빌드는 모두 동일하지만 테스트, GWT 응용 프로그램 연결 서버 인스턴스 구성 및 내 응용 프로그램 사용 모델 구성 (호스트 된 서버와 서버에 종속 됨)에서 많은 유연성을 얻는 방법을 배웠습니다. 방법).

+0

이제 당신이하려고했던 것을 보았습니다 ... 흥미 롭습니다. – Renato

1

이런 종류의 구성을 적용하기 위해 GWT 컴파일러 순열을 사용하는 것은 제 생각에는 매우 나쁜 생각입니다. GWT에 대한 가장 일반적인 불만 중 하나는 컴파일하는 데 걸리는 시간이며, 이렇게하면 문제가 추가되는 것입니다.

구성은 대개 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_web_services를 사용하고 app2_web_services를 사용하는 것입니다. 그 매핑을 지정해야합니다. Flex에서는 전쟁 포장에서 사용했습니다. 구성 예를 살펴 보겠습니다. 감사! – Vinnie

+0

참조하는 구성 파일 예제는 서버 측 구성 요소의 구성을 설정하는 것처럼 보입니다. 그게 사실이야? 내가하고 싶은 일은 클라이언트 측 컴포넌트 (gwt 컴파일러에 의해 생성 된 js에 표시)에서 이러한 유형의 구성을 설정하는 것입니다. – Vinnie

+0

BTW - 빨리 (어) 런타임 성능을 위해 느리게 컴파일 타임 성능을 교환하고 싶습니다. – Vinnie