ejb客户端的三种调用方法,以及InitialContext lookup后的jndi对象在服务重启后缓存失效的问题

本文介绍了ejb客户端调用ejb服务的两种方法,包括直接缓存jndi对象和利用Spring的JndiObjectFactoryBean。当ejb服务重启时,缓存的jndi对象会失效,导致服务不可用。在Spring中,可以通过配置JndiObjectFactoryBean的cache属性来控制是否缓存,避免服务重启的影响。
摘要由CSDN通过智能技术生成


1、第一种调用方法:

Properties p = new Properties();
		p.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
		p.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
		p.setProperty("java.naming.provider.url", "10.10.77.87:1199");
		
		InitialContext ctx = new InitialContext(p);
		CreditDirectPayRemote remote = (CreditDirectPayRemote) ctx.lookup("creditDirectPay/pay/remote");

在使用ejb客户端时,如果将jndi对象缓存起来,不用每次都lookup,这样可以节省一点效率,但是当ejb服务重启时,缓存的jndi对象将不能使用。

	Properties p = new Properties();
		p.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
		p.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
		p.setProperty("java.naming.provider.url", "10.10.77.87:1199");
		
		InitialContext ctx = new InitialContext(p);
		CreditDirectPayRemote remote = (CreditDirectPayRemote) ctx.lookup("creditDirectPay/pay/remote");
				
		for(;;){
			try {
				System.out.println("第"+(++i)+"次:");
				rs= remote.directPay();
				Thread.sleep(1500);
			} catch (Exception e) {
				System.out.println("异常:"+e.getMessage());
				Thread.sleep(1000);
			}
		}	

将ejb服务重启后,报如下错误:

异常:Unreachable?: Service unavailable.
java.lang.RuntimeException: Unreachable?: Service unavailable.
at org.jboss.aspects.remoting.ClusterChooserInterceptor.invoke(ClusterChooserInterceptor.java:176)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.ClientTxPropagationInterceptor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值