1

我正在做 java EE web 应用程序并部署到 TomEE 7,我需要从 tomee.xml 获取数据源。tomee.xml 位于 WEB-INF 目录下,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
    <Resource id="rss_db_datasource" type="javax.sql.DataSource">
        JdbcDriver = org.hsqldb.jdbcDriver
        JdbcUrl = jdbc:hsqldb:file:/rss_db
        UserName = sa
        Password =
    </Resource>
</tomee>

我正在尝试使用以下代码注入数据源:

@Resource(name="rss_db_datasource", type = javax.sql.DataSource.class)
    private DataSource dataSource;

当我尝试从数据源获取连接时,我得到 NullPointerException。有人知道如何解决这个问题吗?

谢谢你

4

3 回答 3

1

在 tomee 中配置资源的推荐方法是使用

  1. tomee.xml但这个需要在 tomee_base/conf/ 或
  2. 您可以在 WEB-INF 中使用resources.xml(只需将根标签更改为“resources”而不是“tomee”)。

该错误可能是文件的本地化。

边注:

您不需要type = javax.sql.DataSource.class在注入点进行设置,因为它是字段类型。

于 2016-07-21T18:39:35.673 回答
1

设置JTAManaged为真。

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
    <Resource id="rss_db_datasource" type="javax.sql.DataSource">
        JdbcDriver = org.hsqldb.jdbcDriver
        JdbcUrl = jdbc:hsqldb:file:/rss_db
        UserName = sa
        Password =
        JtaManaged true
    </Resource>
</tomee>

并确保jta-data-source在 persistence.xml 正确设置。

于 2016-06-28T14:31:58.900 回答
1

META-INF -> context.xml

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <Resource name="rss_db_datasource" type="javax.sql.DataSource"
              username="sa" password=""
              driverClassName="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:file:D:/rss_db"
            />
</Context>

然后获取 DataSource 对象

        Context initCtx = new InitialContext();
        Context envCtx = (Context) initCtx.lookup("java:comp/env");
        dataSource = (DataSource) envCtx.lookup("rss_db_datasource");
于 2016-06-28T23:56:43.560 回答