2011-11-04 55 views
1

我想利用這樣的事情是工作在Grails的resource.xml(標準的Spring XML的東西)OK:如何在Grails resources.groovy中編寫相當於Spring的jee:jndi-lookup?

<jee:jndi-lookup id="remoteConnectionFactory" 
    jndi-name="jms/WLQueueConnectionFactory" resource-ref="false"> 
     <jee:environment> 
      java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory 
      java.naming.provider.url=t3://remote_uri:port/ 
     </jee:environment> 
</jee:jndi-lookup> 

,並把它變成Grails的豆建設者DSL在resources.groovy。我試過以下的組合(基本上是試錯法來看看,如果我能得到它的工作,沒有做):

ejbJndi(JndiTemplate) 
{ bean -> 
    bean.scope = 'session' 
    environment = [ 
     "java.naming.provider.url" : "t3://remote_uri:port/", 
     "java.naming.factory.initial" : "weblogic.jndi.WLInitialContextFactory" 
    ] 
} 
xmlns jee:"http://www.springframework.org/schema/jee" 
xmlns context:"http://www.springframework.org/schema/context" 

jee.'jndi-lookup'(id:"jmsConnectionFactory", jndiName: "com.retailexp.jms.ConnectionFactory", lookupOnStartup: false, 
    proxyInterface: "javax.jms.ConnectionFactory", resourceRef: "false", 'jndi-environment': ref("ejbJndi")) { 
    cache = true 
    exposeAccessContext = true 

    jndiTemplate = ref("ejbJndi") 
    jndiEnvironment = [ 
     "java.naming.provider.url" : "t3://remote_uri:port/", 
     "java.naming.factory.initial" : "weblogic.jndi.WLInitialContextFactory" 
    ] as Properties 

    environmentRef = [ 
     "java.naming.provider.url" : "t3://remote_uri:port/", 
     "java.naming.factory.initial" : "weblogic.jndi.WLInitialContextFactory" 
    ] 

    environment = """ 
     java.naming.provider.url=t3://remote_uri:port/ 
     java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory 
""" 

同樣,這些都是我試過,不是什麼東西組合最終的代碼看起來像(我希望只有其中的一個可以工作!)。你可以告訴我在黑暗中摸索了一下。

jndi查找設置好,並且是有效的DSL,但環境(JndiTemplate類型的東西)沒有值(java.naming.factory.initial等)我設置抓住遠程InitialContext 。

回答

1

如果你想使用XML命名空間,你需要在你的Grails「豆」定義的頂部以下內容:

beans { 
    xmlns context:"http://www.springframework.org/schema/context" 
    xmlns jee:"http://www.springframework.org/schema/jee" 

    context.'property-placeholder'('location':'classpath:config.properties') 
    jee.'jndi-lookup'(id:"jmsConnectionFactory", jndiName: "com.retailexp.jms.ConnectionFactory", lookupOnStartup: false, etc. 

    ... 

} 

或者你可以嘗試使用「豆」的符號,而不是嘗試使用XML命名空間'jee ...',它將更加冗長,但更容易在Grails bean符號中實現。

XML:

<bean id="simple" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="jdbc/MyDataSource"/> 
    <property name="jndiEnvironment"> 
     <props> 
      <prop key="foo">bar</prop> 
     </props> 
    </property> 
</bean> 

的Grails DSL:

beans { 
    simple(org.springframework.jndi.JndiObjectFactoryBean) { 
     jndiName = 'jdbc/MyDataSource' 
     jndiEnvironment = ["foo":"bar"] 
    } 

    ... 
} 

參考Grails的文檔上的 「使用Spring命名空間」 也爲更多信息here

我也blogged關於在Grails之外使用Grails BeanBuilder DSL可能會有所幫助,但Grails文檔很可能會更有幫助。

相關問題