JBoss 系列六十六:JBoss 7/WildFly 集群之无状态会话Bean集群 - II(示例)
2013-12-13 16:14
567 查看
概述
本文分两个部分:无状态会话Bean集群和无状态会话Bean集群示例无状态会话Bean集群
关于无状态会话Bean集群的基本理论参照JBoss 7/WildFly 集群之无状态会话Bean集群 - I(基本理论)。无状态会话Bean集群示例
无状态会话Bean集群示例架构如下图:如图所示:
JBoss node1和node2组成一个集群,node1对应IP地址10.66.218.46,node2对应IP地址10.66.218.47
EJB 客户端位于另一台机器
我们通过如下几步部署运行无状态会话Bean集群示例。
定义StatelessSession接口
public interface StatelessSession { public String getServer(); }
定义StatelessSession接口实现
@Stateless @Remote(StatelessSession.class) @Clustered public class StatelessSessionBean implements StatelessSession { public String getServer() { StringBuffer sb = new StringBuffer(); String ip = System.getProperty("jboss.bind.address"); if(null != ip) { sb.append("jboss.bind.address: " + ip); sb.append(", jboss.node.name: "); } String jbossNodeName = System.getProperty("jboss.node.name"); if(null != jbossNodeName) { sb.append(jbossNodeName); } String result = sb.toString(); System.out.println(result); return result; } }
启动JBoss并部署无状态会话Bean集群应用
EJB远程调运我们需要创建Application User,具体执行JBOSS_HOME/bin/add_user.sh或JBOSS_HOME/bin/add_user.bat创建Application User democlient/password1!。我们使用如下命令分别启动两个JBoss节点:
./standalone.sh -c standalone-ha.xml -b 10.66.218.46 -bmanagement=10.66.218.46 -u 239.255.100.100 -Djboss.node.name=node1 ./standalone.sh -c standalone-ha.xml -b 10.66.218.47 -bmanagement=10.66.218.47 -u 239.255.100.100 -Djboss.node.name=node2
无状态会话Bean集群应用代码位于:https://github.com/kylinsoong/cluster/tree/master/demo/slsb。我们可以使用软件安装及资料下载中描述的方法下载,编译生成部署包cluster-demo-slsb.jar。使用使用4种方式部署应用到JBoss7/WildFly中描述的方法分别部署cluster-demo-slsb.jar到两个JBoss节点。
定义EJB客户端
EJB客户端配置文件jboss-ejb-client.properties内容如下:endpoint.name=client-endpoint remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=node1,node2 remote.connection.node1.host=10.66.218.46 remote.connection.node1.port=4447 remote.connection.node1.connect.timeout=500 remote.connection.node1.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false remote.connection.node1.username=democlient remote.connection.node1.password=password1! remote.connection.node2.host=10.66.218.47 remote.connection.node2.port=4447 remote.connection.node2.connect.timeout=500 remote.connection.node2.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false remote.connection.node2.username=democlient remote.connection.node2.password=password1! remote.clusters=ejb remote.cluster.ejb.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false remote.cluster.ejb.username=democlient remote.cluster.ejb.password=password1!
EJB客户端调运类如下:
public class StatelessSessionBeanClient { private String applicationContext = "cluster-demo-slsb"; private String SLSB_JNDI = "ejb:/" + applicationContext + "/StatelessSessionBean!" + StatelessSession.class.getName() ; private void execute() throws Exception { Hashtable<String, String> jndiProps = new Hashtable<String, String>(); jndiProps.put( Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming" ); Context context = new InitialContext( jndiProps ); StatelessSession slsb = (StatelessSession)context.lookup(SLSB_JNDI); for (int i = 0; i < 10; i++){ System.out.println(slsb.getServer()); } } public static void main(String[] args) throws Exception { new StatelessSessionBeanClient().execute(); } }
运行StatelessSessionBeanClient输出如下:
jboss.bind.address: 10.66.218.47, jboss.node.name: node2 jboss.bind.address: 10.66.218.46, jboss.node.name: node1 jboss.bind.address: 10.66.218.46, jboss.node.name: node1 jboss.bind.address: 10.66.218.47, jboss.node.name: node2 jboss.bind.address: 10.66.218.46, jboss.node.name: node1 jboss.bind.address: 10.66.218.46, jboss.node.name: node1 jboss.bind.address: 10.66.218.47, jboss.node.name: node2 jboss.bind.address: 10.66.218.46, jboss.node.name: node1 jboss.bind.address: 10.66.218.47, jboss.node.name: node2 jboss.bind.address: 10.66.218.47, jboss.node.name: node2
我们看到同一个EJB Client通过相同的client stub的一系列EJB调运会进行负载均衡,即请求在集群中两个节点中切换。
相关文章推荐
- JBoss 系列六十八:JBoss 7/WildFly 集群之有状态会话Bean集群 - II(示例)
- JBoss 系列六十七:JBoss 7/WildFly 集群之有状态会话Bean集群 - I(基本理论)
- JBoss 系列六十五:JBoss 7/WildFly 集群之无状态会话Bean集群 - I(基本理论)
- JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)
- JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)
- JBoss 系列五十四:JBoss 7/WildFly 集群之 HornetQ Messaging - II(示例)
- JBoss 系列六十三:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - II(Hibernate查询缓存和二级缓存示例)
- JBoss 系列十五:JBoss7/WildFly集群中新节点加入状态交换过程
- JBoss 系列五十五:JBoss 7/WildFly 集群之 HornetQ Messaging - III(示例补充说明)
- JBoss 系列五十六:JBoss 7/WildFly 集群之 Java Persistence API (JPA) - I(基本理论)
- JBoss 系列四:JBoss7/WildFly中EJB调运示例
- JBoss下的EJB3开发无状态会话Bean
- JBoss+Ant实现EJB无状态会话bean实例
- JBoss+Ant实现EJB无状态会话bean实例
- JBoss+Ant实现EJB无状态会话bean实例
- JBoss 系列四十八:JBoss 7/WildFly 使用TCP构建集群
- JBoss 系列四十八:JBoss 7/WildFly 使用TCP构建集群
- Eclipse3.1.1+jboss4.0.5开发J2EE中的EJB(无状态会话Bean)
- EJB系列(三)--有状态会话Bean和无状态会话Bean
- Eclipse3.2.1+jboss4.0.5开发J2EE中的EJB(无状态会话Bean 附图)