EJB3(1)

EJB无状态会话Bean实战
本文介绍如何创建及部署一个基于GlassFish v2的简单无状态会话Bean,并通过Web模块进行本地及远程调用。文章涵盖EJB远程接口定义、实现类创建、依赖注入、JNDI查找等步骤。

以下代码建立在glassfish v2基础上:

新建一个EJB模块
先写一个最简单的无状态Session Bean,首先定义一个远程接口:

@Remote
public interface HelloRemote {

    String sayHi(String name);
    
}

用@Remote标注表明这是一个远程接口,在接口里声明一些业务方法。接着定义一个会话Bean实现该接口:

@Stateless
public class HelloBean implements HelloRemote {

    
public String sayHi(String name) {
        
return "Hi " + name;
    }

    
}


@Stateless标注表明这是一个无状态会话Bean,完成了这个简单的Demo后,打包部署到服务器上。接着我们来测试这个会话Bean,新建一个WEB模块,我们利用这个web应用来远程调用会话Bean。我们可以在web模块里新建一个Servlet:

public class HelloServlet extends HttpServlet {
    @EJB
    
private HelloRemote helloBean;
在Servlet里定义了一个成员变量,@EJB标注表明远程接口的代理将依赖注入到成员变量,在doGet或doPost方法里可以直接使用该代理调用会话Bean的业务方法:

 

PrintWriter out = response.getWriter();
        
try {
           out.println(helloBean.sayHi(
"Tom"));
        }
 finally 
            out.close();
        }

JSP却有所不同,这里不能使用@EJB标注,要使用传统的JNDI lookup方式:

<%
            InitialContext ctx 
= new InitialContext();
            HelloRemote helloBean 
= (HelloRemote)ctx.lookup(HelloRemote.class.getName());
            out.println(helloBean.sayHi(
"Tom"));
%>


这个测试用web模块已经完成,将WEB模块打包部署后即可以运行
不过,如果我们自己指定了会话Bean的JNDI名,那么以上的测试代码将发生异常,例如:

@Stateless(mappedName="hello")
public class HelloBean implements HelloRemote {

    
public String sayHi(String name) {
        
return "Hi " + name;
    }

    
}


这里我们指定了会话bean的JNDI名为"hello",更改后的EJB模块需要重新部署,还要更改相应的Servlet和Jsp中的代码:

@EJB(mappedName="hello")
    
private HelloRemote helloBean;


Servlet已经更改了,只有一点点不同。

<%
            InitialContext ctx 
= new InitialContext();
            HelloRemote helloBean 
= (HelloRemote)ctx.lookup("hello");
            out.println(helloBean.sayHi(
"Tom"));
 
%>


Jsp也做了小小的改动,如此更新后重新部署WEB模块,测试代码即可顺利运行

需要注意的是:

1、根据EJB容器的不同,EJB的JNDI生成规则并不一样,最好还是从各服务器的JNDI树查找

2、如果是远程调用,还需要将EJB模块jar包和服务器的客户端jar包(如weblogic10g,需要wlclient.jar、wl-j2ee-client.jar)拷贝到客户端应用的lib目录下

3、如果是远程调用,还需要指定JNDI服务器上下文环境的配置信息Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL,各服务器具体配置不一样:

 

服务器Context.INITIAL_CONTEXT_FACTORYContext.PROVIDER_URLContext.URL_PKG_PREFIXES
weblogicweblogic.jndi.WLInitialContextFactoryt3://localhost:7001 
jbossorg.jnp.interfaces.NamingContextFactorylocalhost:1099org.jboss.naming:org.jnp.interfaces
glassfishcom.sun.enterprise.naming.SerialInitContextFactorylocalhost:8080 

 

【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值