启用基于 jdbc 的会话持久性后应用程序加载失败
Application Fails to Load after enabling jdbc based session persistence
我正在使用 JBoss EAP 7.1 版本进行 POC,其中我启用了基于数据库的会话持久性,我已经使用默认缓存管理器持久性进行了测试并且它运行良好但不知何故它不存储任何会话数据库模式中的数据,但是 table 是在我可以看到的服务器启动时创建的,为此我从 Redhat 知识库中存在的示例 counter.war 开始。我正在使用 Oracle 12cR1 数据库。
另一件事是,我也无法从控制台看到应用程序,当我 运行 CLI 命令读取资源时也是如此。当我尝试在 Deployments 下查看部署时,它只是抱怨
无法加载部署
意外的 HTTP 响应:500 请求 { "operation" => "read-children-resources","address" => 未定义,"child-type" => "deployment","include-runtime" => true, "recursive" => true } 响应内部服务器错误 { "outcome" => "failed", "rolled-back" => true }
我在 jdbc 商店的独立 ha.xml 中的服务器配置如下:
<cache-container name="server" aliases="singleton cluster" default-cache="default" module="org.wildfly.clustering.server">
<transport lock-timeout="60000"/>
<replicated-cache name="default">
<transaction mode="BATCH"/>
</replicated-cache>
</cache-container>
<cache-container name="web" default-cache="jdbc" module="org.wildfly.clustering.web.infinispan">
<transport channel="ee" lock-timeout="60000"/>
<local-cache name="concurrent">
<file-store passivation="true" purge="false"/>
</local-cache>
<invalidation-cache name="jdbc">
<binary-keyed-jdbc-store data-source="Session" dialect="ORACLE" fetch-state="false" passivation="false" preload="false" purge="false" shared="true" singleton="false">
<!-- <transaction mode="BATCH"/>-->
<property name="database-Type">
oracle
</property>
<binary-keyed-table prefix="sess">
<id-column name="ID" type="VARCHAR2(500)"/>
<data-column name="DATUM" type="BINARY"/>
<timestamp-column name="MAXINACTIVE" type="NUMBER"/>
<timestamp-column name="LASTACCESS" type="NUMBER"/>
<timestamp-column name="VERSION" type="NUMBER"/>
</binary-keyed-table>
</binary-keyed-jdbc-store>
</invalidation-cache>
</cache-container>
<cache-container name="ejb" aliases="sfsb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan">
<transport lock-timeout="60000"/>
<distributed-cache name="dist">
<locking isolation="REPEATABLE_READ"/>
<transaction mode="BATCH"/>
<file-store/>
</distributed-cache>
得到的table也如下:
TNAME
TABTYPE 集群 ID
BIN$cLKr2H7+eQ3gU1J2QgonwQ==$0
TABLE
SESS_counter_war
TABLE
sess_counter_war
TABLE
仅供参考,为了让我满意,我尝试通过更改 standalone-ha.xml 中的前缀,这就是为什么您可以看到两个 table 的原因。
如果我做错了什么,请指导我。
在 EAP 7.1 中,您应该使用 string-keyed-jdbc-store
配置会话持久性,而不是使用在此版本中弃用的 binary-keyed-jdbc-store
。
这是将近一年后的一个相当晚的回复,但正如所说 "Better Late than Never" :)
最初面对错误几天后,我成功启动了应用程序。我意识到我的配置中存在一些重大问题。基本上,我遇到了以下问题:
- 使用分布式缓存而不是无效缓存。
- 使用二进制存储而不是基于字符串的存储。
- 列和数据类型无效。
参考原文post并在此处回答- https://developer.jboss.org/thread/278374
我正在使用 JBoss EAP 7.1 版本进行 POC,其中我启用了基于数据库的会话持久性,我已经使用默认缓存管理器持久性进行了测试并且它运行良好但不知何故它不存储任何会话数据库模式中的数据,但是 table 是在我可以看到的服务器启动时创建的,为此我从 Redhat 知识库中存在的示例 counter.war 开始。我正在使用 Oracle 12cR1 数据库。
另一件事是,我也无法从控制台看到应用程序,当我 运行 CLI 命令读取资源时也是如此。当我尝试在 Deployments 下查看部署时,它只是抱怨
无法加载部署
意外的 HTTP 响应:500 请求 { "operation" => "read-children-resources","address" => 未定义,"child-type" => "deployment","include-runtime" => true, "recursive" => true } 响应内部服务器错误 { "outcome" => "failed", "rolled-back" => true }
我在 jdbc 商店的独立 ha.xml 中的服务器配置如下:
<cache-container name="server" aliases="singleton cluster" default-cache="default" module="org.wildfly.clustering.server">
<transport lock-timeout="60000"/>
<replicated-cache name="default">
<transaction mode="BATCH"/>
</replicated-cache>
</cache-container>
<cache-container name="web" default-cache="jdbc" module="org.wildfly.clustering.web.infinispan">
<transport channel="ee" lock-timeout="60000"/>
<local-cache name="concurrent">
<file-store passivation="true" purge="false"/>
</local-cache>
<invalidation-cache name="jdbc">
<binary-keyed-jdbc-store data-source="Session" dialect="ORACLE" fetch-state="false" passivation="false" preload="false" purge="false" shared="true" singleton="false">
<!-- <transaction mode="BATCH"/>-->
<property name="database-Type">
oracle
</property>
<binary-keyed-table prefix="sess">
<id-column name="ID" type="VARCHAR2(500)"/>
<data-column name="DATUM" type="BINARY"/>
<timestamp-column name="MAXINACTIVE" type="NUMBER"/>
<timestamp-column name="LASTACCESS" type="NUMBER"/>
<timestamp-column name="VERSION" type="NUMBER"/>
</binary-keyed-table>
</binary-keyed-jdbc-store>
</invalidation-cache>
</cache-container>
<cache-container name="ejb" aliases="sfsb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan">
<transport lock-timeout="60000"/>
<distributed-cache name="dist">
<locking isolation="REPEATABLE_READ"/>
<transaction mode="BATCH"/>
<file-store/>
</distributed-cache>
得到的table也如下:
TNAME
TABTYPE 集群 ID
BIN$cLKr2H7+eQ3gU1J2QgonwQ==$0
TABLE
SESS_counter_war
TABLE
sess_counter_war
TABLE
仅供参考,为了让我满意,我尝试通过更改 standalone-ha.xml 中的前缀,这就是为什么您可以看到两个 table 的原因。
如果我做错了什么,请指导我。
在 EAP 7.1 中,您应该使用 string-keyed-jdbc-store
配置会话持久性,而不是使用在此版本中弃用的 binary-keyed-jdbc-store
。
这是将近一年后的一个相当晚的回复,但正如所说 "Better Late than Never" :)
最初面对错误几天后,我成功启动了应用程序。我意识到我的配置中存在一些重大问题。基本上,我遇到了以下问题:
- 使用分布式缓存而不是无效缓存。
- 使用二进制存储而不是基于字符串的存储。
- 列和数据类型无效。
参考原文post并在此处回答- https://developer.jboss.org/thread/278374