【问题标题】:configure the EHCache with mysql in Mule在 Mule 中使用 mysql 配置 EHCache
【发布时间】:2015-04-16 19:59:10
【问题描述】:

在 mule 中,我将 MySQL DB 连接器包装在 Cache 范围内,并配置了自定义缓存策略,即 EHCache。

因此,每当对缓存范围进行重复请求时,它应该返回存储在其缓存中的数据。但它没有那样工作。所以,我浏览了这篇文章 How to configure the EHCache with CXF in Mule

根据建议,我将代码分成两部分,并根据缓存范围的请求和响应使用 VM 和对象到字符串转换器

<spring:beans>
    <spring:bean id="cacheManager" name="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
    <spring:bean id="cache" name="cache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
        <spring:property name="cacheManager" ref="cacheManager"/>
        <spring:property name="cacheName" value="dbCache"/>
        <spring:property name="maxElementsInMemory" value="10000"/>
        <spring:property name="eternal" value="false"/>
        <spring:property name="timeToIdle" value="120"/>
        <spring:property name="timeToLive" value="120"/>
        <spring:property name="overflowToDisk" value="true"/>
        <spring:property name="maxElementsOnDisk" value="10000000"/>
        <spring:property name="diskPersistent" value="false"/>
        <spring:property name="diskExpiryThreadIntervalSeconds" value="120"/>
        <spring:property name="memoryStoreEvictionPolicy" value="LRU"/>
    </spring:bean>
</spring:beans>

<ee:object-store-caching-strategy name="Caching_Strategy" doc:name="Caching Strategy">
    <custom-object-store class="com.lineage.cache.EhcacheObjectStore">
        <spring:property name="cache" ref="cache"/>
    </custom-object-store>
</ee:object-store-caching-strategy>

  <flow name="highjumpdummyFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
    <ee:cache doc:name="Cache" cachingStrategy-ref="Caching_Strategy">
        <logger message="#['Into the Cache Block']" level="INFO" doc:name="Logger"/>
        <vm:outbound-endpoint exchange-pattern="request-response" path="DBCache" connector-ref="VM" doc:name="VM">
            <vm:transaction action="ALWAYS_BEGIN"/>
        </vm:outbound-endpoint>
       </ee:cache>
    <logger message="#[payload]" level="INFO" doc:name="Logger"/>
</flow>

  <flow name="highjump_dummyFlow1">
    <vm:inbound-endpoint exchange-pattern="one-way" path="DBCache" connector-ref="VM" doc:name="VM">
        <vm:transaction action="ALWAYS_BEGIN"/>
    </vm:inbound-endpoint>
    <db:select config-ref="MySQL_Configuration" doc:name="Database">
        <db:dynamic-query><![CDATA[select * from HIGHJUMP_INVOICE_CHARGE_STAGING;]]></db:dynamic-query>
    </db:select>
    <data-mapper:transform config-ref="Map_To_XML" doc:name="Map To XML"/>
    <byte-array-to-object-transformer doc:name="Byte Array to Object"/>
    <object-to-string-transformer doc:name="Object to String"/>
</flow>

但是现在,我遇到了一个新问题。在数据库连接器的第二个流程中,骡流程失败了 org.mule.api.MessagingException:无法将连接绑定到当前事务:org.mule.transport.vm.VMTransaction@90b65fe0-e408-11e4-ae24-d43d7e1497b8[status=STATUS_ACTIVE,key=null,resource=null](org .mule.module.db.internal.domain.connection.ConnectionBindingException)。消息负载的类型:字符串

控制台消息: 根异常堆栈跟踪: org.mule.transaction.IllegalTransactionStateException:只能绑定“QueueManager/QueueSession”类型的资源 在 org.mule.transport.vm.VMTransaction.bindResource(VMTransaction.java:41) 在 org.mule.module.db.internal.domain.connection.TransactionalDbConnectionFactory.getConnectionFromTransaction(TransactionalDbConnectionFactory.java:110) 在 org.mule.module.db.internal.domain.connection.TransactionalDbConnectionFactory.createConnection(TransactionalDbConnectionFactory.java:72) + 3 个以上(设置调试级别日志记录或 '-Dmule.verbose.exceptions=true' 为所有内容)

【问题讨论】:

    标签: mule ehcache


    【解决方案1】:

    请删除 VM 中导致问题的 transaction 部分,并按照此处给出的相同操作:- http://blogs.mulesoft.org/guest-post-exposing-cxf-webservice-mule-cache/ 并且还放 &lt;object-to-string-transformer doc:name="Object to String"/&gt; 在缓存块之前使有效负载可缓存

    而且说实话,你可以直接把Database组件直接放在Cache scope下面,而不是把流分成2个。这样就可以了..

    【讨论】:

    • 感谢 Anirban,非常感谢。是的,我尝试在我的流程中不使用 VM。但是之前没有使用对象串变压器。它现在起作用了。我还有一个问题,为什么我们需要缓存中的 VM,特别是用于 Web 服务调用?
    • 早些时候我尝试在缓存范围内实现 Web 服务..但它无法缓存并且由于奇怪的原因失败..然后我使用 VM 将流程分为 2 并发现实现 VM 很多更容易和可缓存的网络服务:) ..
    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2017-12-18
    • 2015-06-01
    • 1970-01-01
    相关资源
    最近更新 更多