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. petshop4.0 其中详细解释(系统架构)

    前言:PetShop它是一个例子.微软用它来展示.Net容量企业系统开发.业界有很多.Net与J2EE争议.微软许多数据PetShop和Sun的PetStore从.这样的争论是不可避免的带有强烈的商业 ...

  2. c#并行任务多种优化方案分享(异步委托)

    遇到一个多线程任务优化的问题,现在解决了,分享如下. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWeb) 任务3:验证成功 ...

  3. 演示基于SDL2.0+FFmpeg的播放器

    SDL是一个跨平台的渲染组件,眼下已经推出到2.0.3版本号,支持Win/Linux/OSX/Android.网上非常多介绍大多是基于SDL1.2版本号的,与2.0版本号有一定的区别,本文演示怎样用S ...

  4. MQTT学习笔记——Yeelink MQTT维修 采用mqtt.js和paho-mqtt

    0 前言     2014年8月yeelink推出基于MQTT协议的开关类型设备控制API.相比于基于HTTP RESTful的轮训方式,通过订阅相关主题消息,能够远程控制类应用实时性更好. 本文使用 ...

  5. 玩转html5(四)----使用canvas画一个时钟(可以动的哦!)

    先给个效果图,我画的比较丑,大家可以自己美化一下, 直接上代码: <!DOCTYPE html> <meta charset="utf-8"> <ht ...

  6. Android应用性能測试

    Android内存限制 java虚拟机有内存使用上限的限制 adb shell进入手机,这此參数被纪录在/system/build.prop中,假设想直接查看能够使用adb shell getprop ...

  7. FTP文件操作之下载文件

    前面写了采用ftp上传文件,有了上传怎么能够没有下载呢?如果只有上传没有下载,那上传了也没啥用了.所以今天就跟大家一起学习学习使用ftp下载文件. 知道了怎么上传,那么下载也就变得很简单了,上传是把文 ...

  8. linux下改动内核參数进行Tcp性能调优 -- 高并发

    前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升, 以下就列举一些Tcp/ip内核 ...

  9. java编程规范之java命名规范

    想要成为一个优秀的程序员,首先要培养良好的编程习惯,为了提高代码的可读性,必须有好的命名规范. 这篇文章是小编结合网上的很多资料整理出来的,若有不当或错误的地方,欢迎大家指正 在文章开始前,为方便阅读 ...

  10. oracle 转让日期格式字符串

    字符串传递日期格式 SELECT trunc(to_date(SALE_MON,'yyyy-mm'),'y'),trunc(to_date(SALE_MON,'yyyy-mm'),'mm')  FRO ...