背景
我正在研究jboss/wildfly 16
servlet mypackagex.war。这是一个maven
项目。我的服务器使用openjdk11-jdk
. 我设法使用 jcmd 运行产生 java 飞行记录。并设法用 JDK Mission Control 打开了那个 jfr 转储。一切都很好,花花公子。
JPID=616
jcmd $JPID JFR.configure repositorypath=/tmp/jcmdrecording/
jcmd $JPID JFR.start settings=default.jfc name=recording1 filename=JFRfile.jfr disk=true dumponexit=true maxage=2d maxsize=2000m path-to-gc-roots=true
jcmd $JPID JFR.check
jcmd $JPID JFR.dump /tmp/recording1.jfr
问题
当我尝试像下面的示例一样以编程方式进行自定义事件记录时。我得到一个错误。就好像野蝇不知道jdk.jfr.Event
存在一样。我错过了什么?
声明自定义事件记录器示例
package com.mypackagex.dao;
import jdk.jfr.Category;
import jdk.jfr.Event;
import jdk.jfr.Label;
import jdk.jfr.Period;
@Label("Database stats")
@Period("1 s")
@Category("Database")
public class DatabaseStatsEvent extends Event {
}
获取飞行记录事件的代码位置
public class UrlObjectActionMapperDAO {
private static String jndiDataSourceName = "jdbc/cedar_mypackagex_security";
private static DataSource dataSource = getDataSourceFromJNDI();
static Logger logger = LoggerFactory.getLogger(UrlObjectActionMapperDAO.class);
private static DataSource getDataSourceFromJNDI() {
return DatasourceProvider.getProvider().getDsSecurity();
}
public UrlObjectActionMapperDTO getURLMappedProps(String URI){
DatabaseStatsEvent ev = new DatabaseStatsEvent(); // --------- line 49 the issue!
ev.begin();
return null;
}
}
错误
滚动到您将看到的右侧jdk/jfr/Event
local-mypackagex | Caused by: java.lang.NoClassDefFoundError: Failed to link com/mypackagex/dao/DatabaseStatsEvent (Module "deployment.mypackagex.war" from Service Module Loader): jdk/jfr/Event
local-mypackagex | at deployment.mypackagex.war//com.mypackagex.dao.UrlObjectActionMapperDAO.getURLMappedProps(UrlObjectActionMapperDAO.java:49)
local-mypackagex | at deployment.mypackagex.war//com.mypackagex.services.RBACService.getURLMappedProps(RBACService.java:70)
local-mypackagex | at deployment.mypackagex.war//com.mypackagex.servlet.RBACFilter.validateRequest(RBACFilter.java:465)
local-mypackagex | at deployment.mypackagex.war//com.mypackagex.servlet.RBACFilter.validateRequest(RBACFilter.java:450)
local-mypackagex | at deployment.mypackagex.war//com.mypackagex.servlet.RBACFilter.doFilter(RBACFilter.java:235)
local-mypackagex | at io.undertow.servlet@2.0.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
local-mypackagex | at io.undertow.servlet@2.0.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
local-mypackagex | at deployment.mypackagex.war//com.mypackagex.servlet.ProxyResponseBuilderFilter.doFilter(ProxyResponseBuilderFilter.java:456)
local-mypackagex | at io.undertow.servlet@2.0.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
local-mypackagex | at io.undertow.servlet@2.0.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
local-mypackagex | at deployment.mypackagex.war//org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
local-mypackagex | at deployment.mypackagex.war//org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
local-mypackagex | at deployment.mypackagex.war//org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
local-mypackagex | at deployment.mypackagex.war//org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
local-mypackagex | at deployment.mypackagex.war//org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
local-mypackagex | at deployment.mypackagex.war//org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)