4

以下のJavaコード用にアプリケーションをセットアップするにはどうすればよいですか?

Hashtable<String, String> properties = new Hashtable<String, String>();
            properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.test.factory");
            properties.put("com.domain", "DevelopmentDomain");
//            properties.put(Context.PROVIDER_URL, "tcp://test:0506");
            properties.put(Context.PROVIDER_URL, "tcp://10.00.0.00:0506");


            properties.put(Context.SECURITY_PRINCIPAL, "aaa");
            properties.put(Context.SECURITY_CREDENTIALS, "aaa");

            javax.naming.Context context = new javax.naming.InitialContext(properties);
            ConnectionFactory factory = (ConnectionFactory) context.lookup("ImpactPocQueueConnectionFactory");

            Connection connection = factory.createConnection();

            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Destination queue = session.createQueue("test.producer");

私はあちこちで多くの例を見ましたが、それらのどれも完全な全体像を示していません。

4

2 に答える 2

5

このコードを文字通りSpring構成に変換する場合は、次の@Configurationアプローチを利用することを検討してください。

@Bean
public Destination queue() throws JMSException, NamingException {
    return session().createQueue("test.producer");
}

@Bean
public Session session() throws JMSException, NamingException {
    return connection().createSession(false, Session.AUTO_ACKNOWLEDGE);
}

@Bean(initMethod = "start")
public Connection connection() throws JMSException, NamingException {
    return connectionFactory().createConnection();
}

@Bean
public ConnectionFactory connectionFactory() throws NamingException {
    return (ConnectionFactory) context().lookup("ImpactPocQueueConnectionFactory");
}

@Bean
public Context context() throws NamingException {
    return new javax.naming.InitialContext(properties());
}

@Bean
public Hashtable<String, String> properties() {
    Hashtable<String, String> properties = new Hashtable<String, String>();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.test.factory");
    properties.put("com.domain", "DevelopmentDomain");
    //properties.put(Context.PROVIDER_URL, "tcp://test:0506");
    properties.put(Context.PROVIDER_URL, "tcp://10.00.0.00:0506");
    properties.put(Context.SECURITY_PRINCIPAL, "aaa");
    properties.put(Context.SECURITY_CREDENTIALS, "aaa");
    return properties;
}

技術的には、XMLを使用してこれらすべてを実行できますが、このアプローチの方がはるかに読みやすく、保守しやすいことがわかりました。これで、スコープ内で利用可能connectionFactoryqueueBeanができました。SpringJMSサポートと簡単に統合できます。さらにサポートが必要な場合はお知らせください。

于 2012-06-22T16:49:48.420 に答える
2

以下に示すSpringapplicationContextxml構成がテストされ、正常に機能しています。

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">com.test.factory</prop>
                <prop key="com.sonicsw.jndi.mfcontext.domain">DevelopmentDomain</prop>
                <prop key="java.naming.provider.url">tcp://10.00.0.00:0506</prop>
                <prop key="java.naming.security.principal">aaa</prop>
                <prop key="java.naming.security.credentials">aaa</prop>
            </props>
        </property>
    </bean>
    <bean id="jmsQueueConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate"/>
        <property name="jndiName" value="ImpactPocQueueConnectionFactory"/>
    </bean>
    <bean id="sonic" class="org.apache.camel.component.jms.JmsComponent"> 
        <property name="connectionFactory" ref="jmsQueueConnectionFactory"/> 
    </bean>

    <route>
    <from uri="seda:something"/>
    <to uri="sonic:queue:queueName"/>
    </route>
于 2012-06-25T15:57:42.073 に答える