Как указать на пул соединений 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

И обратите внимание на два комментария к этому ответу. Ура!

Пытаться

securityManager.realm = $jdbcRealm

Похоже, 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/....

Другие вопросы по тегам