redhat - 启用基于 jdbc 的会话持久性后应用程序无法加载
问题描述
我正在使用 JBoss EAP 7.1 版本进行 POC,其中我启用了基于 db 的会话持久性,我已经使用默认缓存管理器持久性进行了测试,它运行良好,但不知何故它不会在数据库模式中存储任何会话数据,但是表在我可以看到的服务器启动时创建,为此我从 Redhat 知识库中的示例 counter.war 开始。我正在使用 Oracle 12cR1 数据库。
另一件事是,我也无法从控制台看到应用程序,当我运行 CLI 命令读取资源时也是如此。当我尝试在部署下查看部署时,它只是抱怨
无法加载部署
意外的 HTTP 响应:500 请求 {“操作”=>“读取子资源”、“地址”=> 未定义、“子类型”=>“部署”、“包含运行时”=> 真、“递归” => true } 响应内部服务器错误 { "outcome" => "failed", "rolled-back" => true }
我在 jdbc 存储的standalone-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>
创建的表也如下:
名称
TABTYPE CLUSTERID
BIN$cLKr2H7+eQ3gU1J2QgonwQ==$0
桌子
SESS_counter_war
桌子
sess_counter_war
桌子
仅供参考,为了让我满意,我尝试更改standalone-ha.xml 中的前缀,这就是您可以看到两个表的原因。
如果我做错了什么,请指导我。
解决方案
这是近一年后的一个相当晚的回复,但正如人们所说的“迟到总比没有好”:)
在最初遇到错误几天后,我成功地启动了应用程序。我意识到我的配置存在一些重大问题。基本上,我遇到了以下问题:
- 使用分布式缓存而不是无效缓存。
- 使用二进制存储而不是基于字符串的存储。
- 无效的列和数据类型。
请参阅原始帖子并在此处回答 - https://developer.jboss.org/thread/278374
推荐阅读
- javascript - 在 html 的支票簿中添加 if 条件
- python - 将字符串视为列表
- android-studio - 无法解析 Android Studio 上的原始符号错误
- html - PNG图像不显示透明
- rxjs - 保证发射之间的“n”秒,而无需最初等待
- c++ - cmake完成生成文件后如何自动制作
- wordpress - 在 functions.php 中使用 Composer 类
- android - 在编辑文本中按零任意次,但用户应该只能看到 1 位数字,例如计算器
- javascript - 如何正确使用 innerHTML 更改文本字段中的文本
- facebook-graph-api - Facebook 图形 api 发布状态