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

如何将没有接口的EJB注入Springbean?

贺自明
2023-03-14

我有几个EJB3。x无状态会话bean,未定义接口。我需要将这些bean注入到Springbean中,但我无法这样做。

无接口EJB:

@Singleton
public class MyNoInterfaceEJB {
   public String sayHello() { return "hi"; }
}

我的豆子:

@Named
public class MyEJBClientBean {
   @EJB
   private MyNoInterfaceEJB testejb;

   // ...
}

还有我的豆子。xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:jee="http://www.springframework.org/schema/jee"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-3.0.xsd
  http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">

    <jee:local-slsb id="testejb" jndi-name="java:global/MyEAR/MyModule/MyProject!com.test.MyNoInterfaceEJB"
            business-interface="com.test.MyNoInterfaceEJB"/>

    <context:annotation-config />
    <context:component-scan base-package="com.test" />
 </beans>

在初始化Spring容器时,我得到以下错误:

Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'testejb': 
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: [com.test.MyNoInterfaceEJB] is not an interface

异常本身非常清楚——spring容器期望MyBean有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。

非常感谢您的帮助!

共有3个答案

沈宏朗
2023-03-14

使用

<jee:jndi-lookup jndi-name="java:app/domains/BaseDao" expected-type="com.project.core.persistence.baseDaoImpl.BaseDao" id="baseDao" ></jee:jndi-lookup>

然后,您可以将@Autowire注释或声明注入到bean中。

<Bean class ="com.project.springBean" id ="myBean">
<property name="baseDao" ref="baseDao" />
or 
@Component
public class SpringBean {
@AutoWired
private BaseDao baseDao;
public void setBaseDao(BaseDao baseDao) {
this.baseDao =baseDao;

}如果您使用或不使用autowire,您应该在springBean类中为baseDao提供setter方法

闻法
2023-03-14

在@EJB注释上指定映射名称,并从bean中删除本地slsb声明就足够了。xml

我不知道为什么Spring需要映射名称,或者无法自己找到它。如果您还不知道,请从应用程序服务器的调试日志中查找它。

@Named
public class MyEJBClientBean {

    @EJB(mappedName="java:global/MyApp/MyModule/MyNoInterfaceEJB!com.initech.MyNoInterfaceEJB ")
    private MyNoInterfaceEJB testejb;

  // ...

}

上面的例子是完整EAR中的全名,如果没有冲突,它也可能绑定到“较短”的jndi名称。

端木安国
2023-03-14

异常是由于

我不确定Spring是否能够处理Springbean中的@EJB注释。如果没有,您可以让Springbean实现spring接口org。springframework。豆。工厂初始化bean,并对无接口EJB执行编程JNDI查找。

希望有帮助。

 类似资料:
  • 我有一个问题是将EJB注入到抽象类中,抽象类是我JSF CDI bean的父类。在我的项目中,我使用MyFaces CODI 1.0.5(ViewScope),Omniface 1.3,PrimeFaces 3.4.2和GlassFish3.1.2。 应用程序是一个EAR,抽象类位于EJB模块中,JSF CDI bean位于WAR模块中: 我的抽象类: 我的CDIBean: 当我部署应用程序并访问

  • 我想让CDI“选择”一个替代类作为接口的实现。 虽然一切都捆绑在EAR中,但是替代实现将在war文件中,其余的(注入接口的类、接口、接口的“默认”实现)将在ejb jar中。 下面是一些代码来说明: EJB 模块: 战争模块: 在战争文件中设置豆子.xml没有帮助。

  • 我有一个EAR应用程序,有三个模块: null 这是工作良好的,但现在我必须使用相同的豆子外耳应用程序,注射是不工作的。 我在app-ejb中有: 以及他在app-remote中的远程界面: 这是意料之中的吗?如何才能正确地注入远程bean?

  • 我试图构建一个资源包,从数据库而不是属性文件获取其消息。我做了一些扩展ResourceBundle的测试,ResourceBundle。控件和ListResourceBundle,我想我走的是正确的道路。 当我需要查询实际数据库以从我的ResourceBundle实现中获取消息时,我就到达了一个点。我想利用EJB层上的所有JPA架构体系来运行查询并实例化存储密钥、消息和区域设置的对象。因此,如果我

  • 总结一下我失败的项目:我的类与bean一起打包在一个WAR中。xml文件。我的WAR反过来被打包在一个EAR中,这个EAR文件被部署到内部使用Tyrus的GlassFish 4服务器上。 WebSocket规范说: 在JavaEE平台中运行的WebSocketendpoint必须具有CDI规范中描述的完全依赖注入支持。WebSocket实现JavaEE平台的一部分需要支持字段、方法和构造函数注入,

  • 问题内容: 我试图将EJB注入到Spring(3.1.2)服务中(都在不同的 WAR中)两者都非常简单(删除了方法以简化示例): EJB: Service: 事情很简单,但我尝试过: 它没有用。然后我还尝试了: and 但都没有奏效。 我设法使用以下方法注入了EJB: 在我的spring配置和服务中: 但我真的不喜欢这种解决方案。我希望在某些注释中包含我的JNDI路径,例如: 问题答案: 我们找到