0

Spring3.1をスタンドアロンアプリとして使用しています。

私はいくつかの奇妙な状況にあり、私は何かが欠けていると思います。

JMXコンソールを介して公開したメソッドを持つクラスがあります。そのメソッドは、Beanを介してメソッドを呼び出しています。

私が初期化しているその豆は進んでいます。jmxコンソールを介してメソッドを呼び出した後、Beanインスタンスがnullになるという奇妙なこと。

これが公開されているJMXBeanです。

public class TriggerBean implements IJmxTriggerBean
{
    static Logger logger = Logger.getLogger(TriggerBean.class);

    FeedListenerBean fe = null;

    public void start()
    {
        try
        {
            // init();
            PropertyConfigurator.configure(FixGWConstants.LOG4J_PATH);
            ApplicationContext context = new ClassPathXmlApplicationContext(FixGWConstants.APPLICATION_CONTEXT_XML);
            fe = (FeedListenerBean) context.getBean("FeedListenerBean");
            doTheListen();

        }
        catch (Throwable t)
        {
            logger.error(t);
            System.out.println(t);
        }

    }

        //thats the method being exposed by jmx. pay attention that fe object has been   initialized before by the start()
    public void doTheListen()
    {
        fe.listen();
    }

    private void init()
    {
        Resource resource = new ClassPathResource(System.getProperty("user.dir") + "//config.properties");
        try
        {
            Properties props = PropertiesLoaderUtils.loadProperties(resource);
            String log4jPath = props.getProperty("LOG4J_PATH");
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

私はスタンドアロンでテストしています:

public static void main(String[] args) throws Exception
    {
protected TriggerBean trigger = new Trigger();
trigger.start();
}

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"


    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <!-- Must for auto wiring 
    <context:annotation-config />
    -->

    <context:component-scan base-package="com.fixgw.beans">
    </context:component-scan>



    <!-- start a JMX Server -->
    <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean" />

    <bean id="FeedListenerBean" class="com.fixgw.beans.FeedListenerBean">
    </bean>

    <bean id="TriggerBean" class="com.fixgw.test.TriggerBean">
    </bean>





    <bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
        <property name="beans">
            <map>
                <entry key="Server:name=HttpAdaptor">
                    <bean class="mx4j.tools.adaptor.http.HttpAdaptor">
                        <property name="port" value="8000" />
                        <property name="host" value="0.0.0.0" />
                        <property name="processor">
                            <bean class="mx4j.tools.adaptor.http.XSLTProcessor" />
                        </property>
                    </bean>
                </entry>
                <entry key="bean:name=TriggerBean" value-ref="TriggerBean" />

            </map>
        </property>
        <property name="listeners">
            <list>
                <!--
                    let the HttpAdapter be started after it is registered in the
                    MBeanServer
                -->
                <bean class="com.fixgw.jmx.HttpAdaptorMgr">
                    <property name="mbeanServer" ref="mbeanServer" />
                </bean>
            </list>
        </property>
    </bean>

</beans>

私が最初にstart()を使用したとき、オブジェクトfeはうまく機能しています。しかし、doTheListen(JMXを介して)を呼び出した後、オブジェクトfeはnullを思い出させます(以前にすでに初期化されていますが)

何か案が?

ありがとう、レイ。

4

0 に答える 0