我如何在Grails resources.groovy中编写相应的Spring的jee:jndi-lookup?

时间:2011-11-04 14:33:58

标签: spring grails

我想在Grails的resource.xml(标准的Spring xml东西)中使用这样的东西:

    <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>

并将其转换为resources.groovy中的Grails bean builder DSL。我尝试了以下的组合(基本上是试验和错误,看看我是否可以让它工作,没有):

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-lookup设置好并且是有效的bean DSL,但是环境(JndiTemplate类型的东西)没有值(java.naming.factory.initial等)我设置为抓取远程InitialContext。

1 个答案:

答案 0 :(得分:1)

如果您想使用XML命名空间,您需要在Grails'bean'定义的顶部添加以下内容:

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.

    ...

}

或者您可以尝试使用'bean'表示法,而不是尝试使用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"]
    }

    ...
}

有关详细信息here,请参阅有关“使用Spring命名空间”的Grails文档。

我还blogged在Grails之外使用Grails BeanBuilder DSL可能会有所帮助,但Grails文档很可能会更有帮助。