1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите SQL & Bukkit ошибка при перезагрузке плагина

Тема в разделе "Разработка плагинов для новичков", создана пользователем NyanGuyMF, 31 дек 2018.

Метки:
  1. Автор темы
    NyanGuyMF

    NyanGuyMF Активный участник Пользователь

    Баллы:
    76
    Пишу плагин с подключение к MySQL бд. Всё нормально, подключается, но при перезагрузке плагина /asw pmanager reload вылезает красивая ошибка:
    PHP:
    java.lang.VerifyErrorBad type on operand stack
    Exception Details
    :
      
    Location:
        
    me/nyanguymf/jailplugin/managers/data/DatabaseManager.<init>()@68putfield
      Reason
    :
        
    Type 'me/nyanguymf/jailplugin/managers/data/MySQLCore' (current framestack[1]) is not assignable to 'me/nyanguymf/jailplugin/managers/data/Database'
      
    Current Frame:
        
    bci: @68
        flags
    : { }
        
    locals: { 'me/nyanguymf/jailplugin/managers/data/DatabaseManager''java/lang/String''java/lang/String''java/lang/String'integer'java/lang/String''java/lang/String' }
        
    stack: { 'me/nyanguymf/jailplugin/managers/data/DatabaseManager''me/nyanguymf/jailplugin/managers/data/MySQLCore' }
      
    Bytecode:
        
    0x00000002ab7 000c 120e b800 104c 1216 b800 104d
        0x0000010
    1218 b800 104e 121a b800 1c36 0412 20b8
        0x0000020
    0010 3a05 1222 b800 103a 062b 1224 b600
        0x0000030
    2699 0019 2abb 002c 592c 2d15 0419 0519
        
    0x000004006b7 002e b500 31a7 0037 bb00 3359 1235
        0x0000050
    b700 372b b600 3a12 3eb6 003a b600 4012
        0x0000060
    44b8 0046 bb00 3359 124c b700 372b b600
        0x0000070
    3a12 3eb6 003a b600 4012 44b8 004e b1
      Stackmap Table
    :
        
    full_frame(@74,{Object[#1],Object[#39],Object[#39],Object[#39],Integer,Object[#39],Object[#39]},{})
        
    same_frame(@126)

        
    at me.nyanguymf.jailplugin.JailPlugin.onEnable(JailPlugin.java:40) ~[?:?]
        
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:316) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at autosaveworld.features.pluginmanager.InternalUtils.loadPlugin(InternalUtils.java:104) ~[?:?]
        
    at autosaveworld.features.pluginmanager.PluginManager.reloadPlugin(PluginManager.java:253) ~[?:?]
        
    at autosaveworld.features.pluginmanager.PluginManager.handlePluginManagerCommand(PluginManager.java:66) ~[?:?]
        
    at autosaveworld.commands.subcommands.PluginManagerSubCommand.handle(PluginManagerSubCommand.java:36) ~[?:?]
        
    at autosaveworld.commands.NoTabCompleteCommandsHandler.onCommand(NoTabCompleteCommandsHandler.java:113) ~[?:?]
        
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:151) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:685) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:648) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:463) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:424) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666) ~[patched_1.12.2.jar:git-Paper-1587]
        
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]
    PHP:
    /**
     * DatabaseManager.java 2018-12-31
     *
     * @author NyanGuyMF
     *
     * @version 1.0
     */
    package me.nyanguymf.jailplugin.managers.data;

    import java.sql.Connection;

    import me.nyanguymf.jailplugin.JailPlugin;
    import me.nyanguymf.jailplugin.managers.ConfigManager;

    /**
     * Mediator pattern
     *
     * @author nyanguymf
     */
    public class DatabaseManager implements IDatabase {
        private 
    Database databaseCore;

        public 
    DatabaseManager() {
            
    String  databaseDriver  ConfigManager.getString("database.db-driver");
            
    String  host            ConfigManager.getString("database.host");
            
    String  database        ConfigManager.getString("database.database");
            
    int     port            ConfigManager.getInt("database.port");
            
    String  user            ConfigManager.getString("database.user");
            
    String  password        ConfigManager.getString("database.password");

            if (
    databaseDriver.equalsIgnoreCase("mysql")) {
                
    databaseCore = new MySQLCore(hostdatabaseportuserpassword);
            } else { 
    // TODO: add other SQL drivers
                // TODO: JailPlugin.log() && JailPlugin.debug()
                
    JailPlugin.log("Couldn't load " databaseDriver " database driver""DatabaseManager");
                
    JailPlugin.debug("There is no " databaseDriver " database driver""DatabaseManager");
            }
        }

        @
    Override
        
    public Connection getConnection() {
            return 
    databaseCore.getConnection();
        }

        @
    Override
        
    public boolean isConnected() {
            return 
    databaseCore.isConnected();
        }

        @
    Override
        
    public void close() {
            
    databaseCore.isConnected();
        }
    }
    PHP:
    /**
     * MySQLCore.java 2018-12-31
     *
     * @author NyanGuyMF
     *
     * @version 1.0
     */
    package me.nyanguymf.jailplugin.managers.data;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.SQLNonTransientConnectionException;

    import me.nyanguymf.jailplugin.JailPlugin;

    /**
     * @author nyanguymf
     *
     */
    class MySQLCore extends Database {

        public 
    MySQLCore(String hostString databaseint portString userString password) {
            
    this.host       host;
            
    this.database   database;
            
    this.port       port;
            
    this.user       user;
            
    this.password   password;

            try {
                
    connect();
            } catch (
    SQLNonTransientConnectionException ex) {
                
    JailPlugin.debug("You can use https://stackoverflow.com/questions/1673530/"
                                
    +"error-2003-hy000-cant-connect-to-mysql-server-on-127-0-0-1-111 to fix this""Database");
                
    ex.printStackTrace();
            }
        }

        
    /**
         * Connect to database.
         */
        
    private void connect() throws SQLNonTransientConnectionException {
            try {
                Class.
    forName("com.mysql.jdbc.Driver");
                
    connection DriverManager.getConnection(

                        
    "jdbc:mysql://" host ":" port "/" database
                        
    "?useUnicode=true&characterEncoding=utf-8&autoReconnect=true"
                        
    userpassword

                        
    );
            } catch (
    SQLException ex) {
                
    JailPlugin.debug("SQL Exception""MySQLCore#connect()");
                
    ex.printStackTrace();
            } catch (
    ClassNotFoundException ex) {
                
    JailPlugin.debug("Class com.mysql.jdbc.Driver not found""MySQLCore#connect()");
                
    ex.printStackTrace();
            }
        }

        @
    Override
        
    public Connection getConnection() {
            try {
                if (
    connection.isClosed() || connection == null)
                    
    connect();

            } catch (
    SQLException ex) {
                
    JailPlugin.debug("SQL Exception""MySQLCore#getConnection()");
                
    ex.printStackTrace();
            }

            return 
    connection;
        }

        @
    Override
        
    public boolean isConnected() {
            return 
    connection != null// && connection.isClosed() ??
        
    }

        @
    Override
        
    public void close() {
            try {
                if (
    isConnected())
                    
    connection.close();

            } catch (
    SQLException e) {
                
    JailPlugin.debug("SQL Exception""MySQLCore#close()");
                
    e.printStackTrace();
            }
        }
    }
    Как это фиксить, чтобы можно было спокойно перезагружать плагин, а не сервер? :D
     
  2. Code

    Code Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    на странице плагина написано, что этим релоадом даже конфиги нельзя перегружать. а ты видимо новую джарку суешь, потому и ошибка. не уверен что это фиксится.
    как альтернативу можешь попробовать hot swap
    https://www.google.com/search?q=java+remote+debug+hot+swap
     
  3. Автор темы
    NyanGuyMF

    NyanGuyMF Активный участник Пользователь

    Баллы:
    76
    При перезагрузке плагинов без подключения к БД у меня всё нормально, а тут - ошибка :D
     
  4. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    То же что и всегда, где-то остались используемые куски этого плагина. Либо поток где-то какой-то остался, либо забыл из сервера всё разрегать, либо есть другие зависимые плагины.
     
  5. Автор темы
    NyanGuyMF

    NyanGuyMF Активный участник Пользователь

    Баллы:
    76
    Нет ни плагинов, ни потоков. Не совсем понял, что означает "разрегать все сервера"? При выключении плагина выполняется метод, закрывающий соединение - DatabaseManager.close();

    Как пофиксить-то? :D
     
  6. Code

    Code Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    не разрегать все сервера, а разрегать всё из сервера. я плагины не пишу, но подозреваю что тут имеется ввиду вызов unregister если при загрузке ты делал register чего либо
     
  7. Автор темы
    NyanGuyMF

    NyanGuyMF Активный участник Пользователь

    Баллы:
    76
    То есть возможный вариант решения - unregister(RegisteredListener listener) из HandlerList?
     

Поделиться этой страницей