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 ...
随机推荐
- 0当执行游戏xc000007b错误的解决方法
如图所示,这个错误是让很多玩家担心. 出现这个错误,可能是硬件的问题,也可能是软件的问题. 可是.因为硬件引起该问题的概率非常小,而且除了更换硬件之外没有更好的解决方法,因此本文将具体介绍怎样通过软件 ...
- malloc功能具体解释
一.原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc ...
- android 读,写图片sd网卡资源
<pre name="code" class="html"><!--<span style="font-family: Ari ...
- BootStrap -- Grid System
<script src="jquery.1.9.js"></script> <script src="js/bootstrap.min.js ...
- Linux System Programming note 8 ——File and Directory Management
1. The Stat Family #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> ...
- Install Oracle 11gR2 on Debian wheezy(转)
Install Oracle 11gR2 on Debian wheezy 出处:http://gaiustech.wordpress.com/2013/06/26/howto-install-ora ...
- 【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告
原题地址: https://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 题目内容: Given a sing ...
- LeetCode: Distinct Subsequences [115]
[称号] Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequ ...
- 智能家居DIY
近期智能家居比較火,将房子简单改造下,也算体验智能家居. 本文解说的是用无线的方式,长处是:不用改造现有线路,直接安装模块就可以实现想要的功能,花的钱也较少,共六百左右 =============== ...
- java编程规范之java命名规范
想要成为一个优秀的程序员,首先要培养良好的编程习惯,为了提高代码的可读性,必须有好的命名规范. 这篇文章是小编结合网上的很多资料整理出来的,若有不当或错误的地方,欢迎大家指正 在文章开始前,为方便阅读 ...