如何从shiro.ini指向tomee.xml连接池

时间:2016-06-23 02:01:43

标签: java connection-pooling shiro tomee

我在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。我需要在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 个答案:

答案 0 :(得分:2)

不是Shiro的专家,但是你的tomee.xml配置(虽然非常详细)应该可行。您的方法是正确的,不要在应用程序中定义数据库池,在服务器本身上定义它。

在此处查看已接受的答案:How to configure JDBCRealm to obtain its DataSource from JNDI

并注意关于该答案的两条评论。干杯!

答案 1 :(得分:1)

securityManager.realm = $jdbcRealm

答案 2 :(得分:1)

似乎DataSource不在JNDI映射中,因此您需要自己添加它。 您应该通过DataSource id(在这种情况下&#39; testDatabase&#39;)执行此操作。有几种方式,例如我在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 DataSource,在这种情况下,你的非jta DataSource id应该是&#39; testDatabaseNonJta&#39;。 我不确定,但是跟随线可能会给shiro造成麻烦:

accessToUnderlyingConnectionAllowed = false

答案 3 :(得分:1)

tomee.xml资源的Jndi名称是“openejb:Resource / id”或直接定义全局名称并使用java访问它:global /....

相关问题