Java Wildfly服务器在非windows环境中出现故障,错误为WFLYCTL0017&&;WFLYCTL0013

Java Wildfly服务器在非windows环境中出现故障,错误为WFLYCTL0017&&;WFLYCTL0013,java,jboss,wildfly,redhat,keycloak,Java,Jboss,Wildfly,Redhat,Keycloak,我使用ProcessBuilder(JAVA)将一些命令传递给standalone.sh。 当我在windows环境中使用standalone.bat和相同参数运行时,只需注意路径,它就可以在windows中运行 但当我在mac或RedHat Linux上尝试相同的代码时,它就失败了 我无法在日志文件中看到它,因为它在启动服务器之前就失败了 我试过比较windows和MAC中的standalone.xml,两者都是相同的 对于它失败的Mac JBOSS_HOME: /Application

我使用ProcessBuilder(JAVA)将一些命令传递给standalone.sh。 当我在windows环境中使用standalone.bat和相同参数运行时,只需注意路径,它就可以在windows中运行

但当我在mac或RedHat Linux上尝试相同的代码时,它就失败了

我无法在日志文件中看到它,因为它在启动服务器之前就失败了

我试过比较windows和MAC中的standalone.xml,两者都是相同的

对于它失败的Mac


  JBOSS_HOME: /Applications/CA/10.5SQLSERVER/IdentityAccessManager

  JAVA: /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/bin/java

  JAVA_OPTS:  -server -Diam.keystore.password=\${VAULT::IAM::IAM_KEYSTORE_PASSWORD::1} -DIAM_HOME=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/ -Diam.db.password=\${VAULT::IAM::IAM_DB_PASSWORD::1} -Diam.db.jdbc.driver.path=/Users/ajay/driveD/software/jars/sqljdbc4-4.0.jar -Diam.vault.enc.iteration.count=120 -Diam.db.vendor=mssql -Diam.vault.keystore.password.masked=MASK-7DscHYCAzRJgjgpBba72IwRGfBaq4CFF70uETVutVDX -Diam.truststore.password=\${VAULT::IAM::IAM_TRUSTSTORE_PASSWORD::1} -Diam.db.url=jdbc:sqlserver://ibndev000608.bpc.broadcom.net:1433;databaseName=IAM105_VAULT -Diam.keystore=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks -Diam.vault.keystore.salt=6zqH6N6p -Diam.truststore=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/iam-truststore.ks -Diam.vault.enc.file.dir=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/vault/ -Diam.vault.keystore.alias=vault -Diam.vault.keystore.url=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/vault/vault.keystore -Diam.db.user=sa -Djboss.http.port=51112 -Djboss.https.port=51111 -Djboss.bind.address.management=0.0.0.0 -Djboss.bind.address=0.0.0.0 -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=iam-updater -Dkeycloak.migration.dir=../realms-to-import -Dkeycloak.migration.strategy=IGNORE_EXISTING -Diam.version=1.2.1-SNAPSHOT -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
我得到的错误是 ./standalone.sh:第311行:-Diam.keystore=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks:没有这样的文件或目录

即使是webreckeys.ks,该文件也已存在,并且所有权限都已存在

=========================================================================

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include:
    -d32      use a 32-bit data model if available
    -d64      use a 64-bit data model if available
    -server   to select the "server" VM
                  The default VM is server,
                  because you are running on a server-class machine.


    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A : separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose:[class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -no-jre-restrict-search
                  Warning: this feature is deprecated and will be removed
                  in a future release.
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions with specified granularity
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                  see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument
    -splash:<imagepath>
                  show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
./standalone.sh: line 311: -Diam.keystore=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks: No such file or directory
启用日志记录级别进行调试后

我看不出什么错误

2019-09-23 12:18:55,175 DEBUG [org.jboss.as.controller.management-operation] (main) WFLYCTL0017: Operation ("read-resource") failed - address: ([
    ("subsystem" => "datasources"),
    ("jdbc-driver" => "mssql")
]) - failure description: "WFLYCTL0216: Management resource '[
    (\"subsystem\" => \"datasources\"),
    (\"jdbc-driver\" => \"mssql\")
]' not found"
另一个是

2019-09-17 17:06:00,607 ERROR [org.jboss.as.controller.management-operation] (main) WFLYCTL0013: Operation ("list-resource-loader-paths") failed - address: ([("core-service" => "module-loading")]) - failure description: "com.microsoft.sqlserver.jdbc"
这里是standalone.xml中的子系统标记


<subsystem xmlns="urn:jboss:domain:datasources:5.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" use-ccm="true">
                    <connection-url>${iam.db.url}</connection-url>
                    <driver>mssql</driver>
                    <pool>
                        <flush-strategy>IdleConnections</flush-strategy>
                    </pool>
                    <security>
                        <user-name>${iam.db.user}</user-name>
                        <password>${iam.db.password}</password>
                    </security>
                    <validation>
                        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
                        <background-validation>true</background-validation>
                        <background-validation-millis>60000</background-validation-millis>
                    </validation>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="mssql" module="com.microsoft.sqlserver.jdbc">
                        <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB\u关闭\u打开\u退出=错误
氢
sa
sa
${iam.db.url}
数据库
空闲连接
${iam.db.user}
${iam.db.password}
选择1
真的
60000
org.h2.jdbcx.JdbcDataSource
com.microsoft.sqlserver.jdbc.SQLServerDriver

其他文件(如truststore)如何,如果是这样,则密钥库文件位置肯定有问题,或者可能是它的名称。为了进行验证,您可以通过将密钥库文件放在jboss主页的位置来检查密钥库文件,并在JAVA_OPTS中给出该特定路径,如果该路径有效,则肯定会出现文件位置问题或文件路径问题。在使用“/”符号时也要小心。

我找到了答案,为什么它会失败,并带有错误消息

原因在于-
Diam.db.url=jdbc:sqlserver://ibndev000608.bpc.broadcom.net:1433;databaseName=IAM105\u VAULT

在-Diam.db.url的值中有一个分号
jdbc:sqlserver://ibndev000608.bpc.broadcom.net:1433;databaseName=IAM105_VAULT

分号
databaseName=IAM105\u VAULT之后

接下来是密钥库命令

-databaseName=IAM105_VAULT-Diam.keystore=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks

所以就变成了


databaseName=IAM105_VAULT-Diam.keystore=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks

在Linux和Mac环境中,分号表示两个命令之间的分隔符

我是怎么解决这个问题的

我打开standalone.sh并将其放在第一行
set-x
,这意味着跟踪shell脚本

它显示了两个命令,所以我用双引号(“”)标识并附上了JDBCURL

这是我的工作。。。
谢谢大家的努力。

文件不存在或无法访问。你能做一个
ls-l/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks吗?@stdunbar我提到了所有的读写权限都在那里,文件也在正确的位置C02Z45LWLVDR:~ajay$ls-l/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks-rw rw rw-1 ajay admin 1396年5月14日09:50/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks C02Z45LWLVDR:~ajay$`@stdunbar我已经用调试日志查找进行了更新,请看一看并提出原因事情发生了。我用调试日志更新了。你能看一下吗,我被困在这里了。很好的调查!你可以接受自己的答案,它可能会帮助将来遇到同样问题的人找到你的解决方案。顺便说一句,如果你不想编辑一个脚本来添加
set-x
,你也可以用
bash-x
启动它,例如
bash-x standalone.sh
,其效果与
set-x

<subsystem xmlns="urn:jboss:domain:datasources:5.0">
            <datasources>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true" use-ccm="true">
                    <connection-url>${iam.db.url}</connection-url>
                    <driver>mssql</driver>
                    <pool>
                        <flush-strategy>IdleConnections</flush-strategy>
                    </pool>
                    <security>
                        <user-name>${iam.db.user}</user-name>
                        <password>${iam.db.password}</password>
                    </security>
                    <validation>
                        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
                        <background-validation>true</background-validation>
                        <background-validation-millis>60000</background-validation-millis>
                    </validation>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                    <driver name="mssql" module="com.microsoft.sqlserver.jdbc">
                        <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
-Diam.db.url="jdbc:sqlserver://ibndev000608.bpc.broadcom.net:1433;databaseName=IAM105_VAULT" -Diam.keystore=/Applications/CA/10.5SQLSERVER/IdentityAccessManager/certs/webreckeys.ks