Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: Базы данных
Войти
Регистрация
Восстановить пароль
 
masli
42 / 9 / 7
Регистрация: 27.03.2013
Сообщений: 392
1

JNDI и настройка mysql-connector8 в server.xml

10.07.2018, 11:30. Просмотров 180. Ответов 4
Метки нет (Все метки)

При использовании msql-java-connector8 изменились и настройки подключения.

Но почему то выдается ошибка


/src/jdbc/db/ConnectionManager.java

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package jdbc.db;
 
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
 
public class ConnectionManager {
 
    private static final ConnectionManager manager = new ConnectionManager();
 
    public static ConnectionManager getManager() {
        return manager;
    }
 
    private DataSource dataSource;
 
    private ConnectionManager() {
        try {
            Context initContext = new InitialContext();
            Context rootContext = (Context) initContext.lookup("java:comp/env");
            dataSource = (DataSource) rootContext.lookup("jdbc/personnel_department_db_link");
        } catch (NamingException e) {
            throw new RuntimeException("Some errors occurred during DataSource lookup!", e);
        }
    }
 
    public Connection getConnection() {
        try {
            return dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException("Can not receive connection!", e);
        }
    }
    
    public void closeDbResources(Connection connection, Statement statement) {
        closeDbResources(connection, statement, null);
    }
 
    public void closeDbResources(Connection connection, Statement statement, ResultSet resultSet) {
        closeResultSet(resultSet);
        closeStatement(statement);
        closeConnection(connection);
    }
 
    private void closeConnection(Connection connection) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                System.out.println("Error: Connection has not been closed!");
            }
        }
    }
 
    private void closeStatement(Statement statement) {
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                System.out.println("Error: Statement has not been closed!");
            }
        }
    }
 
    private void closeResultSet(ResultSet resultSet) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                System.out.println("Error: ResultSet has not been closed!");
            }
        }
    }
}



база данных

Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DROP SCHEMA IF EXISTS `personnel_department_db`;
 
CREATE SCHEMA IF NOT EXISTS `personnel_department_db`
CHARACTER SET `utf8`;
 
USE `personnel_department_db`;
 
CREATE TABLE `employees` (
  `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `email` VARCHAR(255) NOT NULL,
  `password` VARCHAR(255) NOT NULL,
  `salary` NUMERIC(10, 2) NOT NULL
);
 
INSERT INTO `personnel_department_db`.`employees` (`id`, `email`, `password`, `salary`) VALUES (1, 'ivan@gmail.com', 'secret', 12.50);
INSERT INTO `personnel_department_db`.`employees` (`id`, `email`, `password`, `salary`) VALUES (2, 'petr@gmail.com', 'qwert', 55.99);
INSERT INTO `personnel_department_db`.`employees` (`id`, `email`, `password`, `salary`) VALUES (3, 'sidor@gmail.com', 'SuperstR0NGpassWord', 1000.20);



web.xml

Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DROP SCHEMA IF EXISTS `personnel_department_db`;
 
CREATE SCHEMA IF NOT EXISTS `personnel_department_db`
CHARACTER SET `utf8`;
 
USE `personnel_department_db`;
 
CREATE TABLE `employees` (
  `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `email` VARCHAR(255) NOT NULL,
  `password` VARCHAR(255) NOT NULL,
  `salary` NUMERIC(10, 2) NOT NULL
);
 
INSERT INTO `personnel_department_db`.`employees` (`id`, `email`, `password`, `salary`) VALUES (1, 'ivan@gmail.com', 'secret', 12.50);
INSERT INTO `personnel_department_db`.`employees` (`id`, `email`, `password`, `salary`) VALUES (2, 'petr@gmail.com', 'qwert', 55.99);
INSERT INTO `personnel_department_db`.`employees` (`id`, `email`, `password`, `salary`) VALUES (3, 'sidor@gmail.com', 'SuperstR0NGpassWord', 1000.20);


index.html

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="refresh" content="0; url=jdbc-example.html">
 
    <title>JDBC Examples</title>
</head>
<body>
 
</body>
</html>


web-inf\pages\jdbcExamplePage.jsp

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.util.Random"%>
<%@page import="jdbc.db.ConnectionManager"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 
<!DOCTYPE html>
 
<html>
<head>
    <meta charset="UTF-8">
    <title>JDBC Examples</title>
 
    <link rel="stylesheet" href="css/styles.css">
</head>
 
<%!
    private void saveUser(String email, String password, Double salary) {
        Connection c = null;
        PreparedStatement statement = null;
 
        try {
            c = ConnectionManager.getManager().getConnection();
            
            statement = c.prepareStatement("INSERT INTO personnel_department_db.employees (email, password, salary) VALUES (?, ?, ?)");
 
            statement.setString(1, email);
            statement.setString(2, password);
            statement.setDouble(3, salary);
 
            statement.executeUpdate();
        } catch(SQLException e) {
            throw new RuntimeException("Some errors occurred during DB access!", e);
        } finally {
            ConnectionManager.getManager().closeDbResources(c, statement);
        }
    }
 
    private void updateUser(Integer userId) {
        Connection c = null;
        PreparedStatement statement = null;
 
        String email = "_NEEEEEW_ Email!!!";
        String password = "_NEEEEEW_ Password!!!";
 
        try {
            c = ConnectionManager.getManager().getConnection();
            statement = c.prepareStatement("UPDATE personnel_department_db.employees SET email = ?, password = ? WHERE id = ?");
 
            statement.setString(1, email);
            statement.setString(2, password);
            statement.setInt(3, userId);
 
            statement.executeUpdate();
    
        } catch(SQLException e) {
            throw new RuntimeException("Some errors occurred during DB access!", e);
        } finally {
            ConnectionManager.getManager().closeDbResources(c, statement);
        }
    }
 
    private void deleteUser(Integer userId) {
        Connection c = null;
        PreparedStatement statement = null;
 
        try {
            c = ConnectionManager.getManager().getConnection();
            statement = c.prepareStatement("DELETE FROM personnel_department_db.employees WHERE id = ?");
 
            statement.setInt(1, userId);
 
            statement.executeUpdate();
    
        } catch(SQLException e) {
            throw new RuntimeException("Some errors occurred during DB access!", e);
        } finally {
            ConnectionManager.getManager().closeDbResources(c, statement);
        }
    }
 
    private int controlCrisis() {
        Connection c = null;
        PreparedStatement statement = null;
 
        try {
            c = ConnectionManager.getManager().getConnection();
            statement = c.prepareStatement("UPDATE personnel_department_db.employees SET salary = 1");
            int updatedRows = statement.executeUpdate();
 
            return updatedRows;
        } catch(SQLException e) {
            throw new RuntimeException("Some errors occurred during DB access!", e);
        } finally {
            ConnectionManager.getManager().closeDbResources(c, statement);
        }
    }
 
    private long importUsers() {
        Connection c = null;
        PreparedStatement statement = null;
 
        try {
            c = ConnectionManager.getManager().getConnection();
            statement = c.prepareStatement("INSERT INTO personnel_department_db.employees (email, password, salary) VALUES (?, ?, ?)");
 
            long start = System.nanoTime();
            Random random = new Random();
 
            for(int i = 0; i < 10; i++) {
                String email = "user_" + i + "@gmail.com";
                String password = "password_" + i;
                Integer salary = random.nextInt(1000);
 
                statement.setString(1, email);
                statement.setString(2, password);
                statement.setDouble(3, salary);
 
                statement.executeUpdate();
            }
 
            long finish = System.nanoTime();
            long delta = (finish - start);
 
            return delta;
        } catch(SQLException e) {
            throw new RuntimeException("Some errors occurred during DB access!", e);
        } finally {
            ConnectionManager.getManager().closeDbResources(c, statement);
        }
    }
 
    private int getDepartment(int employeeCount) {
        Connection c = null;
        PreparedStatement statement = null;
 
        int total = 0;
 
        try {
            c = ConnectionManager.getManager().getConnection();
            c.setAutoCommit(false);
 
            statement = c.prepareStatement("INSERT INTO personnel_department_db.employees (email, password, salary) VALUES (?, ?, ?)");
 
            
            Random random = new Random();
 
            for(int i = 0; i < employeeCount; i++) {
                String email = "user_" + i + "@gmail.com";
                String password = "password_" + i;
                Integer salary = random.nextInt(1000);
 
                if (salary > 500) {
                    throw new RuntimeException("Этот сотрудник слишком дорогой!");
                }
 
                statement.setString(1, email);
                statement.setString(2, password);
                statement.setDouble(3, salary);
 
                statement.executeUpdate();
 
                total = total + 1;
            }
 
            c.commit();
 
            return employeeCount;
        } catch(SQLException e) {
            total = 0;
 
            try {
                c.rollback();
            } catch (SQLException ex) {
                throw new RuntimeException("Can not rollback transaction!", ex);
            }
 
            throw new RuntimeException("Some errors occurred during DB access!", e);
        } finally {
            ConnectionManager.getManager().closeDbResources(c, statement);
        }
    }
%>
 
<body>
 
    <%
        Integer updatedRows = null;
        Integer employeeCount = null;
 
        String btnSave = request.getParameter("btn_save_employee");
        String editId = request.getParameter("edit_id");
        String deleteId = request.getParameter("delete_id");
        String btnCrisis = request.getParameter("btn_crisis_control");
        String btnImport = request.getParameter("btn_import_users");
        String btnGetDepartment = request.getParameter("btn_get_department");
 
        Long delta = null;
 
        if (btnSave != null) {
            String email = request.getParameter("txt_email");
            String password = request.getParameter("txt_password");
            String salaryStr = request.getParameter("txt_salary");
            Double salary = new Double(salaryStr);
 
            saveUser(email, password, salary);
        } else if (btnCrisis != null) {
            updatedRows = controlCrisis();
        } else if (editId != null) {
            Integer intEditId = new Integer(editId);
            updateUser(intEditId);
        } else if (deleteId != null) {
            Integer intDeleteId = new Integer(deleteId);
            deleteUser(intDeleteId);            
        } else if (btnImport != null) {
            delta = importUsers();
        } else if (btnGetDepartment != null) {
            String countStr = request.getParameter("txt_employee_count");
            Integer count = new Integer(countStr);
 
            employeeCount = getDepartment(count);
        }
    %>
 
    <h1>Список сотрудников</h1>
 
    <%
        if (delta != null) {
    %>
        <h3>Импорт завершен за <%=delta %> мс.</h3>
    <%      
        }   
    %>
 
    <table >
        <tr>
            <th>ID</th>
            <th>Email</th>
            <th>Пароль</th>
            <th>Зараюотная плата</th>
            <th>Операции</th>
        </tr>
 
        <%
            Connection c = null;
            PreparedStatement statement = null;
            ResultSet set = null;
 
            try {
                c = ConnectionManager.getManager().getConnection();
                statement = c.prepareStatement("SELECT id, email, password, salary FROM personnel_department_db.employees");
                set = statement.executeQuery();
 
                while(set.next()) {
                    Integer id = set.getInt(1);             // Вот так получать данные - очень плохо!
                    String email = set.getString("email");  // А вот так - очень хорошо!
                    String password = set.getString("password");
                    Double salary = set.getDouble("salary");
        %>
                    <tr>
                        <td>
                            <%=id %>
                        </td>
                        <td>
                            <%=email %>
                        </td>
                        <td>
                            <%=password %>
                        </td>
                        <td>
                            <%=salary %>
                        </td>
                        <td>
                            <a href="jdbc-example.html?edit_id=<%=id%>">Обновить</a>
                            <a href="jdbc-example.html?delete_id=<%=id%>">Удалить</a>
                        </td>
                    </tr>
        <%  
                }
            } catch(SQLException e) {
                throw new RuntimeException("Some errors occurred during DB access!", e);
            } finally {
                ConnectionManager.getManager().closeDbResources(c, statement, set);
            }
        %>
 
    </table>
 
    <br />
    <hr />
    <br />
 
    <div class="formFrame">
        <h2>Добавить сотрудника</h2>
 
        <form action="jdbc-example.html">
            Email:
            <br />
            <input type="text" id="txt_email" name="txt_email" /> 
 
            <br />
            <br />
 
            Пароль:
            <br />
            <input type="text" id="txt_password" name="txt_password" />
 
            <br />
            <br />
 
            Заработная плата:
            <br />
            <input type="text" id="txt_salary" name="txt_salary" />
 
            <br />
            <br />
            <input type="submit" name="btn_save_employee" value="Сохранить" />
            &nbsp;
            <input type="submit" name="btn_import_users" value="Импортировать" />
        </form>
    </div>
 
    <div class="formFrame">
        <form action="jdbc-example.html">
            <h2>Управление финансовым кризисом</h2>
 
            <input type="submit" name="btn_crisis_control" value="Побороться с кризисом" />
            
            <%
                if (updatedRows != null) {
            %>
                <h3>Мы поборолись с кризисом <span style="color: red;"> <%=updatedRows %> раз(а)! </span></h3>
            <%
                }
            %>
            
        </form>
    </div>
 
    <div class="formFrame">
        <form action="jdbc-example.html">
            <h2>Нанять отдел сотрудников</h2>
 
            Сколько сотрудников хотите?
            <br />
            <input type="text" id="txt_employee_count" name="txt_employee_count" /> 
 
            <br />
            <br />
            <input type="submit" name="btn_get_department" value="Нанять всех" />
 
            <%
                if (employeeCount != null) {
            %>
                <h3>Вы наняли <span style="color: red;"> <%=employeeCount %> сотрудников! </span></h3>
            <%
                }
            %>
 
        </form>
    </div>
</body>
</html>



ошибка

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SEVERE: Servlet.service() for servlet [JspExample] in context with path [/jndi] threw exception [An exception occurred processing [/WEB-INF/pages/jdbcExamplePage.jsp] at line [287]
 
284:            } catch(SQLException e) {
285:                throw new RuntimeException("Some errors occurred during DB access!", e);
286:            } finally {
287:                ConnectionManager.getManager().closeDbResources(c, statement, set);
288:            }
289:        %>
290: 
 
 
Stacktrace:] with root cause
java.lang.NoClassDefFoundError: Could not initialize class jdbc.db.ConnectionManager
    at org.apache.jsp.WEB_002dINF.pages.jdbcExamplePage_jsp._jspService(jdbcExamplePage_jsp.java:442)


server.xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
 
    <Resource 
    type="javax.sql.DataSource" 
    
    auth="Container" 
    description="User database that can be updated and saved" 
    
    driverClassName="com.mysql.cj.jdbc.Driver" 
    name="jdbc/personnel_department_db_link" 
    username="root" 
    password="root" 
    
    url="jdbc:mysql://localhost:3306/personnel_department_db?verifyServerCertificate=false&amp;useSSL=false&amp;allowPublicKeyRetrieval=true&amp;requireSSL=false&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC" 
    />

Подскажите в чем ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2018, 11:30
Ответы с готовыми решениями:

Не могу подключиться через JNDI Tomcat Mysql
В общем вот делаю все по инструкции к Tomcat 8.5.5 conf\context.xml &lt;?xml...

ControllerServlet - настройка web.xml
Здравствуйте! Помогите новенькому, плиз! Имеем приложение (называется...

Новая проблема с jndi
&lt;ejb-jar&gt; &lt;enterprise-beans&gt; &lt;entity&gt; &lt;description&gt; &lt;/description&gt; ...

JNDI и DataSource (J2EE + InterBase6 + мост JDBC-ODBC)
Ситуация следующая: 1)Есть десктопное приложение, написанное в J2SE1.4.1 с...

Настройка PHP+mySQL на IIS 7.0 (Windows Server 2008)
Всем привет. пытаюсь настроить PHP под IIS 7.0. 1. cоздал каталог с php 2....

4
xoraxax
1375 / 1308 / 389
Регистрация: 05.07.2013
Сообщений: 6,307
Завершенные тесты: 2
10.07.2018, 13:48 2
не надо код в jsp пихать. Не надо!
0
masli
42 / 9 / 7
Регистрация: 27.03.2013
Сообщений: 392
10.07.2018, 13:55  [ТС] 3
Ну это же учебный пример.................
Ну зачем мне для разбора задач делать академически правильно ????

Мне нужна просто подсказка решения заданного вопроса....
0
xoraxax
1375 / 1308 / 389
Регистрация: 05.07.2013
Сообщений: 6,307
Завершенные тесты: 2
10.07.2018, 14:42 4
Ты пишешь говнокод, который не работает, это неправильно. Я тебе говорю как сделать правильно, ты говоришь, что тебе не надо правильно.
0
masli
42 / 9 / 7
Регистрация: 27.03.2013
Сообщений: 392
15.07.2018, 22:07  [ТС] 5
Обязательно конфигурирование в каталоге WEB-INF, файла context.xml

Веб-приложение обращается к web.xml, web.xml читает context.xml, а он обращается к JNDI, JNDI вызывает JNDI provider (в данном случае это Tomcat). provider читает файл server.xml, обращается к базе и получает нужное число коннекторов , затем возвращает в приложение объект DataSource, который является хранилищем для уже полученных коннекторов (пул коннекторов)

Решено
0
15.07.2018, 22:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2018, 22:07

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
Ajenti CentOS 6 Linux 2.6.32-573.7.1.el6.x86_64 x86_64 Добрый день....

IIS server 6 на windows server 2003, настройка web-узла
Здравствуйте, нужна помощь по такому вопросу. Я работаю на виртуалке, на ней я...

Настройка передачи данных из SQL Server 2005 в Sharepoint Server 2010 Foundation
Доброго времени суток. Хочу реализовать одну схему по запросу данных из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru