当前位置: 首页 > 知识库问答 >
问题:

从Spring使用rest球衣调用EJB

红经亘
2023-03-14

首先,问题是当我从rest servlet调用ejb时,ejb总是null。

我在jersey spring 3.0.5中开发了一个rest web服务。以及用于服务的EJB3.1。

我已经在耳朵里打包了war和jar,所以我的应用程序看起来像(我使用maven作为依赖):

+ear
++war
++jar

我想知道如何从war文件中的类调用jar文件中的服务。据我记忆,这是通过JNDI,我需要公开ejb apis?我应该怎么做?

我确信EJB是成功创建的,因为我可以在服务器上看到这样的日志:EJB UserServiceBean的可移植JNDI名称:[java:global/demo-cg-ear-0.0.1-SNAPSHOT/demo-cg ejbs/UserServiceBean!com.demo.cg.service.user.userservicebeannlocal,java:global/demo-cg-ear-0.0.1-SNAPSHOT/demo cg ejbs/UserServiceBean]|]

但问题是,当我在rest servlet中调用它时,它总是空的:

@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(); */
    }

}

我的应用程序上下文。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个答案

宗政文彬
2023-03-14

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

 类似资料:
  • 我正在尝试通过jQuery POST将一些json数据发送到我本地机器中的jersey REST服务。 在我的服务器端,我有泽西方法来使用这个POST的JSON。 我正在请求中包装json数据。所以在服务器中,我可以在该包装类中获取请求中发送的所有数据。我的请求包装类是 问题pojo类 每当我从jquery发出如下请求时, 我在控制台中发现这个错误: 我可以通过从jQuery发送问题json并在方

  • 我尝试在SpringBoot(1.5.8)中使用Swagger(2.6)和Jersey(1.5) 我对公共API的调用工作正常 我试着用Jersey跟踪这个Config Swagger ui,但它仍然没有回来。 这是我的球衣配置 这是我的应用类 这是我的endpoint 当我使用Spring Rest控制器尝试类似的配置时,它工作正常,但是对于泽西岛,我看不到我的公共API。它似乎忽略了我的炫耀配

  • 问题内容: 我想使用Jersey来实现一些Java REST服务。默认的POJO转换器JAXB处理JSON对象有点奇怪,因此我想使用Jackson转换POJO的开销很少或更少。我如何告诉J2ME框架使用另一个转换器? 我的web.xml看起来像这样: 问题答案: 只需添加jackson JAR并修改web.xml即可,如下所示: 所需的Jackson Jackson JAR(http://jack

  • 问题内容: 我们计划使用Spring 4.0.6版本制作一个新应用程序。我们使用可以返回“ XML”或“ JSON”的控制器。在上一个项目中,我们已经使用JAX-RS API成功地将Spring的Jersey支持REST支持,但是在阅读了前辈的几篇文章和建议后,他们说Spring提供了很好的REST支持。 如果我不使用JAX-RS和Jersey而使用Spring REST支持,则使我真正感到困惑的

  • 我正在寻找一种方法来覆盖GuiceServletContextListener中与guice绑定的jersey资源。我的代码,我正在努力工作: 但不幸的是,这不起作用,虽然我不能像接口一样将jersey资源绑定到实现,但只有work。但是这样的绑定是不可能覆盖的。如果我试图用覆盖,我会收到一个错误而@Path应该是唯一的。那么我的用例有什么解决方案吗?

  • 我有一个运行spring-boot、jersey2和spring度量的应用程序:下面是maven片段: 在引入致动器依赖性之前,Jersey一直工作得很好。然后创建了以下bean以使Jersey作为过滤器工作: 度量被映射到/admin路径。使用这种配置,我无法使度量标准工作。但是,通过添加management.port(不同于主应用程序端口),既可以使用Jersey资源,也可以使用metrics