我正在将大型 JavaEE Web 应用程序迁移到多模块 Maven 表单。
ejb-jar.xml
当我运行多模块 Web 应用程序时,该 EJB 看不到为特定 EJB 声明的角色。
这ejb-jar.xml
与我在单个大型 Web 应用程序中使用的相同(运行良好),除了 EJB 的限定名称(包装)发生了变化,新的ejb-jar.xml
.
@Resource SessionContext ctx
正在工作:它可以看到Principal
等。
它只是不再检测到任何角色ejb-jar.xml
,所以ctx.isCallerInRole(String)
总是失败。
我可以@DeclareRoles
在 EJB 中使用注释并且它可以工作(但这不是一个可接受的解决方案,它只是用于诊断)。
ejb-jar.xml
EJB 模块中的位于:
.../src/main/resources/META-INF/ejb-jar.xml
Maven 将其构建为:
.../target/classes/META-INF/ejb-jar.xml
它肯定会成为 EJB 模块的最终目标 jar(我什至已经提取并检查了它)。
部署到与单个大型 Web 应用程序相同的 Glassfish 或 Payara 服务器(它运行良好)。
在部署过程中,我没有收到任何类型的相关日志警告。
感谢有关其他可能阻止系统明显捕获ejb-jar.xml
多模块 Web 应用程序项目部署的想法,或有关如何进一步诊断问题的建议。
编辑 2017-03-15:我发现(经过一段时间的睡眠),如果我将ejb-jar.xml
EJB 模块复制(或移动)到.../src/main/webapp/WEB-INF/
Web 模块,它会按预期工作。但这并不是一个很好的解决方案,因为我希望不同的 Web 模块能够使用相同的 EJB 模块,这也意味着<security-role>
and any <security-role-ref>
and<role-link>
在一个 Web 模块中而不是 EJB 模块中。我还将 EJB 模块用于 REST 服务(独立于 Web 角色上下文)并且想要相同的角色概念(在 EJB 模块中如此定义)。