2016-06-28 67 views
1

我正在执行部署到TomEE 7的Java EE Web应用程序,我需要从tomee.xml获取数据源。 tomee.xml位于WEB-INF目录下,并具有以下内容:如何从TomEE 7中的资源获取数据源?

<?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。有人知道如何解决这个问题吗?

谢谢

+0

你正在尝试注入数据源的组件(servlet,ejb等)? –

+0

servlet。已经解决了这个问题。谢谢 – VadOs

回答

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> 

,然后让数据源对象

 Context initCtx = new InitialContext(); 
     Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
     dataSource = (DataSource) envCtx.lookup("rss_db_datasource"); 
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设置正确。

+0

感谢您的答案,但我使用的jdbc,我想tomee.xml中配置,甚至在resources.xml中更好,并获取DataSource对象 – VadOs

+0

看起来像我做的一切正确。通过@Resource注解获取DataSource对象时发生该问题 – VadOs

1

推荐的方式来配置资源tomee使用

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

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

旁注:

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