Unclose connection.

Support for the latest build of L2J Server, get help here with installations, upgrades, problems.
Do not post bugs reports here, use viewforum.php?f=77 instead.
There is no support for other server builds than the official provided by l2jserver.com
Forum rules
READ NOW: L2j Forums Rules of Conduct
Post Reply
Kzah
Posts: 41
Joined: Thu Feb 02, 2012 4:55 pm

Unclose connection.

Post by Kzah »

If you want to receive support we need this info to help you properly.
» Find Revision
L2J Revision Number: 5741
L2JDP Revision Number: 9363

Hello,

After the installation of Dressme : http://pastebin.com/5AYHVPit

All passes correctly, except that the GS grumbles a little :

Code: Select all

 Unclosed connection! Trace: com.l2jserver.gameserver.model.actor.instance.L2PcInstance.restoreVisualArmors(L2PcInstance.java:17365)java.lang.RuntimeException at com.l2jserver.L2DatabaseFactory.getConnection(L2DatabaseFactory.java:273)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.restoreVisualArmors(L2PcInstance.java:17365)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.restore(L2PcInstance.java:7999)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.load(L2PcInstance.java:1316)        at com.l2jserver.gameserver.network.L2GameClient.loadCharFromDisk(L2GameClient.java:581)        at com.l2jserver.gameserver.network.clientpackets.CharacterSelect.runImpl(CharacterSelect.java:133)        at com.l2jserver.gameserver.network.clientpackets.L2GameClientPacket.run(L2GameClientPacket.java:70)        at com.l2jserver.gameserver.network.L2GameClient.run(L2GameClient.java:1092)        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)        at java.lang.Thread.run(Unknown Source)  Unclosed connection! Trace: com.l2jserver.gameserver.model.actor.instance.L2PcInstance.storeVisualArmors(L2PcInstance.java:17424)java.lang.RuntimeException        at com.l2jserver.L2DatabaseFactory.getConnection(L2DatabaseFactory.java:273)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.storeVisualArmors(L2PcInstance.java:17424)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.store(L2PcInstance.java:8276)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.store(L2PcInstance.java:9115)        at com.l2jserver.gameserver.network.L2GameClient.saveCharToDisk(L2GameClient.java:376)        at com.l2jserver.gameserver.network.L2GameClient$AutoSaveTask.run(L2GameClient.java:901)        at com.l2jserver.gameserver.ThreadPoolManager$RunnableWrapper.run(ThreadPoolManager.java:93)        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)        at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)         at java.util.concurrent.FutureTask.runAndReset(Unknown Source)        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)        at java.lang.Thread.run(Unknown Source) Unclosed connection! Trace: com.l2jserver.gameserver.model.actor.instance.L2PcInstance.checkIfExist(L2PcInstance.java:17397)java.lang.RuntimeException        at com.l2jserver.L2DatabaseFactory.getConnection(L2DatabaseFactory.java:273)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.checkIfExist(L2PcInstance.java:17397)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.storeVisualArmors(L2PcInstance.java:17417)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.store(L2PcInstance.java:8276)        at com.l2jserver.gameserver.model.actor.instance.L2PcInstance.store(L2PcInstance.java:9115)        at com.l2jserver.gameserver.network.L2GameClient.saveCharToDisk(L2GameClient.java:376)        at com.l2jserver.gameserver.network.L2GameClient$AutoSaveTask.run(L2GameClient.java:901)        at com.l2jserver.gameserver.ThreadPoolManager$RunnableWrapper.run(ThreadPoolManager.java:93)        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)        at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)         at java.util.concurrent.FutureTask.runAndReset(Unknown Source)        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)        at java.lang.Thread.run(Unknown Source) 


Here are the concerned codes :



Code: Select all

private void restoreVisualArmors()    {        try        {            Connection con = L2DatabaseFactory.getInstance().getConnection();            PreparedStatement statement = con.prepareStatement("SELECT * FROM character_visual_armors WHERE charId=?");            statement.setInt(1, getObjectId());            ResultSet rset = statement.executeQuery();            if (rset.next())            {                isUsingVisualArmors(rset.getBoolean("isUsingVisual"));                setVisualArmor(VisualArmors.Armor, rset.getInt("armor"));                setVisualArmor(VisualArmors.Legs, rset.getInt("leggings"));                setVisualArmor(VisualArmors.Feet, rset.getInt("feet"));                setVisualArmor(VisualArmors.Gloves, rset.getInt("gloves"));                setVisualArmor(VisualArmors.LHand, rset.getInt("lHand"));                setVisualArmor(VisualArmors.Sword, rset.getInt("sword"));                setVisualArmor(VisualArmors.Bow, rset.getInt("bow"));                setVisualArmor(VisualArmors.Pole, rset.getInt("pole"));                setVisualArmor(VisualArmors.Dual, rset.getInt("dualWeapons"));                setVisualArmor(VisualArmors.BigSword, rset.getInt("bigSword"));            }            rset.close();            statement.close();        }                catch (Exception e)        {            _log.log(Level.WARNING, "Could not restore " + getObjectId() + " visual armors data " + e.getMessage(), e);        }    }

Code: Select all

private void storeVisualArmors()    {        if (!checkIfExist())        {            insertVisualArmors();        }        // UPDATE characters SET vitality_points=?,language=? WHERE charId=?";        try        {            Connection con = L2DatabaseFactory.getInstance().getConnection();            PreparedStatement statement = con.prepareStatement("UPDATE character_visual_armors SET isUsingVisual=?,armor=?,leggings=?,feet=?,gloves=?,sword=?,bow=?,pole=?,dualWeapons=?,bigSword=?,lHand=? WHERE charId=?");            statement.setInt(1, isUsingVisualArmors() ? 1 : 0);            statement.setInt(2, getVisualArmor(VisualArmors.Armor, true) == null ? 0 : getVisualArmor(VisualArmors.Armor, true).getItemId());            statement.setInt(3, getVisualArmor(VisualArmors.Legs, true) == null ? 0 : getVisualArmor(VisualArmors.Legs, true).getItemId());            statement.setInt(4, getVisualArmor(VisualArmors.Feet, true) == null ? 0 : getVisualArmor(VisualArmors.Feet, true).getItemId());            statement.setInt(5, getVisualArmor(VisualArmors.Gloves, true) == null ? 0 : getVisualArmor(VisualArmors.Gloves, true).getItemId());            statement.setInt(6, getVisualArmor(VisualArmors.Sword, true) == null ? 0 : getVisualArmor(VisualArmors.Sword, true).getItemId());            statement.setInt(7, getVisualArmor(VisualArmors.Bow, true) == null ? 0 : getVisualArmor(VisualArmors.Bow, true).getItemId());            statement.setInt(8, getVisualArmor(VisualArmors.Pole, true) == null ? 0 : getVisualArmor(VisualArmors.Pole, true).getItemId());            statement.setInt(9, getVisualArmor(VisualArmors.Dual, true) == null ? 0 : getVisualArmor(VisualArmors.Dual, true).getItemId());            statement.setInt(10, getVisualArmor(VisualArmors.BigSword, true) == null ? 0 : getVisualArmor(VisualArmors.BigSword, true).getItemId());            statement.setInt(11, getVisualArmor(VisualArmors.LHand, true) == null ? 0 : getVisualArmor(VisualArmors.LHand, true).getItemId());            statement.setInt(12, getObjectId());            statement.execute();        }        catch (Exception e)        {            _log.log(Level.WARNING, "Could not store character " + getObjectId() + " visual armors data: ", e);        }    }

Code: Select all

private boolean checkIfExist()    {        try        {            Connection con = L2DatabaseFactory.getInstance().getConnection();            PreparedStatement statement = con.prepareStatement("SELECT charId FROM character_visual_armors WHERE charId=?");            statement.setInt(1, getObjectId());            try (ResultSet rset = statement.executeQuery())            {                if (rset.next())                {                    return true;                }                            }                    }        catch (Exception e)        {            _log.log(Level.WARNING, "Could not restore " + getObjectId() + " visual armors data " + e.getMessage(), e);        }        return false;    }

How to solve these problems?
Thank You.

PS : Sorry if it's the bad forum.
User avatar
Zoey76
L2j Inner Circle
L2j Inner Circle
Posts: 7008
Joined: Tue Aug 11, 2009 3:36 am

Re: Unclose connection.

Post by Zoey76 »

In restoreVisualArmors() you miss resource closing, same in checkIfExist(), storeVisualArmors() and insertVisualArmors().

You could fix it using ARM, like this:
Change:

Code: Select all

+               try+               {+                       Connection con = L2DatabaseFactory.getInstance().getConnection();
To

Code: Select all

+               try (Connection con = L2DatabaseFactory.getInstance().getConnection())+               {
The other way (deprecated) is to add con.close():

Code: Select all

+                       statement.execute();+                       con.close(); // <----+               }+               catch (Exception e)
Finally this is not the right forum to ask this, it could be viewforum.php?f=46 if it was a script made by L2j or viewforum.php?f=74 since you need help with a custom script.
Powered by Eclipse 4.34 🌌 | Eclipse Temurin 21 ☕ | MariaDB 11.3.2 🗃️ | L2J Server 2.6.3.0 - High Five 🚀

🔗 Join our Discord! 🎮💬
Kzah
Posts: 41
Joined: Thu Feb 02, 2012 4:55 pm

Re: Unclose connection.

Post by Kzah »

Thanks and sorry for the bad section ! :?
Post Reply