JBoss AS 7 с двумя веб-приложениями на разных http-портах? - PullRequest
9 голосов
/ 29 марта 2012

Чтобы заменить устаревшую службу, меня интересует наличие двух разных веб-приложений на двух разных номерах портов HTTP, например, 8080 -> веб-приложение1 (служба браузера), 8200 -> веб-приложение2 (REST, новая версия использует RESTEasy).Каждый из них будет «корневым контекстом» для этого номера порта.

«Стандартный» ответ на этом сайте относится к JBoss 5, который является двумя основными версиями в истории и имеет миллионы изменений в конфигурации.

Я использую JBoss AS 7.0.2.Final и "автономное" развертывание.Кто-нибудь сделал это и может поделиться используемой конфигурацией?Спасибо.

Ответы [ 3 ]

7 голосов
/ 13 апреля 2012

Управляемый домен

Возможно, вы захотите запустить экземпляр управляемого домена.Это позволит вам поддерживать два экземпляра сервера с веб-приложением каждый, а также упростит поддержку объявлений портов и интерфейсов из единого представления консоли.

Для цели будет один управляемый домен с двумя серверами.Каждый сервер будет принадлежать к другой группе серверов.Каждая группа серверов будет иметь свой собственный интерфейс или объявления портов, как вам требуется.

Это дает вам единую консоль управления с набором относительных групп серверов, которым можно назначить текущие и будущие серверы, с возможностью изменения, переназначения или отключения на лету.

Конфигурация

Файлы, о которых вам необходимо знать, являются файлами конфигурации host.xml и domain.xml по следующему пути к файлу.

~/JBOSS_HOME/domain/configuration

Из domain.xml мы можем видеть группы привязки сокетов.Следующий пример является группой по умолчанию «стандартные сокеты», но вы можете создать столько групп, сколько захотите, с таким количеством или меньшим количеством объявлений, сколько вам нужно.

 <socket-binding-groups>
        <socket-binding-group name="standard-sockets" default-interface="public">
            <socket-binding name="ajp" port="8009"/>
            <socket-binding name="http" port="8080"/>
            <socket-binding name="https" port="8443"/>
            <socket-binding name="osgi-http" interface="management" port="8090"/>
            <socket-binding name="remoting" port="4447"/>
            <socket-binding name="txn-recovery-environment" port="4712"/>
            <socket-binding name="txn-status-manager" port="4713"/>
            <outbound-socket-binding name="mail-smtp">
                <remote-destination host="localhost" port="25"/>
            </outbound-socket-binding>
        </socket-binding-group>
 ...

Вы можете создать двегруппы привязки сокетов для ваших нужд, обслуживающие два набора портов, которые могут вам понадобиться.Как только они существуют, вы хотите, чтобы группа серверов узнала о них.Давайте посмотрим дальше на файл domain.xml.

В следующем примере видно, что группа серверов ссылается на группу привязки сокетов.Что касается бонусных баллов, мы видим, что на них развернуто несколько приложений.Это произошло через консоль управления, но AS 7 сохраняет консоль, а CLI изменяет конфигурацию.

   <server-groups>
    <server-group name="main-server-group" profile="full">
        <jvm name="default">
            <heap size="1303m" max-size="1303m"/>
            <permgen max-size="256m"/>
        </jvm>
        <socket-binding-group ref="full-sockets"/>
        <deployments>
            <deployment name="your_application.jar" runtime-name="your_application.jar"/>
            <deployment name="your_application_02.ear" runtime-name="your_application_02.ear"/>
            <deployment name="test.war" runtime-name="test.war"/>
        </deployments>
    </server-group>
    <server-group name="other-server-group" profile="full-ha">
        <jvm name="default">
            <heap size="1303m" max-size="1303m"/>
            <permgen max-size="256m"/>
        </jvm>
        <socket-binding-group ref="full-ha-sockets"/>
        <deployments>
            <deployment name="your_application_02.ear" runtime-name="your_application_02.ear"/>
            <deployment name="test.war" runtime-name="test.war"/>
        </deployments>
    </server-group>
</server-groups>

Файл domain.xml представляет собой конфигурацию контроллера домена, который является «боссом» управляемого домена.Фактическая информация о сервере содержится в хост-контроллере, поэтому давайте посмотрим на файл host.xml.

<servers>
    <server name="server-one" group="main-server-group">
    </server>
    <server name="server-two" group="main-server-group" auto-start="true">
        <!-- server-two avoids port conflicts by incrementing the ports in
             the default socket-group declared in the server-group -->
        <socket-bindings port-offset="150"/>
    </server>
    <server name="server-three" group="other-server-group" auto-start="false">
        <!-- server-three avoids port conflicts by incrementing the ports in
             the default socket-group declared in the server-group -->
        <socket-bindings port-offset="250"/>
    </server>
</servers>

Мы видим три сервера в домене по умолчанию.Третий является членом группы other-server-group, а первые два являются членами группы main-server-group.Обратите внимание также на объявления привязки порта.

Вы можете удалить третий сервер и выделить первый и второй сервер для своего первого и второго веб-приложений соответственно.Каждый сервер может принадлежать к уникальной группе.Каждая группа может объявить уникальный порт.После этого вы готовы развернуть свои приложения в соответствующих группах, и вы в отъезде.

Использование инструментов управления

В примерах показан XML, но вам следует использовать консоль управления илиCLI управления при настройке вашей установки.Консоль достаточно проста, поэтому здесь помогут некоторые операции CLI.

Чтобы показать группы серверов:

[domain@localhost:9999 /] /server-group=*:read-resource(include-runtime=true)

Чтобы отобразить группы привязки сокетов:

[domain@localhost:9999 /] /socket-binding-group=*:read-resource(include-runtime=true)

Вы хотите предоставить конкретные значения атрибута http, чтобы мы могли изменить нашу операцию CLI для запуска на этом дочернем узле.Включение параметра времени выполнения помогает нам отлавливать все, что передано во время выполнения, которое не было записано или сохранено в модели сервера.

[domain@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=http:read-resource(include-runtime=true)

А вот как вы к нему пишете.

[domain@localhost:9999 /] /socket-binding-group=standard-sockets/socket-binding=http:write-attribute(name=port,value=8081)

Это должно помочь вам начать.Как вы понимаете, я фанат управляемого домена ...

3 голосов
/ 30 марта 2012

Создайте две отдельные автономные конфигурации, затем укажите при запуске правильный файл конфигурации с параметром -c.

Например, допустим, вы скопировали файл standalone.xml по умолчанию в качестве отправной точки для первого экземпляра в файл с именем standalone-server1.xml. Затем вы запустите этот экземпляр с помощью следующей команды:

$jboss_home/bin/standalone.sh -c standalone-server1.xml

Обязательно отредактируйте настройки socket-binding-group, чтобы избежать конфликтов портов. Подумайте об использовании свойства port-offset, чтобы JBoss автоматически увеличил ваши номера портов.

1 голос
/ 20 мая 2014

Спасибо @ ddri, в соответствии с шагами, упомянутыми @ddri, я хочу добавить несколько вещей, Я выполнил все указанные вами шаги @ddri, но мои приложения не были развернуты на определенных портах, я хочу внести исправление (что сработало в моем случае)

Step 1 Откройте domain.xml и выберите любую группу привязки сокетов, которую вы собираетесь использовать, по умолчанию у нас есть

1) standard-sockets
2) ha-sockets
3) full-sockets
4) full-ha-sockets

Я использовал 2,3. Вот мой фрагмент

<socket-binding-group name="ha-sockets" default-interface="public">
            <socket-binding name="ajp" port="8009"/>
            <socket-binding name="http" port="8888"/>
            <socket-binding name="https" port="8443"/>
            <socket-binding name="jgroups-diagnostics" port="0" multicast-address="224.0.75.75" multicast-port="7500"/>
            <socket-binding name="jgroups-mping" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
            <socket-binding name="jgroups-tcp" port="7600"/>
            <socket-binding name="jgroups-tcp-fd" port="57600"/>
            <socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
            <socket-binding name="jgroups-udp-fd" port="54200"/>
            <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
            <socket-binding name="osgi-http" interface="management" port="8090"/>
            <socket-binding name="remoting" port="4447"/>
            <socket-binding name="txn-recovery-environment" port="4712"/>
            <socket-binding name="txn-status-manager" port="4713"/>
            <outbound-socket-binding name="mail-smtp">
                <remote-destination host="localhost" port="25"/>
            </outbound-socket-binding>

Step 2 В файле domain.xml найдите <server-groups> ad и настройте <socket-binding-group> для каждого из них, вот мой фрагмент

<server-groups>
        <server-group name="1st-server-group" profile="ha">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="ha-sockets"/>
        </server-group>
        <server-group name="2nd-server-group" profile="full-ha">
            <jvm name="default">
                <heap size="64m" max-size="512m"/>
            </jvm>
            <socket-binding-group ref="full-ha-sockets"/>
        </server-group>

Step 3 Откройте файл host.xml и настройте сервер с помощью группы серверов

<servers>
        <server name="server-one" group="1st-server-group">

        </server>
        <server name="server-two" group="2nd-server-group">

        </server>

Step 4 Перейдите в папку {JBoss_Home}/bin и запустите файл domain.bat и убедитесь, что нет исключений для уже подключенного порта.

=============================================== ================================ Step 5 Откройте jboss-cli из {JBoss_Home}/bin и введите

connect

и подтвердите, что вы запускаете jboss в конфигурации домена, а не в автономной конфигурации

[domain@localhost:9999 /]

Для развертывания любого типа приложения

deploy FacebookTool.war --server-groups=1st-server-group

и убедитесь, что в любом приложении, которое вы используете, должен быть тег </distributable> в их файле web.xml.

Теперь вы можете запустить два приложения на разных портах одного экземпляра jboss:)

...