2017-01-17 4 views
0

Так что я столкнулся со следующей проблемой. Я разработал веб-приложение, которое имеет следующее соединение с базой данных SQL Server. (Дб код подключения прилагается)java веб-приложение отказывается подключаться к базе данных SQL при развертывании на Tomcat

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()); 
    } 
    } 

Я использую Tomcat 8 на InteliJ IDE для запуска приложения и отладки. Что хорошо работает. (Установлено соединение с БД)

Проблема в том, что когда я беру файл войны и развертываю его на одном сервере Tomcat, я не получаю никакого соединения с БД. (Нет соединения DB) Я проверил все .jar-файлы в tomcat и проекте, и я добавил все необходимые файлы. Кажется, что не удается найти причину этой проблемы. Может быть, есть кто-то, кто застрял с той же проблемой

я не могу получить правильный undertanding, что является причиной этой проблемы и как это исправить

** EDIT: После я добавил отображается ошибка при попытке загрузить данные

типа отчет исключения

сообщения обработки запроса не удалась; inested exception is 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 (Native Method) sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source)

класс 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 -> приведен верно. И доза подключения не будет никчемной. Пожалуйста, просмотрите код. Затем снова приведенный выше код работает при запуске от отладчика InteliJ.

+0

DbLogIn.java line 27 - можете ли вы опубликовать его? – Fildor

+0

Да. Редактирование сейчас –

+0

Не могли бы вы отметить, какая строка № 27? – Fildor

ответ

0

Итак, наконец, выяснилось, в чем проблема. Почему он работал над моей конфигурацией IDE: 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.

По моей презумпции эта проблема продлится только тогда, когда у вас установлено соединение с базой данных через Integrated Security. Моя презумпция связана с тем, что в журнале tomcat основная ошибка, которая отрицала драйвер JDBC, была основана на интегрированных учетных данных безопасности.

Удачи вам всем там.

Смежные вопросы