服務器端代碼:
HelloWorld.java:
1
import javax.ejb.Remote;
2
3
@Remote
4
public interface HelloWorld
{
5
public String sayHello(String s);
6
}
7
HelloWorldBean.java
1
import javax.ejb.Stateless;
2
3
import org.jboss.annotation.ejb.Clustered;
4
5
import cn.HelloWorld;
6
7
@Stateless
8
@Clustered
9
public class HelloWorldBean implements HelloWorld
{
10
11
public String sayHello(String s)
{
12
System.out.println(s);
13
return s;
14
}
15
16
}
上面第8行的@Clustered是必須的,因為我們需要使用Stateless Bean的集群功能。
分別在IP地址為:192.168.1.88和192.168.1.99機器上面安裝JBOSS4.0.5GA,JBOSS4.0.5可以去下載文件名為jboss-installer-1.2.0.GA.jar的安裝,安裝的時候選擇ejb3-clustered,再下面有一步時選擇Advance,再在Name輸入框輸入all,其它默認就可以了。
兩臺機器上面都安裝好之后,分別在兩臺機器上面啟動jboss,啟動的時候需要加參數:如IP為192.168.1.88的機器啟動JBOSS,則為:run -c all -b 192.168.1.88
當兩臺機器的JBOSS都正常啟動后,將上面的Stateless Bean打包成jar包,發布到其中一臺%JBOSS_HOME%\server\all\farm目錄下面,這樣集群中的其它結點將自動發布這個jar包。
當發布完成之后,我們編寫客戶端:
Client.java
1
import java.util.Properties;
2
3
import javax.naming.InitialContext;
4
import javax.naming.NamingException;
5
6
public class Client
{
7
8
public static void main(String[] args)
{
9
Properties prop = new Properties();
10
prop.setProperty("java.naming.factory.initial",
11
"org.jnp.interfaces.NamingContextFactory");
12
prop.setProperty("java.naming.factory.url.pkgs",
13
"org.jboss.naming:org.jnp.interfaces");
14
prop.setProperty("java.naming.provider.url",
15
"192.168.1.88:1099,192.168.1.99:1099");
16
17
try
{
18
InitialContext ict = new InitialContext(prop);
19
HelloWorld helloWorld = (HelloWorld) ict
20
.lookup("HelloWorldBean/remote");
21
for (int i = 0; i < 10; i++)
{
22
helloWorld.sayHello("HelloWorld");
23
}
24
} catch (NamingException e)
{
25
e.printStackTrace();
26
}
27
}
28
}
29
上面這個客戶端配置了JBOSS服務器IP地址及端口,調用遠程接口的HelloWorldBean,并連續調用10次sayHello方法。在JBOSS控制臺上面可以看到打印出HelloWorld。
程序運行結果發現:在192.168.1.88 的JBOSS控制臺上面打印出4個HelloWorld,另一個JBOSS控制臺上面則打印出6個HelloWorld。加起來正好10個HelloWorld,可以發現兩臺JBOSS已經實現了負載均衡。
集群中的任何一個結點掛掉之后,程序都可以正常運行,