Как указать на пул соединений tomee.xml от shiro.ini
Я настроил пул соединений в tomme.xml
, Поэтому я полагаю, что мне не следует настраивать другой пул соединений в shiro.ini
, Вместо этого я могу просто указать на пул соединений в tomme.xml
от shiro.ini
, Как мне это сделать?
Вот tomee.xml
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<!-- see http://tomee.apache.org/containers-and-resources.html -->
<!-- activate next line to be able to deploy applications in apps -->
<!-- <Deployments dir="apps" /> -->
<Resource id="testDatabase" type="DataSource">
accessToUnderlyingConnectionAllowed = false
alternateUsernameAllowed = false
connectionProperties =
defaultAutoCommit = true
defaultReadOnly =
definition =
ignoreDefaultValues = false
initialSize = 0
jdbcDriver = com.teradata.jdbc.TeraDriver
jdbcUrl = jdbc:teradata://XXXXXX,tmode=TERA,charset=UTF8,RECONNECT_COUNT=11
jtaManaged = true
maxActive = 20
maxIdle = 20
maxOpenPreparedStatements = 0
maxWaitTime = -1 millisecond
minEvictableIdleTime = 30 minutes
minIdle = 0
numTestsPerEvictionRun = 3
password = XXXXXXXXXX
passwordCipher = PlainText
poolPreparedStatements = false
serviceId =
testOnBorrow = true
testOnReturn = false
testWhileIdle = false
timeBetweenEvictionRuns = -1 millisecond
userName = XXXXX
validationQuery =
</Resource>
</tomee>
Вот shiro.ini
, Мне нужно настроить jdbcRealm
в широ.ини
[main]
# This does not work
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
dataSource = org.apache.shiro.jndi.JndiObjectFactory
dataSource.resourceRef = true
dataSource.resourceName = "testDatabase"
jdbcRealm.dataSource = $dataSource
jdbcRealm.permissionsLookupEnabled = true
# Configure JDBC realm SQL queries.
jdbcRealm.authenticationQuery = SELECT XXX
jdbcRealm.userRolesQuery = SELECT XXX)
[urls]
/login.xhtml = user
/app/** = user
Я мог бы настроить jdbcRealm
в shiro.ini
но я хочу реализовать уже существующий пул соединений в tomee.xml. Как я могу это сделать?
4 ответа
Не эксперт в Широ, но ваша конфигурация tomee.xml (хотя и очень многословная) должна работать. Ваш подход правильный, не определяйте пул базы данных в приложении, определяйте его на самом сервере.
Посмотрите на принятый ответ здесь: Как настроить JDBCRealm для получения его источника данных из JNDI
И обратите внимание на два комментария к этому ответу. Ура!
Похоже, DataSource отсутствует в карте JNDI, поэтому вам нужно добавить его самостоятельно. Вы должны сделать это с помощью своего идентификатора источника данных (в данном случае 'testDatabase'). Существует несколько способов, например, я поместил следующее в web.xml:
<resource-ref>
<res-ref-name>testDatabase</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
</resource-ref>
или поставьте следующее при запуске ejb:
@Resource(name="testDatabase", type=javax.sql.DataSource.class)
Я предпочитаю использовать источник данных не-jta, и в этом случае ваш идентификатор источника данных не-jta должен быть 'testDatabaseNonJta'. Я не уверен, но следующая строка может вызвать проблемы у Широ:
accessToUnderlyingConnectionAllowed = false
Имя JNDI ресурса tomee.xml - "openejb:Resource/id" или определите напрямую глобальное имя и получите к нему доступ с помощью java:global/....