我有一个外部String资源声明到服务器(Jboss 7.1.1或WAS 8) JBoss:
...
<subsystem xmlns="urn:jboss:domain:naming:1.1">
<bindings>
<simple name="jboss/resources/foovalue" value="helloworld"/>
</bindings>
</subsystem>
...
我可以从我的战争模块中得到很好的信息:
@ManagedBean
@RequestScoped
public class Footest
...
@Resource(name = "foovalue")
private String externalFoo;
...
但是如果我尝试从EJB模块(Maven依赖作为EJB类型)获取它,如
@Stateless
public class FooServiceImpl implements FooServiceLocal
...
@Resource(name = "foovalue")
private String externalFoo;
...
我得到一个空值!
我错过了什么吗?
答案 0 :(得分:0)
Nikos向我指出了正确的解决方案:必须将 ejb-jar.xml 放入类路径(src \ main \ resources \ META-INF)
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"
version="3.1">
<enterprise-beans>
<session>
<ejb-name>FooServiceImpl </ejb-name>
<resource-ref>
<res-ref-name>foovalue</res-ref-name>
<res-type>java.lang.String</res-type>
</resource-ref>
</session>
</enterprise-beans>
</ejb-jar>
请注意,如果您使用WAS 8.x,则必须将资源声明为 ibm-ejb-jar-bnd.xml 文件:
<?xml version= "1.0" encoding="UTF-8"?>
<ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0">
<session name="FooServiceImpl" >
<resource-ref name="foovalue" binding-name="foovalue"/>
</session>
</ejb-jar-bnd>
参考foo值被声明为WAS 8,如:
打开管理控制台,进入环境&gt;管理名称空间绑定。选择范围和