2016-12-22 18 views
0

Хорошо. Я пытаюсь настроить пул соединений в веб-приложении Vaadin, и я слышал, что лучше сделать Tomcat для объединения пулов. Итак, у меня есть , которые просматривают некоторые видеоролики Youtube и много учебников, и я слишком плохо отношусь к этому, чтобы заставить его работать. Мне действительно нужно, чтобы кто-то помог.Пул соединений для Tomcat в Eclipse для сервера MS Sql

Должен ли сервер SQL быть на моем компьютере? Может ли это быть на другом сервере?

Допустим, у меня есть БД:

enter image description here

И я хочу, чтобы получить доступ к таблице в DB2 с именем Table1. Итак, согласно this, я должен зайти в server.xml в ECLIPSE.

enter image description here

и добавить

<Resource name="jdbc/ServerName" 
     auth="Container" 
     factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" 
     driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
     type="javax.sql.DataSource" 
     maxActive="50" 
     maxIdle="10" 
     maxWait="15000" 
     username="username" 
     password="password" 
     url="jdbc:sqlserver://ServerName;instance=SQLEXPRESS;databaseName=DB2;" 
     removeAbandoned="true" 
     removeAbandonedTimeout="30" 
     logAbandoned="true" />  

Но согласно this guy, Это должно быть в context.xml (Я пытался просто context.xml, я пытался просто сервер .xml и я попытался с этим кодом ресурса в обоих.) Я ДУМАЮ, что он просит META-INF> Context.xml в моем веб-приложении Vaadin, которого я не могу найти. Это единственная папка Meta-Inf, которую я имею, и когда я создаю файл context.xml здесь, она просто исчезает, когда я пытаюсь ее скомпилировать.

enter image description here

Во всяком случае, пытается продолжить с учебником, мне нужно добавить драйверы к моей папке Tomcat> Lib так что скачать все these drivers и добавить их.

Просто для хорошей оценки, потому что некоторые другие люди используют JDBC driver Я загружаю это и добавляю его в свой Tomcat> Lib тоже.

После these notes от парня, который получил Пулы соединений для работы в своей программе Vaadin, я добавляю это в моем Java-код:

Connection con = null; 
     Statement stmt = null; 
     ResultSet rs = null; 
     try { 
      Context ctx = (Context) new InitialContext().lookup("java:comp/env"); 
      BasicDataSource ds = (BasicDataSource)ctx.lookup("jdbc/ServerName"); 
      con = ds.getConnection(); 

      String sql = "select * from DB2.dbo.Table1 where [Field1] IS NULL";  
      stmt = con.createStatement(); 
      rs = stmt.executeQuery(sql); 
      //Add in all info 
      while (rs.next()){ 
       beanResultsList.addBean(new Bean(
         rs.getInt(1), 
         rs.getString(2), 
         rs.getString(3), 
         rs.getDate(4), 
         rs.getDate(5), 
         rs.getInt(6), 
         rs.getInt(7), 
         rs.getInt(8), 
         rs.getInt(9), 
         rs.getString(10), 
         rs.getString(11), 
         rs.getString(12), 
         rs.getString(13) 
         )); 
      } 
      } catch (SQLException | NamingException e) { 
       e.printStackTrace(); 
      }finally{ 
       try { con.close(); } catch (SQLException e) {} 
       try { rs.close(); } catch (SQLException | NullPointerException e) {} 
       try { stmt.close(); } catch (SQLException e) {} 
      } // End finally (try catch) 

Когда я бегу, я получаю NullPointerException на con.close() в блоке finally, потому что он не тянет за столом. Или хорошо, у меня нет связи в первую очередь.

Я честно понятия не имею, что я делаю. Я не знаю, можно ли подключиться к серверу sql, если он не отключается от моего компьютера? Каждый отдельный пример, который я вижу, использует Localhost.

Редактировать: Для справки, следующий код работает 100% ZERO PROBLEMS, но я не могу получить пул соединений выше, чтобы работать.

Connection con = null; 
     Statement stmt = null; 
     ResultSet rs = null; 
     try { 
      Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
      con = DriverManager.getConnection("jdbc:jtds:sqlserver://ServerName;instance=SQLEXPRESS","username","password"); 

      String sql = "select * from DB2.dbo.Table1 where [Field1] IS NULL";  
       stmt = con.createStatement(); 
       rs = stmt.executeQuery(sql); 
       //Add in all info 
       while (rs.next()){ 
        beanResultsList.addBean(new Bean(
          rs.getInt(1), 
          rs.getString(2), 
          rs.getString(3), 
          rs.getDate(4), 
          rs.getDate(5), 
          rs.getInt(6), 
          rs.getInt(7), 
          rs.getInt(8), 
          rs.getInt(9), 
          rs.getString(10), 
          rs.getString(11), 
          rs.getString(12), 
          rs.getString(13) 
          )); 
       } 
       } catch (SQLException | NamingException e) { 
        e.printStackTrace(); 
       }finally{ 
        try { con.close(); } catch (SQLException e) {} 
        try { rs.close(); } catch (SQLException | NullPointerException e) {} 
        try { stmt.close(); } catch (SQLException e) {} 
       } // End finally (try catch) 
+0

* ли сервер SQL должен быть на моем компьютере? * Нет. * Может ли это быть на другом сервере? * Да. –

ответ

1

Я бы посоветовал вам замедлить ход. Этот вопрос представляет собой комбинацию нескольких вопросов. Сосредоточьтесь только на одном вопросе за раз, найдите свой ответ и соедините кусочки, когда увидите, как они подходят.

Во-первых, «Должен ли сервер SQL быть на моем компьютере? Может ли он быть на другом сервере?».Он может быть на другом сервере, если у вас есть доступ к сети.

Во-вторых, «В любом случае, пытаясь продолжить обучение, мне нужно добавить драйверы в папку Tomcat> Lib, чтобы загрузить все эти драйверы и добавить их». «Эти драйверы», о которых вы говорите, являются драйверами JDBC. Если вы подключаетесь к Microsoft SQL Server, то дополнительные драйверы JDBC, о которых вы говорите, бесполезны для вас, потому что они являются драйверами MySQL JDBC (это совершенно другая база данных, чем SQL Server).

В-третьих, вы явно используете Maven, и когда вы добавляете папку META-INF и файл context.xml, она стирается, потому что все в папке «target» в проекте Maven восстанавливается при запуске сборки Maven , Вам нужно добавить папку META-INF в папку/src/main/webapp /. Затем файл context.xml будет скопирован во время сборки до того места, где вы изначально пытались его поместить, и ожидал, что он останется.

1

Я считаю, что правильное место, чтобы определить ваш JNDI DataSource находится в server.xml с ссылкой на context.xml увидеть этот ответ Tomcat JNDI resource name aliases