EJB3.0与JBOSS4.0.4GA集群部署实战(二)

XiaoMuFireAnt 2010-07-09

环境

MyEclipse5.5

JBoss4.0.4

测试目的:群集EJB3

首先我门先启动JBOSS.下面我用%JBOSS%来代替JBOSS的跟目录

在%JBOSS%\bin目录下先创建一个RUN.BAT的快捷方式然后,鼠标右击属性给新做的快捷方式加2个参数第1个参数是-CALL目的是让他启动ALL服务,第2个参数是-B192.168.0.60都开出来了把是本机IP只有加了IP在可以让他被在局域内部被访问到.我做的是3台计算机的群集,所以3太机子上的JBOSS都的这么写注意写对IP.然后启动JBOSSOK环境就算OK了然后开始写EJB3

写远程接口

publicinterfaceHelloRemoteextendsSerializable{

publicStringgetString(inti);

然后写本地接口

@Stateless

@Clustered//EJB3群集的标签

@Remote(HelloRemote.class)

publicclassHelloRemoteServiceimplementsHelloRemote{

publicStringgetString(inti){

System.out.println("我被执行了第"+i+"次");

returnnull;

}

}

EJB写的很简单就是在服务器上打一句话而已,完了将EJB3打成JAR包部署到

%JBOSS%\server\all\farm目录下,注意在这个目录发布完后,其他机子上同时会响应及其他机子上也会发布完成这个JAR包.下面开始运行这个EJB,当然要重新在局域网内找一台机子做客户端调用.

首先在那台机子上将刚才的JAR包导入项目中完了写测试代码

PublicclassEJBFactory{

publicstaticObjectgetEJB(Stringjndipath){

try{

Propertiesprops=newProperties();

props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");

props.setProperty("java.naming.provider.url","192.168.0.149:1099,192.168.0.60,192.168.0.51:1099");

props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");

props.setProperty("jnp.disableDiscovery","true");

//

//props.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");

//props.setProperty("java.naming.factory.url.pkgs","com.sun.enterprise.naming");

//props.setProperty("java.naming.provider.url","192.168.0.251:3700");

//props.setProperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");

//

InitialContextctx=newInitialContext(props);

returnctx.lookup(jndipath);

}catch(NamingExceptione){

e.printStackTrace();

}

returnnull;

}

}

看清楚我写了3个IP地址,这样做的好处是随便那个机子挂掉其他机子一样可以运行

测试代码

publicclassTest{

publicstaticvoidmain(String[]args){

HelloRemotehelloRemote=(HelloRemote)EJBFactory.getEJB("HelloRemoteService/remote");

for(inti=0;i<10;i++){

helloRemote.getString(i);

}

}

}

运行测试代码我门可以发现在3台服务器上他会打印出结果.这是JBOSS自己的负载平衡功能帮助我门实现的.

在测试过程中,我遇到很多问题,主要是客户端的jar包引用问题

1.客户端的jar包包括:

jboss-aop-jdk50.jar

jboss-aspect-library-jkd50.jar

jboss-ejb3-client.jar

jboss-client.jar

aopalliance.jar

2.服务端需要ejb-3.0-api.jar这个jar包

3.要确保你的jboss-4.0.4.GA服务器安装了jboss-EJB-3.0_RC9-FD这个补丁包,以便jboss服务器支持集群功能.当在多台机器上同时启动jboss服务时,在其中一台机器上将包含有EJB集群功能的无会话Bean的jar包放入到farm目录下,其他机器会自动同步拥有此jar包.

4.如果运行过程中只有一台机器打印出结果,而其他机器均无反应,则可能是jboss集群功能的配置问题,

修改jboss-4.0.4.GA\server\all\deploy\cluster-service.xml配置文件中的PartitionConfig属性配置,默认为udp方式,将其改为tcp/ip方式,如下:

<Config>

<TCPbind_addr="localhost"start_port="7800"loopback="true"/>

<TCPPINGinitial_hosts="localhost[7800],localhost[7800]"port_range="3"timeout="3500"

num_initial_members="3"up_thread="true"down_thread="true"/>

<MERGE2min_interval="5000"max_interval="10000"/>

<FDshun="true"timeout="2500"max_tries="5"up_thread="true"down_thread="true"/>

<VERIFY_SUSPECTtimeout="1500"down_thread="false"up_thread="false"/>

<pbcast.NAKACKdown_thread="true"up_thread="true"gc_lag="100"

retransmit_timeout="3000"/>

<pbcast.STABLEdesired_avg_gossip="20000"down_thread="false"up_thread="false"/>

<pbcast.GMSjoin_timeout="5000"join_retry_timeout="2000"shun="false"

print_local_addr="true"down_thread="true"up_thread="true"/>

<pbcast.STATE_TRANSFERup_thread="true"down_thread="true"/>

</Config>

相关推荐

doctorvian / 0评论 2017-12-06