我想在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。
答案 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文档很可能会更有帮助。