JSP 페이지의 테이블에있는 모든 행 수를 인쇄하려고합니다. 이런 종류의 뭔가 : 데이터 소스에서 연결을 확보하는 동안 나는 NullPointerException
을 얻고 그러나Tomcat 8의 @Resource DI를 사용하여 데이터 소스에 연결할 수 없습니다.
Total Products: 102
.
@Resource dependency injection은 Tomcat 8에서 지원됩니까?
온라인 블로그 중 일부에서는 지원되고 작동하는 것처럼 보입니다. 아래 링크. https://www.mkyong.com/tomcat/how-to-configure-mysql-datasource-in-tomcat-6/
예외 :
Stacktrace:] with root cause
java.lang.NullPointerException
at com.study.crud.dao.jdbc.impl.ProductDao.getProducts(ProductDao.java:31)
at org.apache.jsp.jsp.home_jsp._jspService(home_jsp.java:135)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
META-INF/context.xml에
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/product-manager-mvc1-webapp">
<!-- PostgreSQL Datasource -->
<Resource auth="Container" driverClassName="org.postgresql.Driver" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" maxActive="50" maxIdle="10" maxWait="-1" name="jdbc/product-db-v1" password="def" type="javax.sql.DataSource" url="jdbc:postgresql://localhost:5432/product-db-v1" username="abc"/>
</Context>
ProductDao.java
public class ProductDao {
@Resource(name = "jdbc/product-db-v1")
private DataSource dataSource;
public ProductDao() {
}
public List<Product> getProducts() throws SQLException {
List<Product> products = QueryExecutor.getAllProducts(dataSource.getConnection());
return products;
}
}
012,351 6,
home.jsp
<%
ProductDao productDao = new ProductDao();
List<Product> products = productDao.getProducts();
LOG.debug("products = " + products);
int productCnt = 0;
if (products != null) {
productCnt = products.size();
}
%>
<body>
<h1>Resource Injection Demo</h1>
<h3>Product Count: <%= productCnt%></h3>
</body>
동일한 문제가 여기에 설명되어 있습니다. http://stackoverflow.com/questions/24040291/tomcat-7-datasource-injection-mechanism. 문제는 Tomcat이 완전한 엔터프라이즈 컨테이너가 아니라는 것입니다. JBoss/Weblogic/TomEE의 사용은이 문제를 해결할 것입니다. – user2325154