Sometimes it is useful to run more than one instance of JBoss on the same server. Other instances can be set up for development, testing or for quality assurance, etc.
ConfiguringMultipleJBossInstancesOnOneMachine
on the JBoss wiki has the basic info but does not seem to be up to date for the newer servers (4.2.x+).
Before setting up another instance, other outside resources may also have to be 'cloned' if it is possible that they may conflict, such as setting up another instance of a database with a separate connection url and matching datasource for JBoss.
The basic steps are as follows:
1) Add port-bindings.xml
file for binding service port definitions. This file has the same content as jboss
sample-bindings.xml
available from the wiki.
Rename to "port-bindings.xml" and save to $JBOSS_HOME/server
directory.
2) The binding service manager needs to be enabled in conf/jboss-service.xml
for instances that are not using the default ports.
Remove the comments to enable the "ServiceBindingManager" mbean and modify the content as below:
"ServerName" attribute should reference a port configuration in port-bindings.xml and "StoreURL" should point to the port-bindings.xml file
<mbean code="org.jboss.services.binding.ServiceBindingManager"
name="jboss.system:service=ServiceBindingManager">
<attribute name="ServerName">ports-01</attribute>
<attribute name="StoreURL">file:../server/port-bindings.xml</attribute>
<attribute name="StoreFactoryClassName">
org.jboss.services.binding.XMLServicesStoreFactory
</attribute>
</mbean>
the next few changes are not mentioned in jboss wiki documentation
3) Under "Socket transport Connector", in the "Configuration" section, serverBindPort must be changed to another value or it will conflict with the default(4446)
<mbean code="org.jboss.remoting.transport.Connector"
name="jboss.remoting:service=Connector,transport=socket"
display-name="Socket transport Connector">
...
<attribute name="Configuration">
...
<attribute name="serverBindPort">4446</attribute>
4) And in
/deploy/ejb3.deployer/META-INF/jboss-service.xml
,
for the remoting.transport.Connector mbean, port 3873 must be changed to another value or it will conflict with the default.
<mbean code="org.jboss.remoting.transport.Connector"
name="jboss.remoting:type=Connector,name=DefaultEjb3Connector,handler=ejb3">
...
<attribute name="InvokerLocator">socket://${jboss.bind.address}:3873</attribute>
5) Also, any startup scripts in $JBOSS_HOME/bin
may have to be cloned with different debug ports if remote debugging is enabled.
In summary the directory structure for setting up two other instances would be something like the below with added port-bindings.xml and modifications in the filenames in bold.
$JBOSS_HOME/server/port-bindings.xml
$JBOSS_HOME/server/default
$JBOSS_HOME/server/node1
$JBOSS_HOME/server/node1/conf/jboss-service.xml
$JBOSS_HOME/server/node1/deploy/ejb3.deployer/META-INF/jboss-service.xml
$JBOSS_HOME/server/node2
$JBOSS_HOME/server/node2/conf/jboss-service.xml
$JBOSS_HOME/server/node2/deploy/ejb3.deployer/META-INF/jboss-service.xml
Separate instances are run with "run -c node1" etc. and applications accessed with urls like:
http://localhost:8080/myapp/
http://localhost:8180/myapp/
http://localhost:8280/myapp/