前例として、私はオンライン チュートリアルを通じて 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がどこにあるかを知っている人なら誰でも私のDBにアクセスできると思います...控えめに言っても望ましくありません。
次に、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 サービス内からこのインスタンスを呼び出す方法がわかりません。
正直なところ、何を探すべきかについてのアイデアがなくなりました。
これを読んでくれてありがとう。