JBoss AS 7在不同的http端口上有两个webapp?

时间:2012-03-28 21:34:08

标签: web-applications configuration jboss7.x ports

要替换旧服务,我感兴趣的是在两个不同的HTTP端口号上有两个不同的webapp,例如,8080 - > webapp1(浏览器服务),8200 - > webapp2(REST,新版本使用RESTEasy)。每个都是该端口号上的“根上下文”。

本网站上的“标准”答案与JBoss 5有关,JBoss 5是历史上的两个主要版本,并且有大量的配置格式变化。

我正在使用JBoss AS 7.0.2.Final和“独立”部署。有人这样做,可以共享使用的配置吗?感谢。

3 个答案:

答案 0 :(得分:7)

管理域

您可以考虑运行托管域实例。这将允许您使用Web应用程序维护两个服务器实例,以及从单个控制台视图维护端口和接口声明的简便性。

目标是一个具有两个服务器的托管域。每个服务器都属于不同的服务器组。每个服务器组都可以根据需要拥有自己的接口或端口声明。

这为您提供了一个管理控制台,其中包含一组相关服务器组,可以分配您当前和未来的服务器,并可以动态更改,重新分配或禁用。

配置

您需要注意的文件是以下文件路径下的host.xmldomain.xml配置文件。

~/JBOSS_HOME/domain/configuration

domain.xml我们可以看到套接字绑定组。以下示例是默认的"标准套接字" group,但您可以随意创建任意数量的组,并根据需要添加尽可能多的声明。

 <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文件是域控制器的配置,它是&#34;老板&#34;托管域名。实际的服务器信息包含在主机控制器中,所以让我们看一下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组的成员。请注意端口绑定声明。

您可以删除第三台服务器,并将服务器1和服务器2分别专用于您的第一个和第二个Web应用程序。每个服务器都可以属于一个唯一的组。每个组都可以声明一个唯一的端口。在此之后,您已准备好将您的应用程序部署到各自的群组,并且您将离开。

使用管理工具

示例显示的是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)

这应该让你开始。你可能会收集,我是管理域的粉丝......

答案 1 :(得分:3)

创建两个单独的独立配置,然后在启动时使用-c参数指向正确的配置文件。

例如,假设您将默认的standalone.xml文件作为第一个实例的起点复制到名为standalone-server1.xml的文件中。然后,您可以使用以下命令启动该实例:

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

确保根据需要编辑socket-binding-group设置以避免端口冲突。考虑使用port-offset属性让JBoss自动为您提供端口号。

答案 2 :(得分:1)

谢谢@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>广告,为每个人配置<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并使用server-group

确认您的服务器
<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_Home}/bin打开jboss-cli并输入

connect

并确认您在域配置下运行jboss而非独立配置

[domain@localhost:9999 /]

部署任何应用类型

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

并确保您运行的任何应用都应在其web.xml中包含</distributable>标记。

现在你可以在jboss的单个实例的不同端口上运行两个app:)