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的依赖注入、引用及任务调度的更多相关文章

  1. [ASP.NET Core 3框架揭秘] 依赖注入[10]:与第三方依赖注入框架的适配

    .NET Core具有一个承载(Hosting)系统,承载需要在后台长时间运行的服务,一个ASP.NET Core应用仅仅是该系统承载的一种服务而已.承载系统总是采用依赖注入的方式来消费它在服务承载过 ...

  2. JavaEE(9) - Session EJB的生命周期、事务及拦截器

    1. SessionBean的生命周期 无状态Session Bean: 不存在状态-->待命状态-->被销毁状态 不存在状态-->待命状态: 1)通过构造器创建EJB实例 2)执行 ...

  3. Spring-Bean依赖注入(引用数据类型和集合数据类型)

    为什么使用spring依赖注入详见–>依赖注入分析 1.创建实体类User类 package com.hao.domain; public class User { private String ...

  4. [ASP.NET Core 3框架揭秘] 依赖注入[5]: 利用容器提供服务

    毫不夸张地说,整个ASP.NET Core框架是建立在依赖注入框架之上的.ASP.NET Core应用在启动时构建管道以及利用该管道处理每个请求过程中使用到的服务对象均来源于依赖注入容器.该依赖注入容 ...

  5. [ASP.NET Core 3框架揭秘] 依赖注入[8]:服务实例的生命周期

    生命周期决定了IServiceProvider对象采用怎样的方式提供和释放服务实例.虽然不同版本的依赖注入框架针对服务实例的生命周期管理采用了不同的实现,但总的来说原理还是类似的.在我们提供的依赖注入 ...

  6. [ASP.NET Core 3框架揭秘] 依赖注入[9]:实现概述

    <服务注册>.<服务消费>和<生命周期>主要从实现原理的角度对.NET Core的依赖注入框架进行了介绍,接下来更进一步,看看该框架的总体设计和实现.在过去的多个版 ...

  7. [ASP.NET Core 3框架揭秘] 依赖注入[4]:一个Mini版的依赖注入框架

    在前面的章节中,我们从纯理论的角度对依赖注入进行了深入论述,我们接下来会对.NET Core依赖注入框架进行单独介绍.为了让读者朋友能够更好地理解.NET Core依赖注入框架的设计与实现,我们按照类 ...

  8. [ASP.NET Core 3框架揭秘] 依赖注入:控制反转

    ASP.NET Core框架建立在一些核心的基础框架之上,这些基础框架包括依赖注入.文件系统.配置选项和诊断日志等.这些框架不仅仅是支撑ASP.NET Core框架的基础,我们在进行应用开发的时候同样 ...

  9. [ASP.NET Core 3框架揭秘] 依赖注入[7]:服务消费

    包含服务注册信息的IServiceCollection集合最终被用来创建作为依赖注入容器的IServiceProvider对象.当需要消费某个服务实例的时候,我们只需要指定服务类型调用IService ...

随机推荐

  1. python可变参数调用函数的问题

    已使用python实现的一些想法,近期使用python这种出现的要求,它定义了一个函数,第一种是一般的参数,第二个参数是默认,并有可变参数.在第一项研究中python时间,不知道keyword可变参数 ...

  2. JQuery打印

    jquery.jqprint-0.3.js JQuery提供的局部打印功能: <input type="button" value="打印" onclic ...

  3. 小米2S TWRP 3.0.2-0 最新版Recovery

    主界面 使用了我最新修改的内核 下载地址: 链接: http://pan.baidu.com/s/1i5xwddb 密码: 7dyb 验证信息: md5sum: dca410f33020eb87986 ...

  4. BrowserSync使用

    在Gulp中使用BrowserSync 2016-02-24 23:47 by 那时候的我, 116 阅读, 0 评论, 收藏, 编辑 博客已迁移至http://lwzhang.github.io. ...

  5. 全文检索引擎Solr 指南

    全文检索引擎Solr系列:第一篇:http://t.cn/RP004gl.第二篇:http://t.cn/RPHDjk7 .第三篇:http://t.cn/RPuJt3T

  6. 找呀志_java网络编程(5)TCP和udp差额

    1.TCP定向链接,尽管该网络的不稳定性质,所述不安全确定多少次握手不能保证连接的可靠性.但TCP的三次握手至少(事实上确保了相当大的程度)以确保连接的可靠性; 和UDP不面向连接的,UDP前传送的数 ...

  7. 排序算法门外汉理解-Shell排序

    #include <stdio.h> /* 希尔排序 基本思想:希尔排序又称为缩小增量排序,对简单插入排序的优化. (外部分组gap,组内部插入排序! ! ) 特点:一种不稳定的排序 */ ...

  8. DevExpress 12.1 换肤 超级简单的方法(2013-11-5版)

    本例子是按照DevExpress 12.1 版本 进行演示.请先准备好DevExpress.BonusSkins.v12.1.dll 和DevExpress.Utils.v12.1.dll 1.首先添 ...

  9. 【iOS】UIViewController生命周期

    UIViewController有2周期: 在UIViewController中,View存在两个循环:载入循环和卸载循环. 载入循环 1>程序请求controller的view. 2>假 ...

  10. CF 444B(DZY Loves FFT-时间复杂度)

    B. DZY Loves FFT time limit per test 1 second memory limit per test 256 megabytes input standard inp ...