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. 谈论高并发(二十二)解决java.util.concurrent各种组件(四) 深入了解AQS(二)

    上一页介绍AQS其基本设计思路以及两个内部类Node和ConditionObject实现 聊聊高并发(二十一)解析java.util.concurrent各个组件(三) 深入理解AQS(一) 这篇说一 ...

  2. 异常Exception in thread "AWT-EventQueue-XX" java.lang.StackOverflowError

    今天太背了,bug不断,检查到最后都会发现自己脑残了,粗心写错,更悲剧的是写错的时候还不提示错. 刚才有遇到一个问题,抛了这个异常Exception in thread "AWT-Event ...

  3. [TWRP 2.8.4] for 小米2S/2SC 支持中英文切换

    其中这个 twrp 2.8.4 在18号的下午已经编译好了. 经历了2个小时的代码修改,再经过后期的调试,中英文双语版本的twrp出炉了. 下面上几张图: 图片1:为英文界面 图片2: 图片3:中文界 ...

  4. 【原创】纯OO:从设计到编码写一个FlappyBird (三)

    第二部分请点这里 下面首先来实现Bing接口! 实现Bing接口的类取名SimpleBing. 容易发现,SimpleBing类总的来说要向下,但点击一下又得向上,向上到了一定界限又得向下,但我们又只 ...

  5. VC版八皇后

    一.  功能需求: 1. 可以让玩家摆棋,并让电脑推断是否正确 2. 能让电脑给予帮助(给出全部可能结果) 3. 实现悔棋功能 4. 实现重置功能 5. 加入点按键音效果更佳 二.  整体设计计: 1 ...

  6. jQuery Validate插入 reomte使用详细的说明

    在用户注冊时常常要通过ajax请求推断用户账号是否已注冊,最方便的方法便是用jQuery Validate插件 reomte方法 Jquery Validate插件, 调用远程方法验证參数, remo ...

  7. Post数据到 https异常:基础连接已经关闭: 连接被意外关闭 解决办法

    POST数据到HTTPS站点的时候需要设置ServicePointManager类的ServerCertificateValidationCallback属性,并且在POST到https://pass ...

  8. Android-Service组件

    转载请标明出处:http://blog.csdn.net/goldenfish1919/article/details/40381109 原文:http://developer.android.com ...

  9. C++指针和引用简介

    摘要 本文介绍C++指针和概念引用 这是一个指针 指针的类型 指针所指向的类型 指针表达式 指针与函数 什么是引用 指针引用差别 指针和引用的同样点和不同点 **什么是指针** 指针就是一个存放地址的 ...

  10. 使用autoconf和automake生成Makefile文件(转)

    Makefile好难写 曾经也总结了一篇关于Makefile的文章<make和makefile的简单学习>.但是,总结完以后,发现写Makefile真的是一件非常痛苦的事情,的确非常痛苦. ...