Как мне написать эквивалент Spring jee: jndi-lookup в Grails resources.groovy? - PullRequest
1 голос
/ 04 ноября 2011

Я хочу взять что-то вроде этого, которое нормально работает в 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>

и превратите его в построитель бинов 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-lookup настроен нормально и является допустимым DSL-компонентом, но среда (тип материала JndiTemplate) не имеет значений (java.naming.factory.initial и т. Д.), Которые я устанавливаю для захвата удаленного InitialContext.

1 Ответ

1 голос
/ 10 ноября 2011

Если вы хотите использовать пространство имен XML, вам понадобится следующее в верхней части определений ваших bean-компонентов 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.

    ...

}

Или вы можете попробовать использовать нотацию 'bean' вместо того, чтобы пытаться использоватьпространство имен XML 'jee ...', которое будет более многословным, но более простым для реализации в нотации бина Grails.

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>

DSL Grails:

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

    ...
}

Обратитесь к документации Grails по «Использование пространств имен Spring» также для получения дополнительной информации здесь .

Я также опубликовал немного об использовании Grails BeanBuilder DSL вне Grails, которыйможет быть полезным, но документация Grails, скорее всего, будет более полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...