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

Java 如何从shiro.ini指向tomee.xml连接池,java,connection-pooling,shiro,apache-tomee,Java,Connection Pooling,Shiro,Apache Tomee,我在tomme.xml中配置了一个连接池。因此,我认为我不应该在shiro.ini中配置另一个连接池。相反,我可以从shiro.ini指向tomme.xml中的连接池。我该怎么做 这里是tomee.xml <?xml version="1.0" encoding="UTF-8"?> <tomee> <!-- see http://tomee.apache.org/containers-and-resources.html --> <!-- ac

我在
tomme.xml
中配置了一个连接池。因此,我认为我不应该在
shiro.ini
中配置另一个连接池。相反,我可以从
shiro.ini
指向
tomme.xml
中的连接池。我该怎么做

这里是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
,但我想在tomee.xml中实现一个已经存在的连接池。我该怎么做

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

请看以下公认的答案:

请注意关于这个答案的两条评论。干杯

试试看

securityManager.realm = $jdbcRealm

看起来数据源不在JNDI映射中,所以您需要自己添加它。 您应该通过数据源id(在本例中为“testDatabase”)完成此操作。例如,我在web.xml中使用了以下几种方式:

<resource-ref>
    <res-ref-name>testDatabase</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
</resource-ref>
我更喜欢使用非jta数据源,在这种情况下,非jta数据源id应该是“testDatabaseNonJta”。 我不确定,但下面这句话可能会给shiro带来麻烦:

accessToUnderlyingConnectionAllowed = false

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

@Resource(name="testDatabase", type=javax.sql.DataSource.class)
accessToUnderlyingConnectionAllowed = false