来自 JBoss 的 RESTEasy 和 JNDI 数据源
RESTEasy and JNDI datasource from JBoss
我正在尝试使用在我的 JBoss EAP 7 standalone.xml
:
中声明的数据源
<datasource jndi-name="java:jboss/datasources/my_db" pool-name="my_db" ...>
...
</datasource>
顺便说一下,我还没有找到任何关于名称约定的文档,java:/datasources/my_db
是否也正确?
然后,一旦我将以下内容添加到我的 RESTEasy web.xml(没有其他修改):
<context-param>
<param-name>resteasy.jndi.resources</param-name>
<param-value>java:jboss/datasources/my_db</param-value>
</context-param>
应用程序因错误而中断:
java.lang.RuntimeException: RESTEASY003130: Class is not a root resource.
It, or one of its interfaces must be annotated with @Path:
org.jboss.as.connector.subsystems.datasources.WildFlyDataSource implements:
javax.sql.DataSource java.io.Serializable
如何在 RESTEasy 中访问 JNDI 数据源?
谢谢。
当您 运行 在 WildFly/JBossEAP 7 容器中时,您可以完全忘记它的 JAX-RS 实现是基于 RestEASY 构建的。
您可以完全删除 web.xml(或至少它包含的任何 RestEASY 配置)并只构建 "pure" JAX-RS:
@Path("...")
public class SomeRestService {
@Resource(name="java:jboss/datasources/my_db")
private DataSource ds;
@GET
@Produces(MediaType.APPLICATION_JSON)
public MyPojo someResource() {
try(Connection con = ds.getConnection()) {
...
}
}
}
您可以注入 EJB、CDI bean、PersistenceContext 等。它将 "just work"。
史蒂夫的回答是正确的,但还有另一种方法:
DataSource ds = (DataSource) new InitialContext().lookup("java:jboss/datasources/my_db");
我更喜欢使用 @Resource
我正在尝试使用在我的 JBoss EAP 7 standalone.xml
:
<datasource jndi-name="java:jboss/datasources/my_db" pool-name="my_db" ...>
...
</datasource>
顺便说一下,我还没有找到任何关于名称约定的文档,java:/datasources/my_db
是否也正确?
然后,一旦我将以下内容添加到我的 RESTEasy web.xml(没有其他修改):
<context-param>
<param-name>resteasy.jndi.resources</param-name>
<param-value>java:jboss/datasources/my_db</param-value>
</context-param>
应用程序因错误而中断:
java.lang.RuntimeException: RESTEASY003130: Class is not a root resource.
It, or one of its interfaces must be annotated with @Path:
org.jboss.as.connector.subsystems.datasources.WildFlyDataSource implements:
javax.sql.DataSource java.io.Serializable
如何在 RESTEasy 中访问 JNDI 数据源?
谢谢。
当您 运行 在 WildFly/JBossEAP 7 容器中时,您可以完全忘记它的 JAX-RS 实现是基于 RestEASY 构建的。
您可以完全删除 web.xml(或至少它包含的任何 RestEASY 配置)并只构建 "pure" JAX-RS:
@Path("...")
public class SomeRestService {
@Resource(name="java:jboss/datasources/my_db")
private DataSource ds;
@GET
@Produces(MediaType.APPLICATION_JSON)
public MyPojo someResource() {
try(Connection con = ds.getConnection()) {
...
}
}
}
您可以注入 EJB、CDI bean、PersistenceContext 等。它将 "just work"。
史蒂夫的回答是正确的,但还有另一种方法:
DataSource ds = (DataSource) new InitialContext().lookup("java:jboss/datasources/my_db");
我更喜欢使用 @Resource