[英]How to make connection pooling for a web service
作为一个先行者,我通过在线教程学习Java,所以,请不要对我的问题太苛刻,如果我在这里问这个,那只是因为我不知道在哪里可以找到答案。
我需要编写一些简单的Web服务,所以我开始研究并找到了解决我的问题一段时间的Jersey库。 主要问题是,每次我想访问数据库时,我都需要打开一个连接,所以我研究了连接池。
@Path ("login")
@Singleton
public class LoginWS{
private DataSource dataSource;
private Connection connection;
private Statement statement;
public LoginWS (){
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/testdb");
} catch (NamingException e) {
e.printStackTrace();
}
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String authUser(@HeaderParam(value = "data") String data) {
Gson parser = new Gson();
LoginInput user = parser.fromJson(data, LoginInput.class);
LoginOutput response = new LoginOutput();
try {
connection = dataSource.getConnection();
statement = connection.createStatement();
// Here I do the DB queries, and logic
} catch (SQLException e) {
e.printStackTrace();
}finally {
try { if(null!=resultSet)resultSet.close();} catch (SQLException e)
{e.printStackTrace();}
try { if(null!=statement)statement.close();} catch (SQLException e)
{e.printStackTrace();}
try { if(null!=connection)connection.close();} catch (SQLException e)
{e.printStackTrace();}
}
return parser.toJson(response);
}
}
如你所见,我需要在我需要构建的每个其他类中使用一个新的连接池,我不知道这是不是一个好习惯。 所以我想建立像:
public Connection getDBConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
因此它会要求连接池的连接,因此我的所有Web服务都使用相同的池。 我尝试了另一个在JSON对象中返回连接的Web服务,但是,我认为任何知道这个WS在哪里的人都可以访问我的数据库,这是不可取的,至少可以说。
然后我读到了一个名为HttpServlet的对象,我构建了这样的东西:
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L; // No idea about this. Eclipse's suggestion
private DataSource dataSource;
public void init() throws ServletException {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/testdb");
System.out.println("Connection Pool: set");
} catch (NamingException e) {
e.printStackTrace();
}
}
public Connection getDBConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
现在购买,我不知道如何从我的Web服务中调用此实例。
诚实......我没有想过要找什么的想法。
提前感谢您阅读本文。
如果您当前正在使用Tomcat,那么明智的选择是将您的开发转移到Glassfish或其他Java Enterprise Edition Server。 Tomcat只是一个Servlet / JSP引擎,但Glassfish是一个完整的Java EE套件,它不仅包括Servlets / JSP和Jersey,还包括您正在寻找的连接池。
以下是许多教程中的一个,向您展示在Glassfish中设置连接池是多么容易:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.