2017-01-17 3 views
0

したがって、次の問題に直面しています。 次のSQL Serverデータベースへの接続を持つWebアプリケーションを開発しました。 (db接続コードが添付されています)java web appがTomcatにデプロイされたときにSQLデータベースへの接続を拒否します

public class DBConnection 
{ 
    private DatabaseMetaData dma; 

    private static Connection con; 

    private static DBConnection instance = null; 

    private static String security = "integratedSecurity=true;"; 

    private DBConnection() 
    { 

     try { 
      Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
     } catch (Exception e) { 
      System.out.println("Can not find the driver"); 
      System.out.println(e.getMessage()); 
     } 

     try{ 
      con = DriverManager.getConnection("jdbc:jtds:sqlserver://<Machine>;databaseName=<DBName>; useNTLMv2=true;"); 
      //set autocommit 
      con.setAutoCommit(true); 
      dma = con.getMetaData(); // get meta data 
      System.out.println("Connection to " + dma.getURL()); 
      System.out.println("Driver " + dma.getDriverName()); 
      System.out.println("Database product name " + dma.getDatabaseProductName()); 
     } 
     catch(Exception e){ 

      System.out.println("Problems with the connection to the database"); 
      System.out.println(e.getMessage()); 
      System.out.println(con); 
     } 
    } 
    public static void closeConnection() 
    { 
     try{ 
      con.close(); 
      System.out.println("The connection is closed"); 
     } 
     catch (Exception e){ 
      System.out.println("Error trying to close the database " + e.getMessage()); 
     } 
    } 


    public Connection getDBcon() 
    { 
     return con; 
    } 

    public static DBConnection getInstance() 
    { 
     if (instance == null) 
     { 
      instance = new DBConnection(); 
     } 
     return instance; 
    } 

    public static void startTransaction() 
    { try{ 
     con.setAutoCommit(false); 
    } 
    catch(Exception e){ 
     System.out.println("fail start transaction"); 
     System.out.println(e.getMessage()); 
    } 
    } 
    public static void commitTransaction() 
    { try{ 
     con.setAutoCommit(true); 
    } 
    catch(Exception e){ 
     System.out.println("fail commit transaction"); 
     System.out.println(e.getMessage()); 
    } 
    } 
    public static void rollbackTransaction() 
    { 
     try 
     { 
     con.rollback(); 
     con.setAutoCommit(true); 
     } 
    catch(Exception e){ 
     System.out.println("fail rollback transaction"); 
     System.out.println(e.getMessage()); 
    } 
    } 

InteliJ IDE上でTomcat 8を使用してアプリケーションとデバッグを実行しています。どちらがうまくいくの? (DB接続が確立されている)

問題は、私がwarファイルを取得して同じTomcat Serverにデプロイすると、DB接続が取得されないという問題です。 (No DB connection) Tomcatとプロジェクトのすべての.jarファイルをチェックして、必要なファイルをすべて追加しました。 この問題の原因を特定できないようです。たぶん、同じ問題で立ち往生してしまった誰かがそこにある

私はこの問題を引き起こしているものを、適切undertandingを取得することはできませんし、それを修正する方法

**編集:私はしようとしたときにエラーが表示された追加した後データをロードする

タイプ例外レポート

メッセージ要求処理に失敗しました。ネストされた例外はjava.lang.NullPointerExceptionです

説明サーバーがこの要求を実行できないような内部エラーが発生しました。

例外

org.springframework.web.util.NestedServletException:要求 処理が失敗しました。ネストされた例外はjava.lang.NullPointerExceptionが 根本的な原因である

java.lang.NullPointerExceptionが com.lifeletapp.business.dataLayer.DbLogIn.isValidUser(DbLogIn.java:27) com.lifeletapp.business.HelloController.verifyLogin( HelloController.java:33) sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) sun.reflect.NativeMethodAccessorImpl.invoke(不明なソース) sun.reflect.DelegatingMethodAccessorImpl.invoke(不明なソース)

DBLOGINクラス:

public class DbLogIn implements ILogIn 
{ 
    private Connection conn; 

    public DbLogIn() 
    { 
     conn = DBConnection.getInstance().getDBcon(); 
    } 

    public Staff isValidUser(String userName, String password) 
    { 
     Staff staff = new Staff(); 
     try { 
      String query = "SELECT * FROM Staff WHERE userName=? AND pass=?"; 
      PreparedStatement preparedStatement = conn.prepareStatement(query); 
      preparedStatement.setString(1, userName); 
      preparedStatement.setString(2, password); 
      ResultSet resultSet = preparedStatement.executeQuery(); 
      while(resultSet.next()) { 
       staff.setUserID(resultSet.getInt("userID")); 
       staff.setfName(resultSet.getString("fName")); 
       staff.setlName(resultSet.getString("lName")); 
       staff.setUserName(resultSet.getString("userName")); 
       staff.setPass(resultSet.getString("pass")); 
       staff.setEmail(resultSet.getString("email")); 
      } 
      resultSet.close(); 
      preparedStatement.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     return staff; 
    } 
} 

これは設定やサーバーの問題です。コードの問題ではありません。 コメントで述べたように、var conn == null - > trueの場合にテストしました。そして、その接続はどこでもゼロにならない。コードをご覧ください。次に、上記のコードはInteliJデバッガから実行すると再び動作します。

+0

DbLogIn.java 27行 - 投稿できますか? – Fildor

+0

はい。編集中 –

+0

#27の行に印をつけてください。 – Fildor

答えて

0

最終的には何が問題であるかを把握しました。 私のIDEで動作していた理由config: 1. Java JDK 1.7をJAVA_HOMEとして使用しました 2. Tomcatの古いバージョンをビルドとして使用しました 3. JDTSを使用するには、nlmauth .dllを.jarアーカイブからコピーして、それを設定されたenv JDKにコピーしてください(ここではjdk1.7 - >> bin - >>コピーしてください)

なぜTomcatサーバでは動作しませんでしたか: 1.私はTomcat 8.xxx 2.Tomcat 8.xxにはJDk 8が必要です。 3. JDK 8では、nlmauthを過ぎていません。dll(一度これを実行すればすべてが機能していた)

この問題にアプローチするために、最初のヒントはTomcatサーバーのログを調べます。

私の前提として、この問題は、統合セキュリティ経由でデータベース接続を確立している場合にのみ発生する可能性があります。 私の前提は、TomcatログでJDBCドライバを拒否していた主なエラーが統合セキュリティ資格情報に基づいているという事実に関連しています。

最高の運があります。

関連する問題