- 浏览: 99028 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (112)
- java (112)
- [书目20081126]转型:用对策略,做对事 (1)
- [转]c# winform 绘制圆角窗体 (1)
- Idiot's Note Four: 循环中continue和“if ”的细节注意 (1)
- ActiveMQ中消息游标 (1)
- http://sourceforge.net 打不开的解决办法 (1)
- 常用命令收集(系统设置) (1)
- jsessionid 问题分析 (1)
- JSP 页面不能解析EL表达式。 (1)
- SQLServer的备份语句 (1)
- Struts2 jQuery Plugin Showcase 学习笔记 (1)
- Razor view engine 基础语法 (1)
- 44个 灵感来自于“大自然”的网站设计(上) (1)
- 菜单多国语言化遇到的问题 (1)
- Mysql查看当前连接数 (1)
- Libgdx之旅-----LuaTutorial (1)
- 一些经典的BLOG (1)
- How do I prevent builds between multiple changes to the workspace? (1)
- RAP常用技巧 (1)
- Android常用类库包介绍 (1)
- 如何让新人尽快融入项目团队 (1)
- SharpDevelop (1)
- 生成PDF文件的Java库iText (1)
- 将Java包程序转换为Exe可执行文件 (1)
- hibernate hql 多个一查询 (1)
- 将视频放到网页上续 RM VS ASF (1)
- 程序员如何自我超越 (1)
- j2me实现手机通讯录的备份与还原 (1)
- Websphere 命令行部署与管理应用 (1)
- StackOverflow的404错误页面 (1)
- WM_CONCAT 函數的用法 (1)
- MyEclipse打jar包 (1)
- 通用分頁存儲過程. (1)
- 采用并行计算发挥多核CPU的威力 (1)
- mxgraph 之 增加对齐标线 等对graph的相关设置 (1)
- EJB中的@ejb注解 (1)
- UTMP分析 (1)
- .nET2.0小技巧 (1)
- spring security 和 struts 的filter顺序问题 (1)
- Session和Cookie的深入研究 (1)
最新评论
-
zhengyong7232:
<init-param> <param- ...
spring编码过滤器 -
emilyzhanghong:
你好:
请教下.你这里说的 B的war包中包含X的class ...
Maven中如何配WAR依赖WAR和JAR的多模块项目结构 -
jiangcs520:
好赞
程序员如何自我超越 -
wodentt:
看不懂....
将Java包程序转换为Exe可执行文件 -
student_stu:
...
jsessionid 问题分析
(本文是转载其他人的技术文章,觉得说得挺浅显易懂,特借来学习)
在前面学习的例子中,只有一个EJB,但是对于一个真实的项目,EJB的数量可以有很多,而且EJB之间也会互相调用,那么在一个EJB里面,如何去调用另一个EJB呢?这正是本节要介绍的内容。
新建一个bean
Other.java
public interface Other {
public String sayMe();
}
OtherBean.java
@Stateless
// 不写的话默认是本地接口
public class OtherBean implements Other {
public String sayMe() {
return "other";
}
}
现在是要在HelloWorldBean里面调用OtherBean里面的sayMe方法。 那么我们在helloworld里面怎么获取otherbean ejb呢?有人可能去想到这种方法:
public class HelloWorldBean implements HelloWorld, HelloWorldLocal {
private Other other = new OtherBean();
public String sayHello(String name) {
return name + "说:你好," + other.sayMe();
}
}
这种方法是绝对错误的,如果通过这种方法得到的对象,它不是EJB对象,而只是一个简简 单单的Java对象。
我们要得到一个EJB对象,我们可以采用两种方法。一种方法是通过JNDI查找,第二种方法是采用依赖注入。那么我们首先学一下通过JNDI查找的方式来得到other EJB。
HelloWorldBean.java
@Stateful //指明这个ejb是无状态的会话bean
@Remote(HelloWorld.class) //将HelloWorld这个接口指定为远程接口
@Local(HelloWorld.class) //将HelloWorld这个接口指定为本地接口
//在这个EJB里面,不单具有本地接口,也有远程接口
public class HelloWorldBean implements HelloWorld, HelloWorldLocal {
public String sayHello(String name) {
try {
InitialContext ctx = new InitialContext();
Other other = (Other)ctx.lookup("OtherBean/local");
return name + "说:你好," + other.sayMe();
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
}
EJBClient.java
public class EJBClient {
public static void main(String[] args) {
try {
InitialContext ctx = new InitialContext();
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
System.out.println(helloworld.sayHello("注入者"));
} catch (NamingException e) {
System.out.println(e.getMessage());
}
}
}
除了JNDI查找的方式外,还可以通过依赖注入的方式来得到other ejb。
HelloWorldBean.java
@Stateful //指明这个ejb是无状态的会话bean
@Remote(HelloWorld.class) //将HelloWorld这个接口指定为远程接口
@Local(HelloWorld.class) //将HelloWorld这个接口指定为本地接口
//在这个EJB里面,不单具有本地接口,也有远程接口
public class HelloWorldBean implements HelloWorld, HelloWorldLocal {
@EJB Other other; //通过这个注解就可以把EJB注入进来
public String sayHello(String name) {
return name + "说:你好," + other.sayMe();
}
}
大家比较一下,采用EJB注解注入other EJB,和采用JNDI查找的方式来得到EJB,在代码量上面显然@EJB注解代码量更少,而且在使用上面比JNDI的方式更优雅一些。
那么以后大家在做项目的时候,如果要使用到别的EJB的话,可以采用注解的方式来注入要使用的EJB。
@EJB Other other; 这种注入它里面的工作原理是怎样的呢?
大概是这样的:EJB容器当解释到类里面的字段当带有@EJB注解的时候,它就会根据这个字段other的类型也就是接口Other去寻找是否有实现了这个接口的EJB,如果寻找到了实现了Other这个接口的EJB,并且只寻找到一个的时候,那么它就会把这个EJB注入进来。
那么有同学会问:如果寻找到了两个EJB都实现了Other这个接口,那会出现什么问题呢? 这时候会报一个错,因为它不知道我们需要注入哪一个。
那么这时候又可能会有同学会问:是不是没有办法解决这个问题呢? 当然,办法是有的。
当出现这种情况的时候,我们就要明确指定我们需要注入的是哪一个EJB。 现在假设Other这个接口被两个EJB实现了,我们要注入的是OtherBean这个EJB,那么我们会这样:
@EJB(beanName="OtherBean") Other other; 通过这种形式就可以明确指定需要注入的EJB了,哪怕Other这个接口已被很多EJB实现了。
@EJB这个EJB注解它只能够注入EJB,其它那些资源类型是不能采用这个注解来注入的。那么好比我们现在要使用EJB里面的定时服务,这时候我们就不能使用这个@EJB来注入定时服务了。
那么我们应该使用哪些注解呢?应该使用@Resource注解,好比我们要注入定时服务:@Resource TimerService timerService; 注入数据源,也是用@Resource注解
发表评论
-
Session和Cookie的深入研究
2012-02-08 14:42 808Session和Cookie的深入研究 作者:孙鑫 ... -
spring security 和 struts 的filter顺序问题
2012-02-08 12:03 1043使用spring security3 和struts2 ... -
.nET2.0小技巧
2012-02-04 15:09 771<div class="pos ... -
UTMP分析
2012-02-03 10:34 839[size=small;]分析引擎包含:<br& ... -
mxgraph 之 增加对齐标线 等对graph的相关设置
2012-02-02 11:49 1639graph.setConnectable(tru ... -
采用并行计算发挥多核CPU的威力
2012-02-01 09:24 740<p><strong>< ... -
通用分頁存儲過程.
2012-01-11 13:29 805MSSQL中要想分頁只能借助 row_number() ... -
MyEclipse打jar包
2011-12-28 14:43 982<span style="font-f ... -
WM_CONCAT 函數的用法
2011-12-28 12:09 953<span style="font-f ... -
StackOverflow的404错误页面
2011-12-21 17:28 868<span style="color: ... -
Websphere 命令行部署与管理应用
2011-12-21 11:44 956<span style="color: ... -
j2me实现手机通讯录的备份与还原
2011-12-20 13:44 974现在用的手机用了4年半了,其中摔过n次,但是从没坏过, ... -
程序员如何自我超越
2011-12-19 13:24 647<span style="font-f ... -
将视频放到网页上续 RM VS ASF
2011-12-17 15:59 903发现网页上包含RM视频文件的一个致命弱点,那就是必须将 ... -
hibernate hql 多个一查询
2011-12-15 16:49 948Session s=sessionFactory.ge ... -
将Java包程序转换为Exe可执行文件
2011-12-14 10:39 842<p class="MsoNorma ... -
生成PDF文件的Java库iText
2011-12-14 09:44 748<p class="MsoNo ... -
SharpDevelop
2011-12-13 14:54 1201SharpDevelop是一个DotNet平台下的免费 ... -
如何让新人尽快融入项目团队
2011-12-13 10:54 744刚进公司的新人,从心理上要有个从学校到公司的转变的过 ... -
Android常用类库包介绍
2011-12-12 13:54 817<p class="MsoNorm ...
相关推荐
在本篇讲解中,我们将深入探讨Java企业版(Java EE)中的Enterprise JavaBeans(EJB)3技术,特别是如何通过注解方式来注入并使用其他的EJB或服务。EJB 3是Java EE中用于构建可扩展、分布式、事务处理和安全的企业级...
在EJB 3.0版本中,引入了注解(Annotation)来简化组件的配置,使得实体Bean(Entity Bean)成为纯粹的Plain Old Java Object(POJO),与Hibernate持久化实体对象的概念相融合。这意味着开发者可以不再依赖于复杂的...
在配置过程中,勾选"Enable Hibernate Annotations Support"和"hibernate 3.3 Advance Supper Libraries"是为了启用Hibernate注解功能,这是EJB注解的基础。Hibernate 3.3及以上版本支持注解,使得我们可以直接在...
总结,EJB3中的注解大大简化了Java EE应用的开发,@EJB和@Resource注释提供了方便的依赖注入机制,而实体Bean结合persistence.xml文件则实现了ORM(对象关系映射),使得数据库操作更加便捷。理解并熟练运用这些注解...
EJB3.0实体的注解规范主要涵盖了Java企业版(Java EE)中实体Bean的定义方式,这一规范也适用于Java Persistence API (JPA),并且整合了Hibernate的特有扩展。在EJB3.0中,实体Bean被设计为简单的Plain Old Java ...
在EJB3中,@EJB注解可以指定被注入对象的接口、名称和JNDI名称。对于有多个实现类的接口,可以通过beanName属性指定具体实现。完整的@EJB注解示例如下: ```java @EJB(name = "ejb/shopping-cart", beanName = ...
在EJB 3.0及以后版本中,Local接口通过实现无注解的接口来定义,或者通过使用`@Local`注解的接口来定义。例如: ```java public interface MyLocalBean { void doSomething(); } ``` 2. **Remote访问**:Remote...
2. **实体Bean(Entity Beans)**:EJB3中的实体Bean不再需要编写大量的接口和Home接口,而是通过注解@Entity来定义,使用JPA(Java Persistence API)进行数据持久化,大大简化了对象关系映射。 3. **会话Bean...
这篇博客"使用EJB+Annotation实现AOP的DEMO"主要介绍了如何在EJB中利用注解(Annotation)来实现AOP的功能。在Java EE中,EJB 3.0及后续版本引入了大量的注解,使得开发者可以免去编写XML配置文件,直接在代码中声明...
5. **实体Bean(Entity Beans)**:EJB3.0中的实体Bean主要基于JPA,使用`@Entity`注解标识,允许开发者直接操作数据库记录。实体Bean可以通过`@GeneratedValue`注解来自动分配主键。 6. **容器管理的事务...
EJB3中的EntityBean主要基于JPA(Java Persistence API),采用注解驱动的方式进行对象关系映射(ORM)。`@Entity`注解标记实体类,`@Table`定义映射的数据库表,`@Id`标识主键字段。此外,还有`@GeneratedValue`...
在EJB 3.0中,实体Bean的使用变得更加简单,通过使用注解(如@Entity和@Id),开发者可以直接在POJO(Plain Old Java Object)上声明实体,不再需要复杂的接口和Home/Remote接口。 2. **会话Bean(Session Beans)*...
- **实体Bean(Entity Bean)**:代表数据库中的持久化对象,EJB3引入了JPA(Java Persistence API),使得实体Bean的定义更简洁,通过注解可以直接映射到数据库表。 - **会话Bean(Session Bean)**:处理业务...
- **注解驱动**:EJB3.0引入了注解,使得开发者无需编写XML配置文件,可以直接在类和方法上添加注解来定义Bean的行为。例如,`@Stateless` 注解用于声明一个类为无状态SessionBean。 - **依赖注入**:通过`@EJB`...
依赖注入(DI)是EJB 3.0的另一个重要特性,它允许通过`@EJB`、`@Inject`或`@Resource`注解在不需手动创建对象的情况下,将依赖项注入到bean中。这提高了代码的可测试性和可维护性。 ### 5. 容器管理事务 EJB 3.0...
在Java企业级开发中,Enterprise JavaBeans (EJB) 是一种核心组件模型,用于构建可扩展、安全且事务管理的服务器端应用程序。EJB3.0是EJB规范的一个重大里程碑,它引入了许多改进,使得EJB更加轻量级、开发者友好,...
- 配置JNDI连接以在Tomcat中远程访问EJB。 - **JBOSS集成环境中的WEB应用调用EJB**: - 在同一服务器上配置JBOSS和Tomcat以实现无缝通信。 #### 3. 开发前的准备 - **熟悉JBOSS目录结构**: - `bin`:包含启动...
EJB 3.0引入了许多简化开发的新特性,比如注解(Annotations)的广泛使用,使得配置文件大大减少,提高了开发效率。例如,@Stateless、@Stateful、@Entity和@MessageDriven注解分别用于标记会话bean、有状态会话bean...
**在EJB(Enterprise JavaBeans)中加入拦截器** EJB是Java EE平台中的核心组件,用于构建可扩展、安全且事务处理的分布式应用程序。拦截器(Interceptors)是EJB 3.0引入的一个重要特性,它们允许开发者在EJB方法...