2013-09-05 3 views
0

У меня есть два приложения для гризли. Я хотел бы работать бок о бок на разных URL-адресах на одном сервере. Когда я меняю свой url от localhost до api.url.local для локальной отладки, он выбрасывает java.nio.channels.UnresolvedAddressException. Есть ли что-то, что мне нужно сделать, чтобы java распознал другой URL (т. Е. - изменить файл hosts)? Или я иду в неправильном направлении?Как развернуть по определенному URL-адресу

Я сейчас в Windows, но буду развертываться в Linux. (Если бы это было до меня, я бы запустить 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

Запуск двух различных приложений под различными URLs на той же машине с одного 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 сертификаты не будут работать очень хорошо. Как правило, в такой конфигурации вам понадобится либо шаблон или сертификат единой системы обмена сообщениями.


При развертывании производства, я бы рекомендовал использовать Apache HTTP Server в качестве прокси-сервера для двух ваших приложений и имеют два отдельных IP-адрес, если вы не можете использовать SSL Wildcard или унифицированный сертификат связи.


Эта часть ответа предназначена, если вы хотите запустить одно приложение под двумя разными URL-адресами.

Проксируйте приложение с помощью экземпляра Apache Http Server и используйте mod_proxy для пересылки двух разных имен серверов или IP-адреса 'на тот же Java-экземпляр.

Моя рекомендация, однако, запустите только два экземпляра вашего приложения. Не беспокойтесь слишком много о ресурсах, оборудование действительно cheep и стоит намного меньше, чем беспокоиться о том, как запустить один экземпляр для двух разных сайтов.

+0

Я на самом деле пытаюсь запустить 2 отдельных приложения на 2 разных URL. Не запускайте 2 URL-адреса для одного и того же экземпляра приложения, хотя я действительно вижу, что это полезно. – Webnet

+0

Итак, единственный способ сделать это через 2 номера портов? – Webnet

+0

Или вы можете сделать это с помощью двух ip-адресов ». Я не уверен, насколько это легко на машине для Windows. Для Linux-машины это довольно просто. Каждое приложение будет прослушивать один и тот же порт (80, 8080, 433, 8443), но на разных IP-адресах. – hooknc

Смежные вопросы