gpt4 book ai didi

caching - 无法注入(inject)Seam缓存提供程序

转载 作者:行者123 更新时间:2023-12-02 18:28:42 25 4
gpt4 key购买 nike

环境:Seam 2.2、ehcache-core 2.1.0

我尝试在 session 范围的 bean 中使用以下调用注入(inject) CacheProvider

    @In CacheProvider cacheProvider;

WEB-INF\components.xml contains the following line to enable the cache provider
<cache:eh-cache-provider/>

The above configuration seems to return a null value for the cache provider


Using the cache provider like this
CacheProvider cacheProvider = CacheProvider.instance();
throws the following warning

15:29:27,586 WARN [CacheManager] Creating a new instance of CacheManager using
the diskStorePath "C:\DOCUME~1\user5\LOCALS~1\Temp\" which is already used by an
existing CacheManager.
The source of the configuration was net.sf.ehcache.config.generator.Configuratio
nSource$DefaultConfigurationSource@15ed0f9.
The diskStore path for this CacheManager will be set to C:\DOCUME~1\user5\LOCALS
~1\Temp\\ehcache_auto_created_1276682367586.
To avoid this warning consider using the CacheManager factory methods to create
a singleton CacheManager or specifying a separate ehcache configuration (ehcache
.xml) for each CacheManager instance.

我在这里缺少什么?

最佳答案

请记住,如果您想使用 EhCahceProvider,net.sf.ehcache.Cache 需要位于类路径上(我不确定,但我认为 ehcache-core.jar 包含此类)。这是它的签名

@Name("org.jboss.seam.cache.cacheProvider")
@Scope(APPLICATION)
@BypassInterceptors
@Install(value = false, precedence=BUILT_IN, classDependencies="net.sf.ehcache.Cache")
@AutoCreate
public class EhCacheProvider extends CacheProvider<CacheManager> {

注意 classDependency 属性。它的文档很清楚

Indicates that the component should not be installed unless the the given class definitions are available on the classpath

因此,如果您的类路径包含 net.sf.ehcache.Cache 您不需要声明

<cache:eh-cache-provider/>

由于它是应用程序范围,除了 @In-jection 之外,您还可以使用

进行检索
ApplicationContext.getContext().get("cacheProvider");

更新

首先

  • 删除 声明。我说你为什么(见上文)

第二个

  • 虽然我很确定 CacheProvider 不能为 null 因为 @In 必需属性默认为 true,不能为 null。在您的业务方法中,确保您的 CacheProvider 不为 null

    断言cacheProvider!= null

第三个

  • 我认为您不需要调用cacheProvider.instance()方法。如果它的默认范围是Application。 为什么要检索另一个CacheProvider???这没有意义。

第四

  • 这也不异常(exception)。这只是一条警告消息,因为您正在尝试使用多个缓存提供程序,其中两者都使用内存中的相同空间

关于caching - 无法注入(inject)Seam缓存提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com