我有几个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有一个本地接口视图作为其业务接口;但是,我没有(也不能介绍)。
非常感谢您的帮助!
使用
<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方法。
在@EJB注释上指定映射名称,并从bean中删除本地slsb声明就足够了。xml
我不知道为什么Spring需要映射名称,或者无法自己找到它。如果您还不知道,请从应用程序服务器的调试日志中查找它。
@Named
public class MyEJBClientBean {
@EJB(mappedName="java:global/MyApp/MyModule/MyNoInterfaceEJB!com.initech.MyNoInterfaceEJB ")
private MyNoInterfaceEJB testejb;
// ...
}
上面的例子是完整EAR中的全名,如果没有冲突,它也可能绑定到“较短”的jndi名称。
异常是由于
我不确定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路径,例如: 问题答案: 我们找到