我目前正在尝试在 TomEE Embedded (TomEE版本7.0.5)上运行一个简单的Web应用程序。
根据docs,我可以启动TomEE并将类路径部署为这样的Web应用程序。我已将文档库设置为src/main/webapp
。
try (final Container container = new Container(new Configuration())
.deployClasspathAsWebApp("", new File("src/main/webapp"))) {
container.await();
}
我在WEB-INF/resources.xml
中定义了一个数据源,如下所示:
<Resource id="myDataSource" type="javax.sql.DataSource">
JdbcDriver org.hsqldb.jdbcDriver
JdbcUrl jdbc:hsqldb:file:hsqldb
UserName sa
Password
</Resource>
我已经在web.xml中设置了一个引用:
<resource-ref>
<res-ref-name>myDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>
然后,我尝试通过JNDI在Servlet中查找此数据源。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/myDataSource");
Connection connection = ds.getConnection();
...
}
TomEE启动时,好像我的数据源已创建(至少在日志中有一些输出)。但是,当我尝试在servlet中查找数据源时,我得到了一个未配置的dbcp2连接池作为数据源,当调用ds.getConnection()
时会引发以下异常:
java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2186)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2066)
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1525)
at TestServlet.doGet(TestServlet.java:32)
...
在独立的TomEE(我尝试过TomEE Webprofile)上或使用TomEE Maven插件时,相同的配置可以正常工作。我还有什么需要让它同时运行于嵌入式TomEE的吗?
预先感谢
答案 0 :(得分:0)
Tomee Embedded默认情况下不绑定自定义Webapp类加载器,因此没有始终绑定comp /。您可以将属性传递给上下文以强制其为openejb一种,或使用openejb:Resource / myDataSource或java:openejb / Resource / myDataSource命名。