Запрошенный счетчик производительности не является пользовательским счетчиком, он должен быть инициализирован как ReadOnly

Чтобы предотвратить утечку памяти, просто отмените регистрацию драйвера при отключении контекста.

pom.xml



    4.0.0

    com.mywebsite
    emusicstore
    1.0-SNAPSHOT

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.7.0
                
                    1.9
                    1.9
                
            
        
    

    
        

        
            org.hibernate
            hibernate-core
            4.0.1.Final
        

        
            org.hibernate.javax.persistence
            hibernate-jpa-2.0-api
            1.0.1.Final
        

        
        
            mysql
            mysql-connector-java
            8.0.11
        

        
        
            javax.servlet
            servlet-api
            2.5
            provided
        
    


MyWebAppContextListener.java

package com.emusicstore.utils;

import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;

public class MyWebAppContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        System.out.println("************** Starting up! **************");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("************** Shutting down! **************");
        System.out.println("Destroying Context...");
        System.out.println("Calling MySQL AbandonedConnectionCleanupThread checkedShutdown");
        AbandonedConnectionCleanupThread.checkedShutdown();

        ClassLoader cl = Thread.currentThread().getContextClassLoader();

        Enumeration drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver driver = drivers.nextElement();

            if (driver.getClass().getClassLoader() == cl) {
                try {
                    System.out.println("Deregistering JDBC driver {}");
                    DriverManager.deregisterDriver(driver);

                } catch (SQLException ex) {
                    System.out.println("Error deregistering JDBC driver {}");
                    ex.printStackTrace();
                }
            } else {
                System.out.println("Not deregistering JDBC driver {} as it does not belong to this webapp's ClassLoader");
            }
        }
    }

}

web.xml




    
        com.emusicstore.utils.MyWebAppContextListener
    




Источник , который вдохновил меня на исправление этой ошибки.

37
задан Andrew Matthews 15 January 2010 в 01:30
поделиться

1 ответ

связано с счетчиком производительности (или категории) не существует , Но с ужасным сообщением об ошибке.

Посмотрите в Perfmon для счетчика, оно должно отсутствовать на соответствующих машинах.

Я считаю, что это происходит с .NET Perf Counters иногда (не имею, почему), но , используя Lodctr 1 . Если вы укажете, какой CORCE COUNTER вы пытаетесь добраться, мы сможем дать вам дополнительную помощь.

  1. Обратите внимание, что приведенный пример предназначен для .NET 1.1, соответствующим образом отрегулируйте различные рамки.
51
ответ дан 27 November 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: