0

在安装 wso2 mgr 并在 jdbi 中进行小改动以使用我们的 mysql 服务器之后,除了 oauth 之外,一切“似乎”都能正常工作。

在 carbon web UI 中,当我单击“oauth”上的左侧菜单时,我收到一条错误消息

System Error Occurred - Error occurred while reading OAuth application data

我看了其他帖子,看到了这个。我看了看我在${WSO2_IS_HOME}/repository/conf/identity.xml哪里看到我有一个条目 <skipdbschemacreation>true</skipdbschemacreation>

我尝试将其更改为 false 并且没有更改...

有人对 wso2 apu mgr 有这个问题吗?

知道如何在 api mgr 中设置 oauth 吗?

我必须安装 wso2 身份管理器吗?

----更新1 ------

似乎将此标志更改为 false 会给我们的数据库带来问题,因为我们现在收到一条错误消息。当您将此标志重置为 true 时,db 错误仍然存​​在...

错误消息说

[2012-08-19 15:40:13,649] 错误 - JDBCResourceDAO 无法删除 id 为 688 的资源。无法执行语句:无法写入二进制日志,因为 BINLOG_FORMAT = STATEMENT 并且至少一个表使用仅限于行的存储引擎- 基于日志记录。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。java.sql.SQLException:无法执行语句:无法写入二进制日志,因为 BINLOG_FORMAT = STATEMENT 并且至少一个表使用仅限于基于行的日志记录的存储引擎。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。

后来 wso2 启动脚本说:

[2012-08-19 15:40:13,654] 致命 - CarbonServerManager WSO2 Carbon 初始化失败 org.wso2.carbon.registry.core.exceptions.RegistryException:无法删除 ID 为 688 的资源。无法执行语句:无法写入二进制日志,因为 BINLOG_FORMAT = STATEMENT 并且至少一个表使用仅限于基于行的日志记录的存储引擎。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。

稍后在我们拥有的同一个启动脚本中

org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) 原因:java.sql.SQLException:无法执行语句:由于 BINLOG_FORMAT = STATEMENT 和至少一个表,无法写入二进制日志使用仅限于基于行的日志记录的存储引擎。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。

4

1 回答 1

1

skipdbschemacreation属性是在引入 WSO2 APIManager之后专门引入的。这是因为 WSO2 APIManager 有一个单独的 sql 脚本来创建所有必需的表(包括 OAuth2.0 相关表)。因此有必要在服务器启动时跳过 OAuth 组件的模式创建步骤。因此,此属性在 WSO2 APIManager 中默认设置为“true” ,而在 WSO2 Identity Server 中默认设置为false是正确的。

您面临的问题应该是因为指向 MySQL 数据库的配置不正确。如果您使用的是 MySQL 数据库,则应配置其设置的位置是{WSO2_APIMANAGER_HOME}/repository/conf/datasources/master-datasources.xml。更改名称为 WSO2AM_DB 的数据源的设置。这是具有 OAuth2.0 相关表的数据源。

例如

        <datasource>
            <name>WSO2AM_DB</name>
            <description>The datasource used for API Manager database</description>
            <jndiConfig>
                <name>jdbc/WSO2AM_DB</name>
            </jndiConfig>
            <definition type="RDBMS">
                <configuration>
                    <url>jdbc:mysql://localhost:3306/wso2am_db</url>
                    <username>admin</username>
                    <password>admin@123</password>
                    <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                    <maxActive>50</maxActive>
                    <maxWait>60000</maxWait>
                    <testOnBorrow>true</testOnBorrow>
                    <validationQuery>SELECT 1</validationQuery>
                    <validationInterval>30000</validationInterval>
                </configuration>
            </definition>
        </datasource>

我假设您已经通过运行{WSO2_APIMANAGER_HOME}/dbscripts/apimgt/mysql.sql中提供的 mysql.sql 脚本创建了所需的数据库模式。

为 WSO2 APIManager 创建 MySQL 数据库模式:

  1. 导航到您拥有用于创建 WSO2AM_DB 的 mysql 脚本的位置。

  2. 从该位置打开命令提示符并从 cmd 提示符登录到 mysql

    mysql -u 根目录 -p

  3. 创建一个数据库。创建用户并授予访问权限。

    创建数据库apimgt;

  4. GRANT ALL ON apimgt.* TO admin@localhost IDENTIFIED BY "admin";

  5. 运行 mysql.sql 脚本。这将配置数据库。

    使用 apimgt;

    源mysql.sql;

于 2012-08-20T11:52:45.083 回答