Проблема TreeCache при создании новой фабрики сеансов Hibernate - PullRequest
0 голосов
/ 16 марта 2012

Я использую Hibernate 3.1.13 с jboss-cache 3.2.5

Я запускаю свое приложение с включенным кэшированием второго уровня и в середине приложения (на основе пользовательских операций) закрываюсьсуществующей фабрики сеансов (sessionFactory.close ();) и создайте новую.

До этого момента мой кэш второго уровня работал нормально, и после закрытия и создания новой фабрики сеансов я получаю следующую ошибку из Treecache.

Ошибка

Caused by: org.jboss.cache.CacheException: java.lang.reflect.InvocationTargetException
    at org.jboss.cache.util.reflect.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:148)
    at org.jboss.cache.factories.ComponentRegistry$PrioritizedMethod.invoke(ComponentRegistry.java:1012)
    at org.jboss.cache.factories.ComponentRegistry.internalStart(ComponentRegistry.java:778)
    at org.jboss.cache.factories.ComponentRegistry.start(ComponentRegistry.java:632)
    at org.jboss.cache.invocation.CacheInvocationDelegate.start(CacheInvocationDelegate.java:345)
    at org.hibernate.cache.jbc2.builder.SharedCacheInstanceManager.start(SharedCacheInstanceManager.java:155)
    at org.hibernate.cache.jbc2.JBossCacheRegionFactory.start(JBossCacheRegionFactory.java:106)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:192)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1304)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:732)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
    at com.valista.rse.server.SessionFactoryHolder.refreshSessionFactory(SessionFactoryHolder.java:102)
    ... 32 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.jboss.cache.util.reflect.ReflectionUtil.invokeAccessibly(ReflectionUtil.java:144)
    ... 44 more
Caused by: org.jboss.cache.CacheException: Unable to fetch state on startup
    at org.jboss.cache.RPCManagerImpl.start(RPCManagerImpl.java:385)
    ... 49 more
Caused by: org.jboss.cache.CacheException: Cache instance at 127.0.0.1:47082 cannot integrate state since state provider could not provide state due to null
    at org.jboss.cache.statetransfer.DefaultStateTransferManager.setState(DefaultStateTransferManager.java:169)
    at org.jboss.cache.remoting.jgroups.ChannelMessageListener.setState(ChannelMessageListener.java:191)
    at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.handleUpEvent(MessageDispatcher.java:665)
    at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:765)
    at org.jgroups.JChannel.up(JChannel.java:1183)
    at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:444)
    at org.jgroups.protocols.pbcast.STATE_TRANSFER.handleStateRsp(STATE_TRANSFER.java:421)
    at org.jgroups.protocols.pbcast.STATE_TRANSFER.up(STATE_TRANSFER.java:120)
    at org.jgroups.protocols.pbcast.GMS.up(GMS.java:787)
    at org.jgroups.protocols.FRAG.unfragment(FRAG.java:290)
    at org.jgroups.protocols.FRAG.up(FRAG.java:150)
    at org.jgroups.protocols.UNICAST.handleDataReceived(UNICAST.java:616)
    at org.jgroups.protocols.UNICAST.up(UNICAST.java:282)
    at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:233)
    at org.jgroups.protocols.pbcast.NAKACK.up(NAKACK.java:735)
    at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:167)
    at org.jgroups.protocols.FD.up(FD.java:284)
    at org.jgroups.protocols.MERGE2.up(MERGE2.java:144)
    at org.jgroups.protocols.Discovery.up(Discovery.java:263)
    at org.jgroups.protocols.TP.passMessageUp(TP.java:1275)
    at org.jgroups.protocols.TP.access$100(TP.java:49)
    at org.jgroups.protocols.TP$IncomingPacket.handleMyMessage(TP.java:1818)
    at org.jgroups.protocols.TP$IncomingPacket.run(TP.java:1797)
    ... 3 more

Мой файл конфигурации TreeCache

======================================

<?xml version="1.0" encoding="UTF-8"?>

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Sample TreeCache Service Configuration                               -->
<!--                                                                       -->
<!-- ===================================================================== -->

<server>

    <classpath codebase="../lib" archives="jbosscache-core.jar, jgroups.jar"/>


    <!-- ==================================================================== -->
    <!-- Defines TreeCache configuration                                      -->
    <!-- ==================================================================== -->

    <mbean code="org.jboss.cache.TreeCache"
        name="jboss.cache:service=TreeCache">

        <depends>jboss:service=Naming</depends>
        <!-- <depends>jboss:service=TransactionManager</depends>
            TransactionManager configuration not required for Hibernate!
        -->


        <!--
            Node isolation level : SERIALIZABLE
                                 REPEATABLE_READ (default)
                                 READ_COMMITTED
                                 READ_UNCOMMITTED
                                 NONE
        -->
        <attribute name="IsolationLevel">READ_COMMITTED</attribute>

        <!--
             Valid modes are LOCAL
                             REPL_ASYNC
                             REPL_SYNC
        -->
        <attribute name="CacheMode">REPL_SYNC</attribute>

        <!-- Name of cluster. Needs to be the same for all clusters, in order
             to find each other
        -->
        <attribute name="ClusterName">TreeCache-Cluster</attribute>

        <!-- JGroups protocol stack properties. Can also be a URL,
             e.g. file:/home/bela/default.xml
           <attribute name="ClusterProperties"></attribute>
        -->

        <attribute name="ClusterConfig">
            <config>
                 UDP: if you have a multihomed machine,
                set the bind_addr attribute to the appropriate NIC IP address
                 UDP: On Windows machines, because of the media sense feature
                 being broken with multicast (even after disabling media sense)
                 set the loopback attribute to true
                <UDP mcast_addr="228.1.2.3" mcast_port="45566" bind_addr="127.0.0.1"
                    ip_ttl="64" ip_mcast="true"
                    mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
                    ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
                    loopback="false"/>
                <PING timeout="2000" num_initial_members="3"
                    up_thread="false" down_thread="false"/>
                <MERGE2 min_interval="10000" max_interval="20000"/>
                <FD shun="true" up_thread="true" down_thread="true"/>
                <VERIFY_SUSPECT timeout="1500"
                    up_thread="false" down_thread="false"/>
                <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
                    up_thread="false" down_thread="false"/>
                <pbcast.STABLE desired_avg_gossip="20000"
                    up_thread="false" down_thread="false"/>
                <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
                    down_thread="false"/>
                <FRAG frag_size="8192"
                    down_thread="false" up_thread="false"/>
                <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
                    shun="true" print_local_addr="false"/>
                <pbcast.STATE_TRANSFER up_thread="false" down_thread="false"/>
            </config>
        </attribute>



        <!--
             Max number of entries in the cache. If this is exceeded, the
             eviction policy will kick some entries out in order to make
             more room
        -->
        <attribute name="MaxCapacity">20000</attribute>

        <!--
            The max amount of time (in milliseconds) we wait until the
            initial state (ie. the contents of the cache) are retrieved from
            existing members in a clustered environment
        -->
        <attribute name="InitialStateRetrievalTimeout">20000</attribute>

        <!--
            Number of milliseconds to wait until all responses for a
            synchronous call have been received.
        -->
        <attribute name="SyncReplTimeout">10000</attribute>

        <!-- Max number of milliseconds to wait for a lock acquisition -->
        <attribute name="LockAcquisitionTimeout">15000</attribute>

        <!-- Max number of milliseconds we hold a lock (not currently
        implemented) -->
        <attribute name="LockLeaseTimeout">60000</attribute>

        <!-- Name of the eviction policy class. Not supported now. -->
        <attribute name="EvictionPolicyClass"></attribute>
    </mbean>


</server>

Мой конфигурационный файл Hibernate

# hibernate properties (general settings)

# Note: Define C3P0 settings in c3p0.properties, NOT in this file.

# Debugging
hibernate.show_sql=false
#hibernate.cglib.use_reflection_optimizer=false

# Database isolation 1=read uncommitted, 2=read committed, 4=repeatable read, 8=serializable
hibernate.connection.isolation = 2

#configurations for jboss-cache as second level cache
hibernate.cache.use_second_level_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.jbc2.SharedJBossCacheRegionFactory
hibernate.cache.region.jbc2.cfg.shared=treecache.xml
hibernate.cache.use_query_cache=false

# Filtered values based on db type
hibernate.connection.url=@db.url@
hibernate.connection.username=@db.users.owner.username@
hibernate.connection.password=@db.users.owner.password@

hibernate.database.startup.enabled=@db.startup.enabled@

db.type=@db.type@

# You MUST enable the statistics from PSE version 4.8 onwards
hibernate.generate_statistics=true

Благодарим вас, люди, помогите в этом вопросе

...