0

誰かがここで私を助けてくれれば幸いです。Apache Tomcat を使用してアプリケーションを開発しましたが、デプロイされて動作しています。しかし、アプリを JBoss に移行してそのサーバーに WAR ファイルをデプロイしようとすると、データソース エラーが発生しました。私は JBoss を初めて使用し、この問題を解決するために次に何をすべきかわかりません。誰かがこのプロセスを案内してくれるとありがたいです!

私の DBConnector クラスコード:

import java.sql.*;
import java.util.Properties;
import java.io.InputStream;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;

パブリッククラスDbConnector {

private static String JDBC_DRIVER = "jdbc.driver";
private static String JDBC_URL = "jdbc.url";
private static String JDBC_USER = "jdbc.user";
private static String JDBC_PASSWORD = "jdbc.password";
private static Properties props = new Properties();
private Connection connection = null;
private Statement stat = null;
private ResultSet rs = null;
private static volatile DataSource dsObj;
static {
    try {
        // a way to retrieve the data in
        // connection.properties found
        // in WEB-INF/classes
        InputStream is = DbConnector.class.getResourceAsStream("/connection.properties");
        props.load(is);
        //PropertyConfigurator.configure("log4j.properties");
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        Class.forName(props.getProperty(JDBC_DRIVER)).newInstance();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static void initialize() {
    try {
        dsObj = BasicDataSourceFactory.createDataSource(props);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Constructor
 */
public DbConnector() {
    try {
        initialize();
        this.connection = getConnection();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Returns DB Connection
 * @return Connection
 * @throws SQLException
 */
public static Connection getConnectionFromPool() throws SQLException {
    Connection connection = null;
    // checking for null singleton instance
    if (null == dsObj) { // synchronized over class to make thread safe
        synchronized (DbConnector.class) {
    // double checking for making singleton instance thread safe
            if (null == dsObj) {
                initialize();
            }
        }
    }
    // getting connection from data sourceconnection = dsObj.getConnection();
    return connection;
}

/**
 * Get Connection
 * @return Connection object
 * @throws SQLException
 */
private Connection getConnection() throws SQLException {
    return DriverManager.getConnection(props.getProperty(JDBC_URL), props.getProperty(JDBC_USER), props.getProperty(JDBC_PASSWORD));
}

/**
 * Execute Query
 * Purpose: SELECT
 * @param sql SQL Statement
 * @return ResultSet
 */
public ResultSet executeQuery(String sql) {
    try {
        if (connection == null) {
            return null;
        }
        stat = connection.createStatement();
        rs = stat.executeQuery(sql);
        return rs;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

/**
 * Execute Update
 * Purpose: Insert, Update, Delete
 * @param sql SQL Statement
 * @return int No. of Rows Updated
 */
public int executeUpdate(String sql) {
    try {
        if (connection == null) {
            return -1;
        }
        stat = connection.createStatement();
        return stat.executeUpdate(sql);
    } catch (Exception e) {
        //e.printStackTrace();

        return -1;
    }
}

/**
 * Execute
 * Purpose: Create, Drop
 * @param sql statement to update.
 * @return true is statement execute sucessfuly and false otherwise
 */
public boolean execute(String sql) {
    try {
        if (connection == null) {
            return false;
        }
        stat = connection.createStatement();
        return stat.execute(sql);
    } catch (Exception e) {
        //e.printStackTrace();

        return false;
    }
}

/**
 * Close ResultSet
 */
public void closeResultSet() {
    if (rs != null) {
        try {
            rs.close();
        } catch (Exception e) {
            //e.printStackTrace();

        }
    }
}

/**
 * Close Statement
 */
public void closeStatement() {
    if (stat != null) {
        try {
            stat.close();

        } catch (Exception e) {
            e.printStackTrace();
            //log.error(e);
        }
    }
}

/**
 * Close Connection
 */
public void closeConnection() {
    try {
        connection.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Close
 * Connection, Statement and Resultset     *
 */
public void close() {
    try {
        if (rs != null) {
            rs.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    try {
        if (stat != null) {
            stat.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    try {
        if (connection != null) {
            connection.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}

これについてオンラインで読んだ後、context.xml および web.xml ファイルに何かをしなければならないことがわかりました。

誰かが私にサンプルコードを見せてくれますか、それともこれについて助けてくれますか?

4

1 に答える 1

2

最初に行うことは、独自の接続プール コードを取り除き、コンテナーによって提供されるコードを使用することです。基本的に DataSource を定義すると、コンテナー (Tomcat/JBOSS) が JNDI を介してアプリケーションで使用できるようになります。定義したら、web.xml で参照できます。グーグルでハウツーを検索してください。

<resource-ref>  
  <description>Customer Database</description>  
  <res-ref-name>jdbc/CustomerDB</res-ref-name>  
  <res-type>javax.sql.DataSource</res-type>  
  <res-auth>Container</res-auth>  
</resource-ref>

アップデート

それでもこれを自分のやり方で機能させたい場合はorg.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory、クラスパス (WEB-INF/lib) に を含む jar ファイルがあることを確認してください。そして、取得しているスタックトレースを投稿してください。

更新 2

エラーは非常に明確です

デプロイメント URL ファイルのWeb マッピングは既に存在します:/C:/Users/Dane/Desktop/jboss-as-distribution-6.0.0.Final/jboss-6.0.0.Final/server/default/tmp/vfs/automountec9d6360903186ac/SurveyApplication .war-a018e9cb945f462b/

同じコンテキスト パスでデプロイされた別のアプリケーションが既にあるようです。

于 2012-08-22T14:18:16.117 に答える