使用rest jersey从spring调用EJB

时间:2012-04-26 08:53:26

标签: spring ejb-3.1

首先,问题是当我从其余的servlet调用ejb时,ejb总是为空。

我有一个在jersey + spring 3.0.5开发的休息网络服务。以及用于服务的EJB 3.1。

我把战争和jar包装在一个耳朵里所以我的应用程序看起来像(我正在使用maven作为依赖):

+ear
++war
++jar

我想知道如何从war文件中的类调用jar文件中的服务。据我记得它是通过JNDI我需要暴露ejb apis?我该怎么做?

我确信EJB已成功创建,因为我可以在服务器中看到这样的日志:     EJB UserServiceBean的可移植JNDI名称:     【JAVA:全球/演示CG-耳0.0.1-SNAPSHOT /演示CG-的EJB / UserServiceBean com.demo.cg.service.user.UserServiceBeanLocal,     的java:全球/演示CG-耳0.0.1-SNAPSHOT /演示CG-的EJB / UserServiceBean] |#]

但问题是当我在其余的jersey servlet中调用它时,它总是为null:

@Path("/payment")
@Stateless
public class PaymentService {

@Path("/payment")
@Stateless
public class PaymentService {

    @EJB
    private UserServiceBeanLocal userServiceBean;

    @GET
    @Path("/hello")
    public Response savePayment() {

        String result = userServiceBean.getName();
        return Response.status(200).entity(result).build();

        /* return Response.status(200).entity("hello edward").build(); */
    }

}

我的applicationContext.xml文件

<context:annotation-config />
    <context:component-scan base-package="com.sido" />
    <context:property-placeholder location="WEB-INF/build.properties" />

    <!-- <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"> 
        <property name="alwaysUseJndiLookup" value="true" /> </bean> -->

    <jee:jndi-lookup id="userServiceBean"
        jndi-name="java:global/sido-cg-ear-0.0.1-SNAPSHOT/sido-cg-ejbs/UserServiceBean"
        resource-ref="true" lookup-on-startup="true"
        expected-type="com.sido.cg.service.user.UserServiceBeanLocal"
        proxy-interface="com.sido.cg.service.user.UserServiceBeanLocal"></jee:jndi-lookup>

UserBean类

@Interceptors(SpringBeanAutowiringInterceptor.class)
@Stateless
public class UserServiceBean implements UserServiceBeanLocal {
    private String name;

    public UserServiceBean() {
        name = "edward";
    }

    @PostConstruct
    private void init() {
        name = "edward";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

谢谢,
czetsuya

1 个答案:

答案 0 :(得分:1)

对于那些感兴趣的人,我就是这样做的:http://czetsuya-tech.blogspot.com/2012/05/how-to-call-stateless-ejb-from-spring.html