Как связать имена пула c3p0 identityTokens и JDBC
Прежде всего, имейте в виду, что я администратор мониторинга, а не разработчик 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
Это мои вопросы:
Как связать имена токенов и имена пула ресурсов?
В моем примере приложения есть 5 ресурсов, определенных в
context.xml
файл, но есть 15 пулов c3p0. Это также найдено вC3P0Registry/AllIdentityTokenizedCount
и вC3P0Registry/AllPooledDataSourcesCount
атрибутов. Разве нет отношений один-к-одному?Как создаются идентификационные токены? Они случайные? Что означают две строки? Связаны ли они с ценностями процесса или машины?
Спасибо
1 ответ
<Resource name="...">
name - это имя jndi, без обязательной связи с именем JMX. Если вы хотите, чтобы было соединение, установите свойствоdataSourceName
среди всех остальных вы устанавливаете постоянное имя.Между личными отношениями нет
PooledDataSources
и идентификационные токены / токены. ТипичныйPooledDataSource
может содержать три идентифицированных токена элемента. Тем не менее, должен быть только один компонент JMX наPooledDataSource
,Идентификационные токены - это, по сути, случайные значения, но с некоторыми детерминированными частями, основанными на хосте, предназначенными для предотвращения возможности столкновения. (В Java теперь есть встроенная поддержка UUID, но не было, когда был написан c3p0.)
Возможно, вы не захотите иметь дело с токенами идентификации в вашей администрации c3p0 DataSource
s. Пока вы уверены, что ваш DataSource
у каждого есть уникальный dataSourceName
Установив, вы можете исключить маркер идентификации из имени JMX и иметь стабильные, воспроизводимые имена JMX. Пожалуйста, смотрите раздел Конфигурирование и управление c3p0 через JMX.