【问题标题】:WSO2 Identity Server - Concurrency IssueWSO2 身份服务器 - 并发问题
【发布时间】:2016-04-14 18:28:37
【问题描述】:

我们正在使用 WSO2 IS,v5.1.0。 测试时,我们得到如下结果:

  1. 运行一套测试时,一切正常。
  2. 当运行并发测试时,意味着 - 并发请求正在发送,我们得到了 NPE。此外,例如,我们在添加两个用户时得到“200”,但是当尝试查询并获取这两个用户时,我们收到一条消息,即预期有 2 个值,但只返回 1 个。

知道如何解决这个问题吗?是什么原因造成的? 如果需要任何进一步的信息,请告诉我。

谢谢!

【问题讨论】:

  • 你有这个 NPE 的堆栈跟踪吗?
  • 没有写堆栈跟踪,但我会在 NPE 之前附上几行:Entering deleteAttachments() {org.apache.axis2.transport.TransportUtils} Exiting deleteAttachments() {org.apache.axis2.transport.TransportUtils} Reading Role Mapping of Application 2816 {org.wso2.carbon.identity.application.mgt.dao.impl.ApplicationDAOImpl} Setting config system registry instance. {org.wso2.carbon.context.PrivilegedCarbonContext} Setting governance system registry instance. {org.wso2.carbon.context.PrivilegedCarbonContext} {org.apache.axis2.transport.http.AxisServlet} java.lang.NullPointerException
  • 为了给您任何合理的提示,需要更多信息。它是单节点/集群环境吗?使用什么数据存储?您是否更新了任何索赔定义? 您是否将 IS 作为(包装器)服务运行? 还有最重要的 - stacktrace
  • @GabrielVince 这是一个单节点环境。我们使用 MySQL 作为我们的数据存储。我们没有配置默认声明(我们使用默认值..我们应该配置吗?)。我们将 IS 作为服务运行。关于堆栈跟踪,当 NPE 发生时我们没有得到任何信息,我在上面的评论中附加了来自日志的先前消息(日志处于 TRACE 模式)。谢谢!!
  • 我想提一提更重要的事情 - 我们在一种特定情况 中遇到此错误 - 当尝试将权限附加到角色时。例如,我们正在尝试将 2 个权限附加到单个角色。有时两个都加,有时一个加一个不加,有时两个都不加。在所有情况下,我们都收到了“200”条消息。此外,添加权限也会导致一些问题 - 有时在向系统添加新权限时,它会删除所有现有权限。

标签: wso2 wso2is


【解决方案1】:

现在我明白了..

您可以/必须修复 WSO2 IS 5.1.0 中的两个问题。

使用嵌入的 JSP 页面

首先 - 看看 wso2server.bat/.sh 和 bin/yajsw/wrapper.conf 的参数有什么不同。在 wrapper.conf 中添加:

wrapper.java.additional.27 = -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false

请更改参数顺序以适合您的参数列表

StringUtil 捆绑包依赖

这里出现了 NPE 堆栈跟踪,如果没有它,您将无法查明确切的问题。显然,某些 UI 包指定了无效的依赖项,特别是没有为使用的 Commons-Lang StringUtil 包指定依赖项。

我们通过以下措施解决了这个问题:

  • 下载 commons-lang-2.6.jar 并将其复制到存储库/components/dropins
  • 创建一个新的 OSGi 包(假设您了解 Java 以及如何创建 OSGi 包片段),它导入 org.apache.commons.lang;version="[2.6,3)" 并且是org.wso2.carbon.identity.mgt.ui 包的片段。将此捆绑包复制到 dropins 文件夹。
  • 创建一个新的 OSGi 包,它导入 org.apache.commons.lang;version="[2.6,3)" 并且是 org.wso2.carbon.identity 的一个片段.application.mgt.ui 包。将此捆绑包复制到 dropins 文件夹。

编辑:

maven 插件的一部分,用于生成包

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.7</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Fragment-Host>org.wso2.carbon.identity.application.mgt.ui</Fragment-Host>
                    <Import-Package>org.apache.commons.lang.*</Import-Package>
                    <!--
                    <Export-Package>org.apache.commons.lang.*</Export-Package>
                    <Embed-Dependency>commons-lang</Embed-Dependency>
                    -->
                </instructions>
            </configuration>
        </plugin>

有多个捆绑包存在此问题,但要使 IS 5.1.0 可用,至少需要修复这些捆绑包。

在所有情况下,这个答案仍然基于假设和我们的经验,而不是证据(堆栈跟踪)。

g

【讨论】:

  • 首先-非常感谢您的详细回答!我做了您在使用嵌入式 JSP 页面部分中所写的内容。我不知道它是否相关,但突然我可以看到堆栈跟踪。这是:pastebin.com/hZFE7HuK
  • 不,即使在 INFO / ERROR 级别上,wso2carbon.log 中仍然需要更多内容
  • 你是对的。我更改为 ERROR 日志级别。这是完整的堆栈跟踪:pastebin.com/JNBUYPsm
  • 在尝试更新用户角色的权限时是否存在已知的并发问题? wso2.org/jira/browse/…
  • 确实,IS 在并发方面存在一些问题,但事实并非如此。在这种情况下,我敢打赌你必须修复一些数据库设置来解决数据库死锁。尝试搜索你在stacktrace中看到的mysql异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多