6

背景

我正在研究jboss/wildfly 16servlet 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)
4

0 回答 0