问题标签 [infinispan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jboss - Web 应用程序不会加入 Infinispan 集群
我最近一直在玩 Infinispan,以前没有使用过 Infinispan 的经验。
我遇到了一个有趣的问题,我想知道是否有人能够对此有所了解。
我有一个独立的 Java 应用程序 (GridGrabber.jar),它捆绑了 Infinispan jar,并有一个类来添加/删除和列出网格中的项目。在应用程序中,我创建CacheManager
如下:
该应用程序在命令行上运行java -jar GridGrabber.jar
并且工作正常,当我在终端启动两个实例时,它们都聚集在一起,我可以从两个节点看到网格的内容:
现在,在这里它变得有趣。我还有一个部署在 AS7 上的 Web 应用程序(servlet + JSP),其目的是提供进入网格的数据的实时更新网页。servlet 调用与 GridGrabber 基本相同的代码并使用相同的 cluster.xml。
当它启动时,一切都部署好了,但是由于某种原因,它没有拾取网格中的其他节点,尽管它们都在同一台机器上运行并且互相看到没有问题。部署消息是:
有谁知道是否有原因导致 AS7 部署看不到网格中的其他节点?在我看来,它应该可以工作,因为它们都在寻找相同的集群名称(demoCluster)并且它们都使用相同的 cluster.xml。cluster.xml 如下:
我从部署消息中注意到的一件事是,Web 应用程序似乎使用了 ipv4 地址,而 jar 似乎使用了带有 JGroups 的 ipv6 地址,但我不确定这是否是根本原因。任何帮助表示赞赏。
postgresql - PSQLException:当前事务被中止,命令被忽略直到事务块结束
我在 JBoss 7.1.1 Final 的 server.log 文件中看到以下(截断的)堆栈跟踪:
检查 Postgres 日志文件会发现以下语句:
我正在使用 JBoss 7.1.1 Final 附带的 Infinispan,即 5.1.2.Final。
所以这就是我认为正在发生的事情:
- Infinispan 尝试运行该
SELECT count(*)...
语句以查看 ; 中是否有任何记录ISPN_MIXED_BINARY_TABLE_configCache
。 - 出于某种原因,Postgres 不喜欢这种说法。
- Infinispan 忽略了这一点,并继续
CREATE TABLE
发表声明。 - Postgres barfs 因为它仍然认为它是同一个事务,而 Infinispan 未能回滚,并且这个事务是从第一条
SELECT count(*)...
语句开始的。
这个错误是什么意思,知道如何解决它吗?
java - 如何在 Infinispan 中使用 JTA 事务?
Infinispan文档说了很多关于其锁定方案的内容,乐观和悲观,但没有详细说明如何使用事务。可能它被认为是知道的,因为它使用Java的默认API,但如果是这样,我也没有找到关于JTA使用模式的信息。
我假设,当使用乐观事务时,它将被提交或回滚,这取决于对数据的并发访问,如果它被回滚,我将能够重播事务,希望现在它可以完成在其他并发访问之前并且会成功。我在 TransactionManager 上有 begin()、commit() 和 rollback() 方法,以及记录不充分的异常,我不确定它们何时会被抛出。有了这些信息,我编写了以下代码:
这段代码正确吗?执行一个据说很常见的操作似乎过于复杂,因此我怀疑我做错了什么......如果失败CacheException
会抛出一些吗?cache.put()
如果是这样,我应该明确打电话tm.rollback()
吗?如果我tm.commit()
在finally
子句中调用怎么办?它什么时候会抛出一个RollbackException
?
更重要的是,是否有一些惯用语/默认方式来执行事务重播?
spring - spring + hibernate + infinispan 作为二级缓存
我尝试在基于 spring+tomcat 的应用程序中将 infinispan 设置为休眠的二级缓存。
属性是:
我得到一个例外:
如何配置事务管理器查找?
spring - 事务二级缓存和生成的标识符
我有以下堆栈:
- 休眠 3.6.9.Final
- 春天 3.1.1
- Atomikos 3.7.1
- Infinispan 4.2.1.FINAL
- MySQL
我一直在编写一些测试,以确保当抛出 RuntimeException 时,当前事务会在数据库上回滚,但也会在事务性 2LC 上回滚。
我发现了一些奇怪的结果,希望有人能解释一下。
如果我使用带有 @Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL) 注释的 @Entity 和字符串 @Id,我会在分配 id 并保存实体时看到我期望的结果:
- 当没有抛出异常时,事务被提交并且 2LC 包含实体,我使用以下方法确认了这一点:
sessionFactory.getCache().containsEntity(MyEntity.class, myIdentifier)
- 如果抛出异常,则数据库或 2LC 都不包含该实体。
@Entity
但是,如果我使用生成的@Id
(MySQL 自动递增长属性)重复这些测试,如图所示:
我发现实体永远不会被放入 2LC,无论抛出任何异常。
我已经进行了一些调试,这似乎取决于AbstractSaveEventListener#performSaveOrReplicate
. 对于分配的@Id
useIdentityColumn 为 false,因此我们实例化并执行 EntityInsertAction,然后将新实体放入 2LC。
相反,如果@Id
由 MySQL 生成,我们发现 useIdentityColumn 为真,我们实例化并执行 EntityIdentityInsertAction。这包含注释掉的关于 2LC 的代码,如下所示:
这有什么原因吗?缓存插入是否应该在其他地方完成?这是一个错误吗?
如果有人能阐明这种差异以及它应该如何工作,我将不胜感激。
我已经在 Hibernate 论坛上发布了这个问题,但没有太大的兴趣。
infinispan - Infinispan - 如何知道缓存是否在配置文件(XML)中定义?
我在 Infinispan 中使用嵌入式缓存架构,它允许动态创建/删除缓存。
如果用户尝试获取不存在的缓存,则需要获取异常,但EmbeddedCacheManager
API 对此没有帮助。此 API 提供两个选项
get(String name, true)
- 获取并创建get(String name, false)
得到但不创造
我的做法?当用户简单地获得我们使用的缓存get(String name, false)
时,当用户创建我们使用的缓存时get(String name, true)
。到目前为止,一切都很好。
现在我有一个问题:一些缓存不是由应用程序创建的,而是在 XML 中定义的。因此,当用户使用它获得这些“内置”缓存之一get(String name, false)
时,不会获得缓存。
如果我们能够识别在 XML 中定义的缓存,我们就可以解决这些问题。
注意:目前,我们在 XML 中定义的缓存名称前加上前缀,但这对于代码抽象来说是丑陋的,而且变得非常混乱。
maven - Maven + Surefire/Failsafe - forkMode="perthread" 不起作用......一种解决方法?
我们正在开发基于嵌入式 Infinispan 数据网格集群的应用程序。在我们应用程序的目标环境中,数据网格的每个成员都将运行在一个独立的 JVM 中,并jgroup
形成使用集群(这实际上是由 Infinispan 完成的)。
为了在这个数据网格上做一些自动化测试,我们正在使用maven-surefire-plugin
(或maven-failsafe-plugin
)这个配置:
因为这个配置应该为每个测试用例类创建一个分支(使用 4 个并行进程),所以我们创建了 4 个测试类,每个测试类都将模拟一个集群成员。在每个测试用例类中,我们将有多个线程并行运行测试方法,这要归功于 TestNG,如下所示:
问题是maven-surefire-plugin
forkMode="perthread"
andthreadCount=4
是错误的:它不会为每个类创建一个 fork,而是多次创建同一类的 fork。所以,在我的场景中,它需要一个测试用例并并行运行 4 次!!!
注意:在此处检查 jira 错误。请投票!!!!
有人知道解决方法吗?我们正在做一些努力,ant
但变得非常混乱。
caching - infinispan 和 Jboss 缓存的比较
我不是本地人,英语很差。请了解情况。
我一直在对 Infinispan 和 JBoss Cache 进行比较。这两种产品都是开源的。JBoss Cache 网站顶部有“Project In Maintenance Mode”声明。不会进行产品的增长,但人们认识到它们将进行基于稳定性的更改。
此外,我承认 Infinispan 是 JBoss Cache 的继承者。
但是,我不知道 Infinispan 在性能或稳定性方面优于 JBoss Cache 的点。由于在网站上进行调查后我不清楚,我可以教它吗?
infinispan - Infinispan 集群和 hotrod 客户端无法通信
我有一个带有几个节点的复制集群——它们可以在彼此之间自由通信。我还有一个 Hotrod 服务器加入集群(我可以看到它被其他节点识别)。但是,当我将 Hotrod 客户端连接到服务器并尝试将某些内容放入缓存时,出现以下异常:
hotrod 客户端:
org.infinispan.client.hotrod.exceptions.HotRodClientException:Request for message id[4] returned server error (status=0x85): org.infinispan.CacheException: Problems invoking command.
热棒服务器:
Caused by: org.infinispan.CacheException: Type of data read is unknown. Id=-2147482548 is not amongst known reader indexes.
具有缓存存储的节点:
WARN: Problems unmarshalling remote command from byte buffer org.infinispan.CacheException: Type of data read is unknown. Id=-2147482548 is not amongst known reader indexes.
此外,Hotrod 客户端也看不到其他节点提供的任何更改。如果除了 hotrod 服务器之外集群中没有任何节点 - 一切正常。如果有任何其他节点(例如注册了 CacheListener)可用,我会得到上述异常。
我到处使用 Infinispan 5.1.5.Final 和 JGroups 3.0.10.Final。Win7 64 位,Java 6_0_32 32 位。所有节点都在一台机器上工作,集群建立在 TCP 传输堆栈上。每个节点都是一个 Java SE 应用程序。infinispan 论坛 (https://community.jboss.org/thread/199539) 上有一个类似的帖子,但它是针对旧版本的(在这种情况下,更新有所帮助)。
有人有类似的问题,或者知道我应该在哪里寻找问题的根源?
hibernate - Hibernate Infinispan 实体/查询缓存
几天来,我一直在为这个问题撞墙。
我们正在尝试使用 Infinispan 实现 Hibernate 的二级缓存。该应用程序在 JBoss AS 6 上运行,并使用 JTA 事务。
在我们的 persistence.xml 中,我们有:
如此处定义:
据我们了解,这是我们执行以下操作所需的缓存类型:
用例一: 我们在包含参考数据的数据库中有记录。此数据不会在很长一段时间内更改(我们希望 :))。
我们希望缓存这些记录,因为它们可能会被大量查询。当用户查询这些数据时,不需要去数据库,因为它应该被缓存。
对于这种情况,缓存类型是查询缓存,还是实体缓存?由于查询总是相同的,我的理解是查询缓存,因为 que 查询应该总是返回相同的结果。
我的查询:
用例二: 用户从数据库中获取特定记录,他可能会更新它。我们希望将此实体(或实体列表)保存在用户的会话(登录会话)缓存中,因此如果他在客户端更新此实体,我们不需要在更新前进行选择。在这种情况下,由于我们正在保存特定的实体,所以它被认为是实体缓存,对吧?如果我们想存储
为此,我们正在使用:
我是否正确地做出了这些假设?如果没有,这里的方法是什么?我想我把这件事弄得一团糟。