Jump to content

Question

Posted

ERROR Error saving Olympiadds.
java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)
        at java.util.HashMap$KeyIterator.next(HashMap.java:1469)
        at com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad.saveNobleData(Olympiad.java:1098)
        at com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad.saveOlympiadStatus(Olympiad.java:1201)
        at com.l2jfrozen.gameserver.Shutdown.saveData(Shutdown.java:499)
        at com.l2jfrozen.gameserver.Shutdown.closeServer(Shutdown.java:357)
        at com.l2jfrozen.gameserver.Shutdown.run(Shutdown.java:182)

7 answers to this question

Recommended Posts

  • 0
Posted

hello bro. i use rev l2jfrozen 1,5 the only code is adapted to the olympiad section java is the code that shows olympiad period ends.

but the problem waz before that code be adapted to  my server.!

 

and i don't have any error on eclipse :/

  • 0
Posted

com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad.saveNobleData(Olympiad.java:1098)

go to this line and see what happens

  • 0
Posted

ok bro sec

/**
	 * Save noblesse data to database
	 */
	protected synchronized void saveNobleData()
	{
		if (nobles == null || nobles.isEmpty())
		{
			return;
		}
		
		try (Connection con = L2DatabaseFactory.getInstance().getConnection();)
		{
			for (int nobleId : nobles.keySet())
			{
				StatsSet nobleInfo = nobles.get(nobleId);
				
				if (nobleInfo == null)
				{
					continue;
				}
				
				int charId = nobleId;
				int classId = nobleInfo.getInteger(CLASS_ID);
				String charName = nobleInfo.getString(CHAR_NAME);
				int points = nobleInfo.getInteger(POINTS);
				int compDone = nobleInfo.getInteger(COMP_DONE);
				int compWon = nobleInfo.getInteger(COMP_WON);
				int compLost = nobleInfo.getInteger(COMP_LOST);
				int compDrawn = nobleInfo.getInteger(COMP_DRAWN);
				boolean toSave = nobleInfo.getBool("to_save");
				
				if (toSave)
				{
					try (PreparedStatement statement = con.prepareStatement(OLYMPIAD_SAVE_NOBLES))
					{
						statement.setInt(1, charId);
						statement.setInt(2, classId);
						statement.setString(3, charName);
						statement.setInt(4, points);
						statement.setInt(5, compDone);
						statement.setInt(6, compWon);
						statement.setInt(7, compLost);
						statement.setInt(8, compDrawn);
						
						nobleInfo.set("to_save", false);
						
						updateNobleStats(nobleId, nobleInfo);
						
						statement.executeUpdate();
					}
				}
				else
				{
					try (PreparedStatement statement = con.prepareStatement(OLYMPIAD_UPDATE_NOBLES))
					{
						statement.setInt(1, points);
						statement.setInt(2, compDone);
						statement.setInt(3, compWon);
						statement.setInt(4, compLost);
						statement.setInt(5, compDrawn);
						statement.setInt(6, charId);
						
						statement.executeUpdate();
					}
				}
			}
		}
		catch (SQLException e)
		{
			LOGGER.error("Olympiad.saveNobleData : Failed to save noblesse data to database: ", e);
		}
	}
	
	/**
	 * Save noblesse data to database
	 * @param nobleId
	 */
	protected synchronized void saveOldNobleData(final int nobleId)
	{
		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
			PreparedStatement statement = con.prepareStatement(OLYMPIAD_UPDATE_OLD_NOBLES))
		{
			StatsSet nobleInfo = oldnobles.get(nobleId);
			
			if (nobleInfo == null)
			{
				return;
			}
			
			int charId = nobleId;
			int points = nobleInfo.getInteger(POINTS);
			int compDone = nobleInfo.getInteger(COMP_DONE);
			int compWon = nobleInfo.getInteger(COMP_WON);
			int compLost = nobleInfo.getInteger(COMP_LOST);
			int compDrawn = nobleInfo.getInteger(COMP_DRAWN);
			
			statement.setInt(1, points);
			statement.setInt(2, compDone);
			statement.setInt(3, compWon);
			statement.setInt(4, compLost);
			statement.setInt(5, compDrawn);
			statement.setInt(6, charId);
			statement.executeUpdate();
		}
		catch (SQLException e)
		{
			LOGGER.error("Olympiad.saveOldNobleData : Failed to save old noblesse data to database: ", e);
		}
	}
	
	/**
	 * Save olympiad.properties file with current olympiad status and update noblesse table in database
	 */
	public void saveOlympiadStatus()
	{
		saveNobleData();
		
		final Properties OlympiadProperties = new Properties();
		try (FileOutputStream fos = new FileOutputStream(new File("./" + OLYMPIAD_DATA_FILE));)
		{
			OlympiadProperties.setProperty("CurrentCycle", String.valueOf(currentCycle));
			OlympiadProperties.setProperty("Period", String.valueOf(period));
			OlympiadProperties.setProperty("OlympiadEnd", String.valueOf(olympiadEnd));
			OlympiadProperties.setProperty("ValdationEnd", String.valueOf(olympiadValidationEnd));
			OlympiadProperties.setProperty("NextWeeklyChange", String.valueOf(nextWeeklyChange));
			
			final GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
			gc.clear();
			gc.setTimeInMillis(nextWeeklyChange);
			
			OlympiadProperties.setProperty("NextWeeklyChange_DateFormat", DateFormat.getDateTimeInstance().format(gc.getTime()));
			// LOGGER.info("NextPoints: "+DateFormat.getInstance().format(gc.getTime()));
			
			gc.clear();
			gc.setTimeInMillis(olympiadEnd);
			
			OlympiadProperties.setProperty("OlympiadEnd_DateFormat", DateFormat.getDateTimeInstance().format(gc.getTime()));
			// LOGGER.info("NextOlyDate: "+DateFormat.getInstance().format(gc.getTime()));
			
			OlympiadProperties.store(fos, "Olympiad Properties");
		}
		catch (final Exception e)
		{
			LOGGER.warn("Olympiad System: Unable to save olympiad properties to file: ", e);
		}
		
		LOGGER.info("Olympiad System: Data saved!!");
	}
	
	protected void updateMonthlyData()
	{
		try (Connection con = L2DatabaseFactory.getInstance().getConnection();)
		{
			try (PreparedStatement statement = con.prepareStatement(OLYMPIAD_MONTH_CLEAR))
			{
				statement.execute();
			}
			
			try (PreparedStatement statement = con.prepareStatement(OLYMPIAD_MONTH_CREATE))
			{
				statement.executeUpdate();
			}
		}
		catch (SQLException e)
		{
			LOGGER.error("Olympiad.updateMonthlyData : Failed to update monthly noblese data", e);
		}
	}

 

  • 0
Posted

It seems to me that this is a concurrency error and it occurs when you take the same collection to make modifications to it at the same time from different methods, it could be solved by synchronizing the methods that at some point will take the same collection to work or in the particular case of MAPs declaring it as a concurrentHashMap in the latest java versions.

  • 0
Posted

bro i can you contak me  lineage2jvc@gmail.com

this is all the line bro

 

/**
     * Save noblesse data to database
     */
    protected synchronized void saveNobleData()
    {
        if (nobles == null || nobles.isEmpty())
        {
            return;
        }
        
        try (Connection con = L2DatabaseFactory.getInstance().getConnection();)
        {
            for (int nobleId : nobles.keySet())
            {
                StatsSet nobleInfo = nobles.get(nobleId);
                
                if (nobleInfo == null)
                {
                    continue;
                }
                
                int charId = nobleId;
                int classId = nobleInfo.getInteger(CLASS_ID);
                String charName = nobleInfo.getString(CHAR_NAME);
                int points = nobleInfo.getInteger(POINTS);
                int compDone = nobleInfo.getInteger(COMP_DONE);
                int compWon = nobleInfo.getInteger(COMP_WON);
                int compLost = nobleInfo.getInteger(COMP_LOST);
                int compDrawn = nobleInfo.getInteger(COMP_DRAWN);
                boolean toSave = nobleInfo.getBool("to_save");
                
                if (toSave)
                {
                    try (PreparedStatement statement = con.prepareStatement(OLYMPIAD_SAVE_NOBLES))
                    {
                        statement.setInt(1, charId);
                        statement.setInt(2, classId);
                        statement.setString(3, charName);
                        statement.setInt(4, points);
                        statement.setInt(5, compDone);
                        statement.setInt(6, compWon);
                        statement.setInt(7, compLost);
                        statement.setInt(8, compDrawn);
                        
                        nobleInfo.set("to_save", false);
                        
                        updateNobleStats(nobleId, nobleInfo);
                        
                        statement.executeUpdate();
                    }
                }
                else
                {
                    try (PreparedStatement statement = con.prepareStatement(OLYMPIAD_UPDATE_NOBLES))
                    {
                        statement.setInt(1, points);
                        statement.setInt(2, compDone);
                        statement.setInt(3, compWon);
                        statement.setInt(4, compLost);
                        statement.setInt(5, compDrawn);
                        statement.setInt(6, charId);
                        
                        statement.executeUpdate();
                    }
                }
            }
        }
        catch (SQLException e)
        {
            LOGGER.error("Olympiad.saveNobleData : Failed to save noblesse data to database: ", e);
        }
    }

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • Inventory restock: Premium business accounts are now available.   ✔ Wallester Business EU 🇪🇺|💳 Unlimited virtual cards, physical cards, 🏦 multi-currency IBAN, ₿ crypto & stablecoin deposits. ✔ Stripe Business UK 🇬🇧|💳 Instant virtual cards (Visa/Mastercard), high-conversion checkout, multi-currency payouts, ₿ crypto payments, no-code payment links. ✔ Mercury Business US 🇺🇸|🏦 US checking & savings, 💳 unlimited virtual cards, domestic & International wires, native stablecoin settlement. ✔ Payset Business EU 🇪🇺|🏦 Multiple IBANs, UK sort code, SEPA Instant, 💳 unlimited virtual cards, multi-currency accounts. ✔ Novo Business US 🇺🇸|🏦 Business checking account, ACH payments & invoicing, 💳 virtual & physical cards, novo boost.
    • Let me see if I understand correctly, older gentlemen, when a newcomer shows up to create modern things with the help of AI, doing what you charge them to do, you point the finger and laugh. I believe that's why everything is stagnant. The product isn't for programming experts, it's for newcomers. Don't buy from you if they can do it themselves using this base. You're going to deliver a similar product, maybe even worse than this one, so why are you complaining? PowerShell, as you well know, started with it, then came new platforms and new apps, new creation models, all with different languages; I chose the simplest one for my taste. This is about being organized and knowing how to choose the right words for each situation. It's not 100%, but it already gives a good impression. Nothing is 100%, so a topic written by AI, and all the code that you charge an absurd amount for to prohibit and sell hacks, could be open source so that everyone can create new practices, new models, new information for passing packets, prohibiting the use of cheats that cause server owners to break so much. Let's remember that the Admin doesn't always shut down the server; it's the players who find problems and take advantage by buying and reselling items, and they say that the GM shuts down the server every week, but that's a lie. What they do is duplicate items with packages and sell them, but perhaps this could give some future developers a starting point to create their own protection following the model in the initial documentation. Because none of you answer a question from a newbie, you think you're superior because you have knowledge, but with AI, people like that can have the same knowledge as you, but with less practice. And if they practice a lot, 10,000 hours, they can be as good as all of you older developers in the L2J field.
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..