2017-02-21 2 views
0

Je migre une application d'OC4J vers WebLogic 12c et les beans Spring donnent une erreur que je n'arrive pas à résoudre. Ma question est ce qui peut être la cause de cette erreur. Je le grain suivant pour la recherche JNDI:Erreur lors de la configuration de la recherche JNDI pour WebLogic + Spring

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="${datasource.jndiname}" /> 
    <property name="lookupOnStartup"> 
     <value>false</value> 
    </property> 
    <property name="proxyInterface"> 
     <value>javax.sql.DataSource</value> 
    </property> 
</bean> 

La valeur ${datasource.jndiname} devrait provenir d'un fichier config.properties avec la ligne suivante:

server.database.datasource=${datasource.jndiname} 

Et la valeur de server.database.datasource provient d'un config.filter fichier avec la ligne:

server.database.datasource=jdbc/DATASOURCE 

Cela fonctionne bien avec OC4J et il wo RKS quand je remplace le ${datasource.jndiname} à sa valeur jdbc/DATASOURCE dans WebLogic, mais il me donne l'erreur suivante si je garde la référence (et je dois le garder):

JndiObjectTargetSource failed to obtain new target object; nested exception is javax.naming.NameNotFoundException: While trying to lookup '${datasource.jndiname}' didn't find subcontext '${datasource'. Resolved ''; remaining name '${datasource/jndiname}' 

Répondre

0

Après quelques recherches, j'ai trouvé une propriété pour le bean qui a corrigé l'erreur. Si vous définissez la propriété resourceRef à false, la référence ${datasource.jndiname} fonctionne comme prévu. Dans le code final ci-dessous j'ai également ajouté un JndiTemplate.

<bean id="dsJndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
    <property name="environment"> 
     <props> 
      <prop key="java.naming.provider.url">t3://localhost:7001</prop> 
      <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop> 
     </props> 
    </property> 
</bean> 

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="${datasource.jndiname}" /> 
    <property name="resourceRef" value="false"/> 
    <property name="lookupOnStartup" value="false"/> 
    <property name="proxyInterface" value="javax.sql.DataSource"/> 
    <property name="jndiTemplate"> 
     <ref local="dsJndiTemplate" /> 
    </property> 
</bean>