如何从TomEE 7中的资源获取数据源?

时间:2016-06-28 14:06:37

标签: java java-ee datasource tomee tomee-7

我正在部署到TomEE 7的java EE Web应用程序,我需要从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。有谁知道如何解决这个问题?

谢谢

3 个答案:

答案 0 :(得分:1)

JTAManaged设为true。

<?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>

并确保正确设置persistence.xml中的jta-data-source

答案 1 :(得分:1)

META-INF - &gt; 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");

答案 2 :(得分:1)

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

  1. tomee.xml但是这个需要在tomee_base / conf /或
  2. 您可以使用resources.xml在WEB-INF中执行此操作(只需将根标记更改为&#34;资源&#34;而不是&#34; tomee&#34;)。
  3. 错误可能是文件的本地化。

    旁注:

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