Пул соединений для Tomcat в Eclipse для сервера MS Sql

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

Должен ли SQL-сервер находиться на моем компьютере? Может на другом сервере?

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

введите здесь описание изображения

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

введите здесь описание изображения

и добавить

    <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" />     

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

введите здесь описание изображения

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

На всякий случай, потому что некоторые люди используют драйвер JDBC. загрузите его и добавьте в мой Tomcat > Lib.

Следуя этим заметкам от парня, который настроил пул подключений для работы в своей программе 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% БЕЗ ПРОБЛЕМ, но я не могу заставить работать указанный выше пул соединений.

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)

person arsarc    schedule 22.12.2016    source источник
comment
Должен ли SQL-сервер находиться на моем компьютере? Нет. Может ли он быть на другом сервере? Да.   -  person Elliott Frisch    schedule 23.12.2016


Ответы (2)


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

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

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

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

person SwampDev    schedule 22.12.2016

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

person Chris M    schedule 23.12.2016