JavaEE(10) - Session EJB的依赖注入、引用及任务调度
1. EJB依赖注入
#1. EJB开发(Net Beans创建EJB Module, 项目名称:CallHello)
Hello.java
package org.crazyit.service; import javax.ejb.*; @Local
public interface Hello {
public String hello(String name);
}
HelloBean.java
package org.crazyit.service; import javax.ejb.*; @Stateless(name = "Hello")
public class HelloBean implements Hello {
public String hello(String name) {
return name + ",您好,现在时间是" + new java.util.Date();
}
}
CallHello.java
package org.crazyit.service; import javax.ejb.*; @Remote
public interface CallHello {
String callHello(String name);
}
CallHelloBean.java
package org.crazyit.service; import javax.ejb.*; @Stateless(mappedName = "CallHello")
public class CallHelloBean implements CallHello { @EJB(beanName = "Hello")
private Hello hello; public String callHello(String name) {
final String prefix = "调用Hello EJB成功,返回值:";
String result = hello.hello("yeeku");
System.out.println(prefix + result);
return prefix + result;
}
}
#2. 客户端调用EJB (Net Beans创建Java Project: CallHelloTest)
CallHello.java
package org.crazyit.service;
public interface CallHello {
String callHello(String name);
}
EjbClient.java
package lee; import javax.rmi.*;
import javax.naming.*;
import java.util.Properties; import org.crazyit.service.*; public class EjbClient { public void test() throws NamingException {
//获取WebLogic中JNDI服务的Context
Context ctx = getInitialContext();
CallHello ch = (CallHello) ctx.lookup("CallHello#org.crazyit.service.CallHello");
System.out.println(ch.callHello("hehe!"));
} //工具方法,用来获取WebLogic中JNDI服务的Context
private Context getInitialContext() {
// 参见(4)
} public static void main(String[] args) throws Exception {
EjbClient client = new EjbClient();
client.test();
}
}
2. 资源依赖注入
#1. EJB开发(Net Beans创建EJB Module, 项目名称:CMT2)
Cmt2.java
package org.crazyit.service; import javax.ejb.*; @Remote
public interface Cmt2 {
void insert();
}
Cmt2Bean.java
package org.crazyit.service; import java.util.*;
import javax.ejb.*;
import javax.annotation.*;
import javax.naming.*; import java.sql.*;
import javax.sql.*; @Stateless(mappedName = "Cmt2")
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class Cmt2Bean implements Cmt2 { @Resource(mappedName="javaee")
private DataSource ds = null;
@Resource
private SessionContext sessCtx; public void insert() {
try {
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
int result = stmt.executeUpdate("insert into user_table values(null, '新用户' , 'bbb')");
System.out.println(result);
stmt.close();
conn.close();
}
catch (SQLException ex) {
ex.printStackTrace();
sessCtx.setRollbackOnly();
}
}
}
#2. 客户端调用EJB (Net Beans创建Java Project: CMT2Test)
Cmt2.java
package org.crazyit.service;
public interface Cmt2 {
void insert();
}
EjbClient.java
package lee; import javax.naming.*;
import java.util.Properties; import org.crazyit.service.*; public class EjbClient { public void test() throws NamingException {
//获取WebLogic中JNDI服务的Context
Context ctx = getInitialContext();
Cmt2 cmt2 = (Cmt2) ctx.lookup("Cmt2#org.crazyit.service.Cmt2");
cmt2.insert();
} //工具方法,用来获取WebLogic中JNDI服务的Context
private Context getInitialContext() {
// 参见(4)
} public static void main(String[] args) throws Exception {
EjbClient client = new EjbClient();
client.test();
}
}
3. 配置EJB引用
#1. EJB开发(Net Beans创建EJB Module, 项目名称:EJBRef)
Hello.jav(参见10.1)
HelloBean.java(参见10.1)
EJBRef.java
package org.crazyit.service; import javax.ejb.*; @Remote
public interface EJBRef {
String callHello(String name);
}
EJBRefBean.java
package org.crazyit.service; import javax.ejb.*; @Stateless(mappedName = "EJBRef", name = "EJBRef")
public class EJBRefBean implements EJBRef { @EJB(name = "ejb3/Hello")
private Hello hello; public String callHello(String name) {
final String prefix = "调用Hello EJB成功,返回值:";
String result = hello.hello("yeeku");
System.out.println(prefix + result);
return prefix + result;
}
}
META-INF/ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
version="3.0">
<enterprise-beans>
<session>
<ejb-name>EJBRef</ejb-name>
<ejb-local-ref>
<ejb-ref-name>ejb3/Hello</ejb-ref-name>
<ejb-ref-type>local</ejb-ref-type>
<local>org.crazyit.service.Hello</local>
</ejb-local-ref>
</session>
</enterprise-beans>
</ejb-jar>
#2. EJB开发(Net Beans创建EJB Module, 项目名称:EJBRef2)
Hello.jav(参见#1)
HelloBean.java(参见#1)
EJBRef.java(参见#1)
EJBRefBean.java
package org.crazyit.service; import javax.ejb.*; @Stateless(mappedName="EJBRef")
/* 通过@EJB配置一个EJB引用 */
@EJB(name="ejb3/Hello" , beanInterface=Hello.class)
public class EJBRefBean implements EJBRef {
//通过依赖注入来注入指定EJB
@EJB(name="ejb3/Hello")
private Hello hello; public String callHello(String name) {
final String prefix = "调用Hello EJB成功,返回值:";
String result = hello.hello("yeeku");
System.out.println(prefix + result);
return prefix + result;
}
}
#3. 客户端调用EJB (Net Beans创建Java Project: EJBRefTest)
EJBRef.java
package org.crazyit.service;
public interface EJBRef {
String callHello(String name);
}
EjbClient.java
package lee; import javax.naming.*;
import java.util.Properties; import org.crazyit.service.*; public class EjbClient { public void test() throws NamingException {
//获取WebLogic中JNDI服务的Context
Context ctx = getInitialContext();
EJBRef ch = (EJBRef) ctx.lookup("EJBRef#org.crazyit.service.EJBRef");
System.out.println(ch.callHello("hehe!"));
} //工具方法,用来获取WebLogic中JNDI服务的Context
private Context getInitialContext() {
// 参见(4)
} public static void main(String[] args) throws Exception {
EjbClient client = new EjbClient();
client.test();
}
}
4. 使用计时器进行任务调度
#1. EJB开发(Net Beans创建EJB Module, 项目名称:TimerEJB)
TimerEJB.java
package org.crazyit.service; import javax.ejb.*; @Remote
public interface TimerEJB {
void setTime(java.util.Date init, long interval);
void check(Timer timer);
}
TimerEJBBean.java
package org.crazyit.service; import javax.ejb.*;
import javax.annotation.*; @Stateless(mappedName = "TimerEJB")
public class TimerEJBBean implements TimerEJB { //定义设置定时器的方法
@Resource
TimerService timerService; public void setTime(java.util.Date init, long interval) {
//启动一个每隔interval时间就会启动定时器
timerService.createTimer(init, interval, "新的定时器!");
} //定义定时执行的方法
@Timeout
public void check(Timer timer) {
System.out.println("定时器信息:" + timer.getInfo());
System.out.println("模拟系统检查!");
}
}
#2. 客户端调用EJB (Net Beans创建Java Project: TimerEJBClient)
TimerEJB.java
package org.crazyit.service;
import java.util.Timer;
public interface TimerEJB {
void setTime(java.util.Date init, long interval);
void check(Timer timer);
}
EJBClient.java
package lee; import javax.naming.*;
import java.util.Properties; import org.crazyit.service.*; public class EjbClient { public void test() throws NamingException {
//获取WebLogic中JNDI服务的Context
Context ctx = getInitialContext();
TimerEJB te = (TimerEJB) ctx.lookup("TimerEJB#org.crazyit.service.TimerEJB");
//调用EJB中设置定时器的方法
te.setTime(new java.util.Date(), 1500);
System.out.println("客户端让定时器每个1.5s触发一次");
} //工具方法,用来获取WebLogic中JNDI服务的Context private Context getInitialContext() {
// 参见(4)
} public static void main(String[] args) throws Exception {
EjbClient client = new EjbClient();
client.test();
}
}
JavaEE(10) - Session EJB的依赖注入、引用及任务调度的更多相关文章
- [ASP.NET Core 3框架揭秘] 依赖注入[10]:与第三方依赖注入框架的适配
.NET Core具有一个承载(Hosting)系统,承载需要在后台长时间运行的服务,一个ASP.NET Core应用仅仅是该系统承载的一种服务而已.承载系统总是采用依赖注入的方式来消费它在服务承载过 ...
- JavaEE(9) - Session EJB的生命周期、事务及拦截器
1. SessionBean的生命周期 无状态Session Bean: 不存在状态-->待命状态-->被销毁状态 不存在状态-->待命状态: 1)通过构造器创建EJB实例 2)执行 ...
- Spring-Bean依赖注入(引用数据类型和集合数据类型)
为什么使用spring依赖注入详见–>依赖注入分析 1.创建实体类User类 package com.hao.domain; public class User { private String ...
- [ASP.NET Core 3框架揭秘] 依赖注入[5]: 利用容器提供服务
毫不夸张地说,整个ASP.NET Core框架是建立在依赖注入框架之上的.ASP.NET Core应用在启动时构建管道以及利用该管道处理每个请求过程中使用到的服务对象均来源于依赖注入容器.该依赖注入容 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[8]:服务实例的生命周期
生命周期决定了IServiceProvider对象采用怎样的方式提供和释放服务实例.虽然不同版本的依赖注入框架针对服务实例的生命周期管理采用了不同的实现,但总的来说原理还是类似的.在我们提供的依赖注入 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[9]:实现概述
<服务注册>.<服务消费>和<生命周期>主要从实现原理的角度对.NET Core的依赖注入框架进行了介绍,接下来更进一步,看看该框架的总体设计和实现.在过去的多个版 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[4]:一个Mini版的依赖注入框架
在前面的章节中,我们从纯理论的角度对依赖注入进行了深入论述,我们接下来会对.NET Core依赖注入框架进行单独介绍.为了让读者朋友能够更好地理解.NET Core依赖注入框架的设计与实现,我们按照类 ...
- [ASP.NET Core 3框架揭秘] 依赖注入:控制反转
ASP.NET Core框架建立在一些核心的基础框架之上,这些基础框架包括依赖注入.文件系统.配置选项和诊断日志等.这些框架不仅仅是支撑ASP.NET Core框架的基础,我们在进行应用开发的时候同样 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[7]:服务消费
包含服务注册信息的IServiceCollection集合最终被用来创建作为依赖注入容器的IServiceProvider对象.当需要消费某个服务实例的时候,我们只需要指定服务类型调用IService ...
随机推荐
- 苹果公司的新的编程语言 Swift 高级语言(十一)--初始化类的析构函数的一个实例
一 .实例的初始化 实例的初始化是准备一个类.结构或枚举的实例以便使用的过程. 初始化包含设置一个实例的每个存储属性为一个初始值,以及运行不论什么其他新的实例可以使用之前须要的设置或 ...
- ORACLE 11G没有备份文件參数文件在异机通过rman备份恢复找回被误删的数据
背景: 同事误删除线上数据.所以须要从备份中找回数据恢复. 真实屋漏偏逢连夜雨.船迟又遇打头风.前两天备份的磁盘坏块,如今仅仅有rman全备的.bak文件,没有控制文件和參数文件,所 ...
- SSH三作品的框架和流程
Hibernate工作的,为什么? 原理: 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xm ...
- Eclipse+Maven创建webapp项目<一> (转)
Eclipse+Maven创建webapp项目<一> 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显 ...
- 使用commons-fileupload进行上传
须要使用的包 这两个包在Apache官网上能够下载得到 commons-fileupload-1.3.1.jar是Apache的一个开源项目.废话不说直接说吧 前段页面 <form action ...
- mysql语句在node.js中的写法
总结一下mysql语句在node.js中的各种写法,参考了npm网站mysql模块给的实例. 查询 select //1 db.query('select * from tuanshang_users ...
- hdu3572 任务分配/最大流量推论全流
意甲冠军:将n分配的任务m机.到的每个任务需要的天数(如果没有持续的日常),并能做到在哪些天任务.询问是否有计划. 典型的任务(X)----日(Y)一半的最大流量,(因为这个任务是天之间的关系)处理器 ...
- Java读取图像和网络存储
该公司最近在搞一个Web工程,需要下载网络图片,那么既然恢复了一些最基本的东西.数据传输不同的流,简单,很容易下载网络打破了样品的图片,代码非常easy.贡献给大家! 结论,图片主要就四步: 1:拿到 ...
- 白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连续7-电话问卷调查
[例7-3 文本编辑框创建一个简单的调查问卷] 01 <!DOCTYPEhtml> 02 <html> 03 <head> 04 ...
- Windows8和Windows Phone应用开发主题编码汇总
原文:Windows8和Windows Phone应用开发主题编码汇总 在Windows 8和Windows Phone应用开发中经常需要自定义一些Windows Store应用风格主题,下面列举一些 ...