2016-06-23 6 views
3

tomme.xmlに接続プールを構成しました。だから、私はshiro.iniに別の接続プールを設定しないでください。代わりに、単にtomme.xmlの接続プールを指すことができます。shiro.iniです。私はこれをどのようにするべきですか?ここで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あるtomee.xml

はここにあります。私はshiro.inijdbcRealmを設定できますが、私はtomee.xmlに既存の接続プールを実装したいshiro.ini

[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を設定する必要があります。これどうやってするの ?

答えて

2

Shiroの専門家ではありませんが、あなたのtomee.xml設定(非常に冗長です)はうまくいくはずです。あなたのアプローチは正しいです、アプリケーションでデータベースプールを定義せず、サーバー自体で定義してください。

は、ここでは受け入れ答えを見てみましょう:How to configure JDBCRealm to obtain its DataSource from JNDI

をそして、その答えは上の2つのコメントに注意を払います。乾杯!

1

securityManager.realm = $jdbcRealm 
1

を試してみてくださいあなたがそれを自分で追加する必要があるので、DataSourceがJNDIマップではないようです。 これは、DataSource ID(この場合は 'testDatabase')を通じて行う必要があります。あなたの非I非JTAデータソースを使用することを好む

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

この場合:

<resource-ref> 
    <res-ref-name>testDatabase</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
</resource-ref> 

または起動EJBで次のように置く:例えば私はweb.xmlに以下を入れて、いくつかの方法があります-jtaデータソースIDは 'testDatabaseNonJta'にする必要があります。 私はよく分からないが、行は四郎のためのトラブルを引き起こす可能性があり、以下:tomee.xmlのリソースの

accessToUnderlyingConnectionAllowed = false 
1

JNDI名は「OpenEJBの:リソース/ ID」であるかのjavaと直接グローバル名とアクセスそれを定義:グローバル/ ....