Как связать имена пула c3p0 identityTokens и JDBC - PullRequest
0 голосов
/ 17 мая 2018

Прежде всего, имейте в виду, что я администратор по мониторингу, а не разработчик Java.

Я хочу отслеживать некоторые значения атрибутов пулов c3p0 , и я обнаружил, чтотакие пулы имеют уникальный identity Token, который состоит из буквенно-цифровой строки и шестнадцатеричной строки, соединенной с символом канала, например:

2rxggs9vtsz4i48lg1tk|665e33d4

Но пулы JDBC, найденные вcontext.xml файл сервера tomcat показывает только стандартные имена:

    <Resource name="jdbc/EXAMPLE"
            jdbcUrl="jdbc:oracle:thin:@oracle:1521:PRExxx" user="EXAMPLE"
            password="my34xXple" auth="Container" description="DB Connection"
            driverClass="oracle.jdbc.driver.OracleDriver" maxPoolSize="50"
            minPoolSize="2" maxIdleTime="30" checkoutTimeout="2000"
            acquireIncrement="1" maxConnectionAge="3600"
            factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource"
            preferredTestQuery="SELECT 1 FROM dual" />

Я использую JAR для запроса MBeans запущенного процесса Java через соединение JMX.Вот Catalina:type=Resource единицы:

Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/scope (String) = Shareable
Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/description (String) = DB Connection
Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/name (String) = jdbc/EXAMPLE
Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/type (String) = com.mchange.v2.c3p0.ComboPooledDataSource

, а здесь com.mchange.v2.c3p0 единицы

com.mchange.v2.c3p0:type=C3P0Registry/AllIdentityTokenCount (Integer) = 15
com.mchange.v2.c3p0:type=C3P0Registry/AllIdentityTokenizedCount (Integer) = 15
com.mchange.v2.c3p0:type=C3P0Registry/AllPooledDataSourcesCount (Integer) = 5
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/dataSourceName (String) = 2rxggs9vtsz4i48lg1tk|665e33d4
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/threadPoolNumIdleThreads (Integer) = 3
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/acquireRetryAttempts (Integer) = 30
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/autoCommitOnClose (Boolean) = false
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/identityToken (String) = 2rxggs9vtsz4i48lg1tk|665e33d4

Это мои вопросы:

  1. Как связать токены идентификации и имена пула ресурсов?

  2. В моем примере приложения в файле context.xml определено 5 ресурсов, но имеется 15 c3p0бассейны.Это также можно найти в атрибутах C3P0Registry/AllIdentityTokenizedCount и C3P0Registry/AllPooledDataSourcesCount.Не существует ли отношения один-к-одному?

  3. Как изготавливаются жетоны идентификации?Они случайные?Что означают две строки?Связаны ли они со значениями процесса или машины?

Спасибо

1 Ответ

0 голосов
/ 18 мая 2018
  1. Имя <Resource name="..."> является именем jndi, без обязательной связи с именем JMX. Если вы хотите, чтобы было Соединение, задайте для свойства dataSourceName среди всех остальных, что вы устанавливаете, постоянное имя.

  2. Не существует взаимно-однозначного отношения между PooledDataSources и токенами / токенами. Типичный PooledDataSource может содержать три идентифицированных токена элемента. Однако на PooledDataSource должен быть только один компонент JMX.

  3. Идентификационные токены - это, по сути, случайные значения, но с некоторыми детерминированными частями, основанными на хосте, предназначенными для предотвращения возможности столкновения. (В Java теперь есть встроенная поддержка UUID, но не было, когда был написан c3p0.)

Возможно, вы не захотите иметь дело с токенами идентификации в вашей администрации c3p0 DataSource s. Если вы гарантируете, что у каждого из DataSource есть уникальный набор dataSourceName, вы можете исключить маркер идентификации из имени JMX и иметь стабильные, воспроизводимые имена JMX. Пожалуйста, смотрите Настройка и управление c3p0 через JMX .

...