当我的wildfly 8.1.0服务器启动时,它应该创建一个类的实例。

我不确定是否正在发生,并且我无法更改源代码,因此我认为我将使用Byteman来完成此操作。

我为Byteman编写了此规则文件,存储在C:\app\ECLSManagedConnectionFactory.btm

RULE trace ECLSManagedConnectionFactory init entry
CLASS com.empolis.ecls.server.j2ee.jca.impl.ECLSManagedConnectionFactory
METHOD <init>
AT ENTRY
IF true
DO traceOpen("ECLSManagedConnectionFactory", "/app/ECLSManagedConnectionFactory.log");
   traceln("entering <init>");
   traceClose("ECLSManagedConnectionFactory");
ENDRULE


我下载了Byteman并将其解压缩到C:\byteman-3.0.3

我修改了我的java_opts,并让wildfly在启动期间回显了该值:

-Xms64m -Xmx512m -XX:MaxPermSize=256m
-Dorg.jboss.byteman.transform.all
-javaagent:C:/byteman-3.0.3/lib/byteman.jar=script:C:/app/ECLSManagedConnectionFactory.btm,boot:C:/byteman-3.0.3/lib/byteman.jar:listener:true
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
-Djava.net.preferIPv4Stack=true
-Dorg.jboss.resolver.warning=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djboss.server.default.config=cls.xml


如果上面的java_opts的第2行和第3行不存在,则服务器将成功启动,但是在我添加这些行的那一刻,服务器根本无法启动。没有任何迹象表明发生了什么事到stdout或stderr。我收到一条消息,要求检查server.log以获得更多信息,但是该文件不存在。

我究竟做错了什么?我已经尝试了路径的斜线方向的每种组合(在Windows 10上很重要)。

有人实际使用此byteman工具吗?我很惊讶它在Stack Overflow上没有标签,并且在线上可用的信息很少。

最佳答案

问题是此行:

-javaagent:C:/byteman-3.0.3/lib/byteman.jar=script:C:/app/ECLSManagedConnectionFactory.btm,boot:C:/byteman-3.0.3/lib/byteman.jar:listener:true
                                                                                                  This should have been a comma ^


放弃驱动器名称,并在启动jar和listener:true之间加逗号。像这样:

-javaagent:/byteman-3.0.3/lib/byteman.jar=script:/app/ECLSManagedConnectionFactory.btm,boot:/byteman-3.0.3/lib/byteman.jar,listener:true
                                                                      This has been fixed - it is a comma as it should be ^

10-08 14:29