2013-09-05 2 views
0

동일한 서버의 다른 URL에서 나란히 실행하고 싶은 2 개의 그리즐리 응용 프로그램이 있습니다. 로컬 디버깅을 위해 localhost에서 api.url.local으로 URL을 변경하면 java.nio.channels.UnresolvedAddressException이 발생합니다. java가 다른 URL을 인식하도록하기 위해해야 ​​할 일이 있습니까? (즉, hosts 파일을 수정하십시오)? 아니면 잘못된 방향으로 가고 있습니까?특정 URL에 배포하는 방법

현재 Windows를 사용하고 있지만 Linux로 배포 할 예정입니다. (내게 달린 리눅스라면 리눅스를 돌린다.)

public class Main { 

    public static final URI BASE_URI = getBaseURI(); 

    private static URI getBaseURI() { 
     return UriBuilder.fromUri("http://localhost/").port(9998).build(); 
    } 

    protected static HttpServer startServer() throws IOException { 
     ResourceConfig rc = new PackagesResourceConfig("com.my.package.api.resources"); 
     rc.getFeatures() 
      .put(JSONConfiguration.FEATURE_POJO_MAPPING, true); 

     return GrizzlyServerFactory.createHttpServer(BASE_URI, rc); 
    } 

    public static void main(String[] args) throws IOException { 
     AnnotationConfigApplicationContext annotationCtx = new AnnotationConfigApplicationContext(Config.class); 

     HttpServer httpServer = startServer(); 

     System.out.println(String.format("Jersey app started with WADL available at " + "%sapplication.wadl\nHit enter to stop it...", BASE_URI, BASE_URI)); 
     System.in.read(); 
     httpServer.stop(); 
    } 
} 
+0

이 애플리케이션에 다른 포트 (TCP 포트)를 사용하셨습니까? 이 2 가지 앱이 별도의 JVM 인스턴스에서 실행되는 것을 이해합니다. 맞습니까? – alexey

+0

그들은 같은 경우입니다. 나는 항구를 고려했다. 그러나 그것이 필요한지 궁금하게 생각하고있다. 2 개의 서로 다른 URL에 배포 할 수 있습니까? JVM이 URL을 실행중인 응용 프로그램에 매핑합니까? – Webnet

+0

하나의 포트를 사용하려면 두 응용 프로그램 모두에 대해 HttpServer 인스턴스를 공유해야합니다. 이 앱들은 어떻게 생겼습니까? – alexey

답변

1

하나의 IP 주소를 가진 동일한 컴퓨터에서 서로 다른 두 개의 다른 응용 프로그램을 실행하는 것은 매우 쉽다. 그러나 당신이하고 싶은 일에 따라 약간의 설정이 필요할 수 있습니다.

제 생각에는 개발 컴퓨터에서이 작업을 수행하고 있다는 것입니다. 여기서 가장 큰 문제는 두 서버가 다른 포트 번호를 필요로한다는 것입니다.

서버 # 1
http://localhost:8080/

서버 # 2
http://localhost:8081/


대신 명명 된 인스턴스합니다. 호스트 파일을 업데이트하여 원하는 이름이 지정된 인스턴스가 로컬 시스템을 가리 키도록해야합니다. 하지만 응용 프로그램마다 별도의 포트를 사용해야합니다.

서버 # 1 http://api.url.local:8080/

서버 # 2 http://api.url.local2:8081/

또한 설정 (난 당신이 tocmat를 사용하고 있으리라 믿고있어) 당신의 바람둥이를 업데이트해야합니다. 이 요소에서 'name'속성을 애플리케이션 URL의 이름으로 업데이트해야한다고 생각합니다. 동일한 IP 주소하지만, 다른 호스트 이름을 사용하는 경우


친절한 경고, SSL 인증서는 아주 잘 작동하지 않습니다. 일반적으로 이러한 종류의 설치에는 와일드 카드 또는 통합 통신 인증서가 필요합니다.


프로덕션에 배포

, 나는 당신이 응용 프로그램 프록시로 아파치 HTTP 서버를 사용하는 것이 좋습니다 것입니다 그리고 당신은 SSL 와일드 카드 또는 통합 커뮤니케이션 인증서를 사용하지 않는 '두 개의 IP 주소가 있습니다.


이 부분은 두 개의 서로 다른 URL에서 하나의 응용 프로그램을 실행하려는 경우에 대한 것입니다.

Apache Http Server 인스턴스로 애플리케이션을 프록시하고 mod_proxy을 사용하여 두 개의 다른 서버 이름이나 IP 주소를 동일한 Java 인스턴스로 전달하십시오.

내 권장 사항이지만 응용 프로그램의 두 인스턴스를 실행하십시오. 리소스에 대해 너무 걱정하지 마라. 하드웨어는 정말 싸다. 그리고 두 개의 다른 사이트에 대해 하나의 인스턴스를 실행하는 방법에 대해 걱정할 필요가 없다.

+0

2 개의 서로 다른 URL에서 2 개의 개별 응용 프로그램을 실제로 실행하려고합니다. 동일한 응용 프로그램 인스턴스에 대해 2 개의 URL을 실행하지 마십시오. 실제로 유용하다는 것을 볼 수 있지만. – Webnet

+0

이렇게하는 유일한 방법은 2 개의 포트 번호를 사용하는 것입니다. – Webnet

+0

아니면 두 개의 IP 주소로 할 수 있습니다. ' Windows 시스템에서 얼마나 쉬운 지 모르겠습니다. 리눅스 머신에서는 꽤 쉽습니다. 각 응용 프로그램은 동일한 포트 (80, 8080, 433, 8443)를 청취하지만 다른 IP 주소에서 수신합니다. ' – hooknc