我正在将大型JavaEE Web应用程序迁移到多模块Maven表单。
当我运行多模块Web应用程序时,该EJB没有看到为ejb-jar.xml
中的特定EJB声明的角色。
ejb-jar.xml
与单个大型Web应用程序(工作正常)中的ejb-jar.xml
完全相同,除了EJB的限定名称(打包)的更改之外,已经在新@Resource SessionContext ctx
。
Principal
正在运行:它可以看到ejb-jar.xml
等。
它只是不再检测ctx.isCallerInRole(String)
中的任何角色,因此@DeclareRoles
总是失败。
我可以在EJB中使用ejb-jar.xml
注释并且它可以工作(但这不是一个可接受的解决方案,它只是用于诊断)。
EJB模块中的.../src/main/resources/META-INF/ejb-jar.xml
位于:
.../target/classes/META-INF/ejb-jar.xml
Maven将其构建为:
ejb-jar.xml
它肯定会成为EJB模块的最终目标jar(我甚至已经提取并检查了它)。
部署到与单个大型Web应用程序相同的Glassfish或Payara服务器(工作正常)。
在部署期间,我没有收到任何相关的任何相关警告警告。
感谢有关其他可能阻止系统明显捕获多模块Web应用程序项目部署的ejb-jar.xml
的想法,或者有关如何进一步诊断问题的建议。
编辑2017-03-15:我发现(经过一段时间的睡眠)如果我将.../src/main/webapp/WEB-INF/
从EJB模块复制(或移动)到Web模块的<security-role>
,它就会按预期工作。但这不是一个解决方案,因为我希望不同的Web模块能够使用相同的EJB模块,这也意味着<security-role-ref>
和任何<role-link>
和class MainClass {
public static void main(String args[]) {
String str = "reverse me! also lets check";
System.out.println("The initial string is --->> " + str);
for (int i = 0; i < str.length(); i++) {
//Keep iterating each letter from one end to another.
str = str.substring(1, str.length() - i)
+ str.substring(0, 1)
+ str.substring(str.length() - i, str.length());
}
System.out.println("The reversed string is ---->> " + str);
for (int i = 0, j = 0; i < str.length(); i++) {
if(str.charAt(i) == ' ' || i == (str.length() - 1)) {
//Just to know the start of each word
int k = j;
//the below if condition is for considering the last word.
if(i == (str.length() - 1)) i++;
while(j < i) {
j++;
str = str.substring(0, k)
//(i-j) is the length of each word
+ str.substring(k + 1, (k + 1) + i - j)
+ str.substring(k, k + 1)
+ str.substring((k + 1) + i - j, i)
+ str.substring(i);
if(j == i) {
//Extra j++ for considering the empty white space
j++;
}
}
}
}
System.out.println("The reversed string but not the reversed words is ---->> " + str);
}
}
都在一个Web模块而不是EJB模块。我也将EJB模块用于REST服务(独立于Web角色上下文),并且需要相同的角色概念(在EJB模块中定义)。