情景:有两个bean,一个是HelloWorldBean,一个是OtherBean,我们需要在HelloWorldBean的业务方法中调用OtherBean的业务方法,如何实现呢?
other接口
package cn.com.xinli.ejb3;
public interface Other
{
public String sayMe(String name);
}
接口实现
package cn.com.xinli.ejb3.impl;
import javax.ejb.Stateless;
import cn.com.xinli.ejb3.Other;
/*不写接口的类型则默认是本地接口*/
@Stateless
public class OtherBean implements Other
{
public String sayMe(String name)
{
return name+"也是一个bean";
}
}
在一个bean中引用其他bean 的服务,有两种实现方式:
一.使用jndi查找
二.使用注解
注意:
1.Ejb注解只能注入ejb,数据源呀,定时器呀需要Resources注解
2.如果有两个以上的ejb实现了一个接口,需要显示的写name 属性
package cn.com.xinli.ejb3.impl;
import javax.activation.DataSource;
import javax.annotation.Resource;
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateful;
import javax.ejb.TimerService;
import cn.com.xinli.ejb3.HelloWorld;
import cn.com.xinli.ejb3.HelloWorldLocal;
import cn.com.xinli.ejb3.Other;
/*表明这个ejb是有状态的会话bean*/
@Stateful
/*声明这个ejb的远程接口是HelloWorld,必须要写这个注解,否则调用的时候会报错*/
/*声明这个ejb的本地接口是HelloWorldLocal,必须要写这个注解,否则调用的时候会报错*/
@Local(HelloWorldLocal.class)
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld,HelloWorldLocal
{
/*如果other接口被两个以上的ejb实现了,那么我们就必须使用@EJB的 name
* 属性,不然ejb容器不知道我们到底需要注入哪个ejb,则会抛一个例外
* 注入bean的名称为bean的简单名称,也就是不包含包名的简单类名
* */
@EJB(name="OtherBean") Other other;
//@EJB Other other;
/*注入定时器*/
//@Resource TimerService timerService;
/*注入数据源*/
//@Resource (mappedName="java:xxx") DataSource dataSource;
public String sayHello(String name)
{
//方式一
/*
try
{
InitialContext ctx=new InitialContext();
Other other=(Other)ctx.lookup("OtherBean/local");
return name+",你好,世界!我的ejb3的第一个例子!"+other.sayMe("ryp");
} catch (NamingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
//方式二
return name+",你好,世界!我的ejb3的第一个例子!"+other.sayMe("ryp");
}
}
编译->打包->部署->运行->ok
分享到:
相关推荐
5. **依赖注入(Dependency Injection, DI)**:EJB3引入了JSR-250规范,通过@EJB、@Inject和@Resource等注解,实现了组件间的依赖关系管理,无需手动管理对象实例。 6. **事务管理**:EJB3提供了声明式事务管理,...
第8章:EJB中的事务支持 - **主要内容:** - 事务的基本概念。 - EJB中的事务管理模型。 - 事务传播行为(Transaction Propagation)。 - 事务的隔离级别(Isolation Level)。 - 事务的回滚和补偿机制。 - **...
4. **依赖注入**:使用`@EJB`注解可以实现依赖注入,无需手动查找或创建bean实例。 **Struts** 是一个开源的MVC(Model-View-Controller)框架,用于构建基于Java Servlet的Web应用程序。它的主要功能包括: 1. **...
- 通过`@EJB`注解注入本地和远程Session Bean。 8. **定时服务** - 创建和管理定时任务。 - 示例:定期执行数据同步、发送邮件等。 9. **安全服务** - 理解EJB的安全模型。 - 自定义安全领域,实现细粒度权限...
定时器服务是EJB 3中一个重要的新特性,允许开发者在容器中定义定时任务,无需手动管理线程或者使用第三方库。 2. **EJB定时器服务基础** EJB定时器服务提供了一种在容器级别创建和管理定时任务的方法。它通过`@...
在这个“第一个EJB简单例子”中,我们将深入探讨如何创建和理解基本的EJB组件。 1. **EJB组件类型**: - **会话Bean(Session Beans)**:代表客户端的一次交互或会话。它们可以是状态ful(维护会话状态)或状态...
- **简化部署**:EJB3 允许开发者通过注解来声明 Bean 的行为,大大减少了 XML 配置的使用。 - **POJOs**:EJB3 支持纯 Java 对象 (POJOs),使得 EJBs 更加轻量级和易于开发。 - **生命周期管理**:EJB 容器负责管理...
@EJB注解用于注入其他Bean,而@PersistenceContext和@PersistenceUnit则用于注入JPA实体管理和持久化单元。 3. **Java Persistence API(JPA)集成** EJB 3.0与JPA的整合使得对象/关系映射(ORM)变得更加直观。...
EJB(Enterprise JavaBeans)是Java EE平台中的一个核心组件,用于构建企业级分布式应用程序。EJB3是其第三个主要版本...通过阅读EJB3.doc文档,你可以深入了解EJB3的每个方面,并逐步成长为一名熟练的Java EE开发者。
EJB3是其第三个主要版本,引入了大量的改进,极大地简化了开发过程,降低了对XML配置的依赖,并引入了注解驱动的开发模式。 在EJB3中,有三种主要类型的Bean:Session Beans、Message Driven Beans(MDB)和Entity ...
- 创建一个简单的EJB3项目,并通过JBoss服务器运行。 - 示例代码通常包含基本的Session Bean实现。 - **在Tomcat中调用EJB**: - 解释如何在独立的Tomcat服务器中集成并调用JBoss上的EJB服务。 - **Web应用调用...
EJB3引入了依赖注入的概念,通过`@EJB`、`@Inject`和`@Resource`注解,可以方便地注入其他Bean、资源或服务,实现了松耦合的设计,提高了代码的可测试性和可维护性。 5. **事务管理** EJB3提供了强大的事务管理...
总的来说,EJB 3通过注解、依赖注入、简化ORM和事务管理等方式,极大地提升了开发效率和代码的可读性,减少了错误的可能性,使得EJB更适合现代企业应用的开发需求。如果你正在探索或使用EJB 3,这些摘记和文档将是你...
在 EJB3 中,也可以使用 `@EJB` 注解直接注入 Bean。 6. **源码分析** 在提供的 `HelloWorld` 示例中,我们可以看到 Bean 类实现了简单的业务逻辑,例如返回一条问候语。这展示了如何在无状态会话 Bean 中编写业务...
EJB 3.0通过CDI(Contexts and Dependency Injection)提供依赖注入功能,允许bean自动获得它们需要的其他bean和服务,而无需手动创建和管理依赖关系。`@Inject` 注解用于声明依赖。 ### 6. 事务管理 EJB容器自动...