JAVA CDI 学习(5) - 如何向RESTFul Service中注入EJB实例

RESTFul Service中如果要注入EJB实例,常规的@Inject将不起作用,在Jboss中,应用甚至都启动不起来(因为@Inject注入失败),解决方法很简单:将@Inject换成@EJB

参考代码:

CityInvoker是一个Stateless的EJB

package test;

import javax.ejb.Stateless;
import ...

@Stateless
public class CityInvoker {

    public CityResponse getCity() {
        CityResponse cityResponse = null;
        CityService cityService = ApplicationContextUtils.getCityService();
        try {
            cityResponse = cityService.findCityByCode(RequestBuilder
                    .buildCityFindRequest());
        } catch (LMSException e) {
            e.printStackTrace();
        }
        return cityResponse;
    }
...

 

下面是在RESTFul Service中注入的示例:

package test.rest;

import javax.ejb.EJB;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;

@Path("/")
public class TestService {

    final String XMLNS_NAMESPACE = "http://yjmyzz.cnblogs.com/rest/service";
    final String ROOT_NODE = "root";

    @EJB
    CityInvoker cityInvoker;

    @GET
    @Path("/findCity")
    @Produces(MediaType.APPLICATION_XML)
    public JAXBElement<CityDto> findCity() {
        JAXBElement<CityDto> result = new JAXBElement<CityDto>(new QName(
                XMLNS_NAMESPACE, ROOT_NODE), CityDto.class, cityInvoker
                .getCity().getCities().get(0));
        return result;
    }
...

 

时间: 2024-08-04 12:56:36

JAVA CDI 学习(5) - 如何向RESTFul Service中注入EJB实例的相关文章

spring-使用Spring在Service中注入了Dao的对象,在Service中怎么获取Dao的对象

问题描述 使用Spring在Service中注入了Dao的对象,在Service中怎么获取Dao的对象 使用Spring在Service中注入了Dao的对象,然后在Service中需要使用Dao对象的话,可以用ApplicationContext的getBean方法,我这边看的一个程序没有用ApplicationContext,而是在Service中对Dao对象进行了声明,然后定义了Dao对象的set和get方法,这样也可以吗,还是说这个程序我没有看明白,希望有明白的可以给解释一下,另希望有大神

JAVA CDI 学习(1) - @Inject基本用法

CDI(Contexts and Dependency Injection 上下文依赖注入),是JAVA官方提供的依赖注入实现,可用于Dynamic Web Module中,先给3篇老外的文章,写得很不错 1.Java EE CDI Dependency Injection (@Inject) tutorial2.Java EE CDI Producer methods tutorial3.Java EE CDI bean scopes 此外,还有jboss官方的参考文档:http://docs

JAVA CDI 学习(4) - @Alternative/@Default/@Any &amp; Extension

前面几节学习到的CDI内容,基本上都是hard-code,以硬编码的方式在代码里指定注入类型,这并非依赖注入的本意,依赖注入的优势之一在于"解耦",这一节我们将学习如何利用配置来动态注入的类型及属性初始化. 一.@Alternative/@Default/@Any 当一个服务接口(也称契约)有多个实现时,可以在代码里指定一个缺省的实现类型(即:标注成@Default或@Any),其它实现类标注成@Alternative,以后如果需要动态切换实现类,只要在webapp/WEB-INF/b

JAVA CDI 学习(2) - Scope 生命周期

在上一节中,我们已经知道了如何用@Inject实现基本注入,这一节研究Bean实例注入后的"生命周期",web application中有几种基本的生命周期(不管哪种编程语言都类似) 1.Application 生命周期 即:web application启动后,处于该生命周期级别的对象/变量,将一直存在,可以被所有web应用的用户共同访问,通常用来做网站计数器,实现流量访问之类.直到web 应用停止或重新启动,该对象才被销毁.简单来说:只要web application处于激活状态,

我的Java开发学习之旅------&amp;gt;求字符串中出现次数最多的字符串以及出现的次数

金山公司面试题:一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出. 此题的解题思路如下: 引入TreeSet:通过集合快速找到所有出现过的字符串 引入ArrayList:为了快速排序,再通过StringBuffer生成排序后的字符串 通过String的indexOf方法和lastIndexOf方法来计算每个字符串出现的次数最大值 使用HashMap

Java 8学习资料汇总

本文首发于InfoQ. Java 8发布已经有一段时间,它被认为是Java 5发布以来最大的一次版本升级.Java 8 为Java语言.编译器.类库.开发工具以及JVM(Java虚拟机)带来了大量新特性.Lambda表达式.默认方法.并行API等都受到了开发者的追捧,社区上关于Java 8的学习资料如雨后春笋般涌现.下面是一些优秀的学习资料汇总: Brian Goetz在Stack Overflow上的回答Brian是<Java并发编程实战>的作者之一,有20多年的软件咨询行业经验.Brian

Android Service中方法使用详细介绍

  Android Service中方法使用详细介绍 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务.例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行.在状态栏中的通知可能会显示当前的歌曲并且允许用户启动一个activity来与音乐播放器交互. Service的两种实现形式 1.非绑定 通过调用应用程序组件(例如Activity)的startService()方法来启动一个服务.一旦启动,服务就

Android Service中方法使用详细介绍_Android

 service作为四大组件值得我们的更多的关注 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务.例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行.在状态栏中的通知可能会显示当前的歌曲并且允许用户启动一个activity来与音乐播放器交互. Service的两种实现形式 1.非绑定 通过调用应用程序组件(例如Activity)的startService()方法来启动一个服务.一旦启动,服务就会在

我的Java开发学习之旅------&amp;gt;Java经典面试题

摘自张孝祥itcast 从享受生活的角度上来说:"程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做:第二,你非常痴迷和爱好程序,并且在这方面有一些天赋和优势.程序员的结局也是有两种:第一,默默退休,第二以程序员为起点或跳板,注意积累,跟对了好的老板或团队,找到和很好的搭档自己创业,成为IT金领和富翁." 人们在时间面前是平等的,吾生也有涯,所以,你的经验更丰富点,那不算什么,经验是用时间积累的