|
|
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Всем привет. Установлен Tomcat 7. Пытаюсь сделать пул подключений к БД Oracle не через dbcp, а через Oracl'овый пул. В папку CATALINA_BASE\lib бросил ojdbc6.jar В CATALINA_BASE\conf настроил файл server.xml: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. В CATALINA_BASE\conf настроил файл context.xml: Код: xml 1. 2. 3. 4. 5. В приложении настроил WEB-INF\web.xml: Код: xml 1. 2. 3. 4. 5. 6. Сделал класс для теста: Код: 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. И сделал страничку connect.jsp: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Запрос выполняется корректно и все хорошо, но это же должен быть пул соединений. Стоит свойство InitialLimit="10", т.е. при создании он должен создать 10 подключений к БД и в v$session я их должен видеть. А происходит следующее: при выполнении запроса в v$session есть одна сессия, при завершении запроса она исчезает. Хотя во всех местах написано, что метод close() не должен закрывать физического соединения, а должен возвращать его в пул. Подскажите, пож-та, что я сделал не так. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 14:48:14 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Разве оракловый датасорс не мог прибить сессию, но оставить живым физическое соединение? По-моему это было бы вполне разумным вариантом. http://stackoverflow.com/questions/1039637/relation-between-oracle-session-and-connection-pool Там есть ссылку на книгу, в которой как раз есть объяснения ссесии и соединения в рамках пула. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2013, 18:07:18 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Разницу понял. Не подскажете как сделать пул сессий (соединений+сессий)? В БД используются пакеты и при их инициализации выполняются приличные операции и сохраняются в переменные в пакете. Хотелось бы, чтобы создались сессии и для них были проинициализированы пакеты только один раз, а не каждый раз когда соединение отдается сервлету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 08:00:43 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Вот локально можно заставить пул открывать заранее требуемые соединения, через вызов метода OracleDataSource.setConnectionCachingEnabled(). Например, пока я не нажму Enter, то вижу 5 сессий: DbPool.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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 13:07:57 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Denis Popov, Как бы это tomcat'у сказать, добавил параметр ConnectionCachingEnabled="true" в <Rosource> - ничего не изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 15:32:47 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
kruptХотелось бы, чтобы создались сессии и для них были проинициализированы пакеты только один раз, а не каждый раз когда соединение отдается сервлету.Заберите соединение из пула настолько, насколько это необходимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 15:40:13 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
kruptКак бы это tomcat'у сказать, добавил параметр ConnectionCachingEnabled="true" в <Rosource> - ничего не изменилось. А если с маленькой буквы написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 15:40:28 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЗаберите соединение из пула настолько, насколько это необходимо. Пользователь подключается и неизвестно когда отключиться. Если привязывать соединение в session.setAttribute, дак только от пула никакого, получается, что каждому пользователю 1 соединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:06:28 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
kruptПользователь подключается и неизвестно когда отключиться. Если привязывать соединение в session.setAttribute, дак только от пула никакого толку, получается, что каждому пользователю 1 соединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:07:33 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
On 22.08.2013 16:32, krupt wrote: > Как бы это tomcat'у сказать, добавил параметр ConnectionCachingEnabled="true" в <Rosource> - ничего не изменилось. Например, тут говорят что там все плохо: https://forums.oracle.com/message/1673742#559728 предлагают наследоваться от OracleDataSource и вписать куда-нибудь вызов setConnectionCachingEnabled(), например, в setConnectionCacheProperties(). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:14:39 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
kruptПользователь подключается и неизвестно когда отключиться. Если привязывать соединение в session.setAttribute, дак только от пула никакого, получается, что каждому пользователю 1 соединение.Давайте вы немного определите меня в реализации вашей системы ... В случае двухзвёнки "пользователь == логин СУБД", в случае трёхзвёнки "пользователь == некая_сущность". В случае трёхзвёнки с базой работает совершенно отдельный служебный пользователь и сессия пользователя "привязывается" к запросам отдельным механизмом. В этом случае на одном физическом подключении к СУБД могут исполняться запросы разных сессий. А в этом случае "возвращать или не возвращать" определяется, в основном, частотой запросов. А как организовано у вас ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:20:17 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, +1 В СУБД оракле сессия = коннект = соединение. Следовательно инициализация пакетов субд у вас долгая с какой целью? Пакеты в БД привязаны к сессии. Т.е. на каждого пользюка СУБД свои переменные пакетов и своя их инициализация. IMHO вы 3-х звенку пытаетесь натянуть на 2-х звенку. Или 5-ю пакетами-коннектами работать со всеми сервлетами (HTTP сеансами), причём не давая пулу их закрыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:42:51 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Petro123В СУБД оракле сессия = коннект = соединение. Пруфлинк есть? Я выше привел ссылку на книгу, в которой написано обратное утверждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:53:29 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
BlazkowiczPetro123В СУБД оракле сессия = коннект = соединение. Пруфлинк есть? Я выше привел ссылку на книгу, в которой написано обратное утверждение. я тебя не понял. Скажи своими словами. kruptт.е. при создании он должен создать 10 подключений к БД и в v$session я их должен видеть. т.е. 10 подключений и будет 10 сессий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 16:59:03 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, там наверно Java сессия путается с СУБД сессией imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 17:00:19 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Petro123Blazkowicz, там наверно Java сессия путается с СУБД сессией imho 100% Expert Oracle JDBC Programming Connections and Sessions in Oracle Before we delve into connection pooling, you need to understand the difference between a connection and a session in the context of Oracle. This difference is particularly useful in understanding OCI connection pooling, which the upcoming section OCI Connection Pooling covers. Most of us think of connections and sessions as being the same, but in reality they are not. A connection is a network connection or a physical pathway to the Oracle database. A session encapsulates a user s interaction with the Oracle database from the time the user has been authenticated to the time the user disconnects. A session connects to Oracle via a physical connection. Note that you could be connected to a database and yet have zero, one, or more sessions that use a given connection. In the most common case, one session corresponds to one connection this explains why we tend to consider them the same. Figure 14-1 illustrates a connection being shared by three sessions, two of which belong to the user SCOTT, and one of which belongs to the user BENCHMARK. The thick arrow represents the connection itself. Although the figure shows a two-tier system, the same concept applies to a three-tier system. You will learn in the section OCI Connection Pooling how you can open multiple sessions per physical connection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 17:08:11 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
я просто не представляю что у него там в инит пакета окромя переменных Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 17:20:05 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
krupt, еще вариант: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#As_a_Resource Только надо будет учесть что в качестве Connection тебе будет приходить не оракловая реализация (т.е. не будут работать методы типа BLOB.createTermporary(), требующие именно OracleConnection)но до нее можно достучаться через Connection.getMetadata().getConnection() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 17:30:50 |
|
||
|
Tomcat 7 + JSP + OracleDataSource Pool
|
|||
|---|---|---|---|
|
#18+
Denis Popovkrupt, еще вариант: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#As_a_Resource Только надо будет учесть что в качестве Connection тебе будет приходить не оракловая реализация (т.е. не будут работать методы типа BLOB.createTermporary(), требующие именно OracleConnection)но до нее можно достучаться через Connection.getMetadata().getConnection() Можно использовать томкатовский пул вместо OracleDataSourceFactory. Тот не сможет сделать финт ушами и удалить сессию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2013, 17:32:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38374502&tid=2128764]: |
0ms |
get settings: |
19ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
78ms |
get tp. blocked users: |
2ms |
| others: | 322ms |
| total: | 495ms |

| 0 / 0 |
