2

SqlServer データベースへの接続をテストしようとして JUnit テストを作成していました (わかっています、わかっています... データベースの単体テストを行うべきではありません)。問題は、私はすでにグラスフィッシュでデータソースをセットアップしており、実際、ping テストは「成功」したということです。しかし、私がこれを試すと:

注: 構成は次のとおりです: ローカル Glassfish (ping OK の場合)、リモート データベースからの単体テスト

@Test
public void simpleConnect() {

    try {
        Context ctx = new InitialContext();
        DataSource dataSource = (DataSource) ctx.lookup("MyDataSource");
        Connection con = dataSource.getConnection();
        assertTrue(con != null && dataSource != null);
    }
    catch (NamingException ex) {
        fail("Cannot get connection: " + ex);
    }
    catch (SQLException ex) {
        fail("Cannot get connection: " + ex);
    }

}

何も起こらず、テストは終了せず、NO は Ok または Fail をスローします。本当に連絡が取れるかどうかはわかりません。

4

4 に答える 4

0

リモートGlassfishサーバーのJNDIコンテキストに接続するには、InitialContextコンストラクターにプロパティを渡す必要があります。

Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(props);

これは単体テストではなく統合テストと呼ぶことができ、法律に違反していません。

個人的には、統合テストでリモートGlassfishインスタンスからデータソースを検索するこのアプローチは使用しません。GlassFishがダウンしているときにテストが機能するように、CommonsDBCPなどを使用してデータソースを作成します。

于 2013-02-04T14:25:07.100 に答える
0

最初はデータソースへの接続をテストしようとしていましたが、JUnit を試していましたが、私の場合はうまくいかなかったので、JSP ページを使用して解決策を見つけました。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.InitialContext"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                   "http://www.w3.org/TR/html4/loose.dtd">

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Test DataSource Connection</title>
  </head>
<body>
<h1>Connecting to Pooled Database</h1>  
<%
    InitialContext ctx = new InitialContext();
    DataSource ds = (DataSource) ctx.lookup("MyDataSource");
    Connection connection = ds.getConnection();

    if (connection == null) {
        throw new SQLException("Error establishing connection!");
    }

    PreparedStatement stmt = null;
    ResultSet result = null;
    stmt = connection.prepareStatement("{call StoredProcedure(?,?)}");
    stmt.setString(1, "1");
    stmt.setString(2, "2");
    result = stmt.executeQuery();

    while (result.next()) {
        out.print(result.getString(1) + "<br>");
    }
%>

<h2>DataSource Working!</h2>
</body>
</html>

JSP を実行すると、ストアド プロシージャへの呼び出しの結果セットが取得されます。明らかに、呼び出しを単純なクエリに置き換えることができます (select * from table)

データソースの作成、接続、および構成方法に関する情報が必要な場合は、次のリンクを参照してください: http://netbeans.dzone.com/connection-pooling-glassfish-nb

于 2013-02-04T16:04:46.010 に答える
0

接続を閉じてみてください。

finally{ con.close; }

通常、データソースで Junit テストを行うことはできませんが、本当に必要なのでしょうか?

于 2013-02-04T14:13:43.313 に答える
0

テストには、明らかにハングする原因は何もありません。デバッガーで実行して、ハングしている行を分離することをお勧めします。

于 2013-02-04T14:14:49.333 に答える