如何从 shiro.ini 指向 tomee.xml 连接池
How to point to tomee.xml connection pool from shiro.ini
我在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
。我需要在 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
我可以在 shiro.ini
中配置一个 jdbcRealm
但我想在 tomee.xml 中实现一个已经存在的连接池。我怎样才能做到这一点 ?
不是 Shiro 专家,但您的 tomee.xml 配置(虽然非常冗长)应该可以。你的做法是正确的,不要在应用程序中定义数据库池,在服务器本身上定义它。
在此处查看已接受的答案:How to configure JDBCRealm to obtain its DataSource from JNDI
并注意该答案的两条评论。干杯!
尝试
securityManager.realm = $jdbcRealm
DataSource 似乎不在 JNDI 映射中,您需要自己添加。
您应该通过您的数据源 ID(在本例中为 '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 数据源 ID 应该是 'testDatabaseNonJta'。
我不确定,但以下行可能会给 shiro 带来麻烦:
accessToUnderlyingConnectionAllowed = false
tomee.xml的Jndi资源名是"openejb:Resource/id"或者直接定义一个全局名,用java:global/....
访问
我在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
。我需要在 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
我可以在 shiro.ini
中配置一个 jdbcRealm
但我想在 tomee.xml 中实现一个已经存在的连接池。我怎样才能做到这一点 ?
不是 Shiro 专家,但您的 tomee.xml 配置(虽然非常冗长)应该可以。你的做法是正确的,不要在应用程序中定义数据库池,在服务器本身上定义它。
在此处查看已接受的答案:How to configure JDBCRealm to obtain its DataSource from JNDI
并注意该答案的两条评论。干杯!
尝试
securityManager.realm = $jdbcRealm
DataSource 似乎不在 JNDI 映射中,您需要自己添加。 您应该通过您的数据源 ID(在本例中为 '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 数据源 ID 应该是 'testDatabaseNonJta'。 我不确定,但以下行可能会给 shiro 带来麻烦:
accessToUnderlyingConnectionAllowed = false
tomee.xml的Jndi资源名是"openejb:Resource/id"或者直接定义一个全局名,用java:global/....
访问