OptimisticLockException #29


  • Accepted
  • Defect
Open
Assigned to _ForgeUser7599051
  • _ForgeUser7599051 created this issue Jan 28, 2012
    Owner

    Tried the new 0.1.1.0 build and I'm using a MySQL ebean database. Every time i try to buy or sell items the MC client shows "An internal error occurred while attempting to perform this command"

    The console is showing an OptimisticLockExecption error.

    11:03:57 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'sell' in plugin DynaMark v0.1.1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:168)
            at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:386)
            at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:777)
            at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:737)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:725)
            at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:33)
            at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:100)
            at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
            at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:536)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:434)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
    Caused by: javax.persistence.OptimisticLockException: Data has changed. updated [0] rows sql[update DynaMark_Commodities set value=? where id=? and name=? and value=? and number=? and max_value=? and min_value=? and change_rate=? and data=? and spread=?] bind[null]
            at com.avaje.ebeaninternal.server.persist.dml.DmlHandler.checkRowCount(DmlHandler.java:123)
            at com.avaje.ebeaninternal.server.persist.dml.UpdateHandler.execute(UpdateHandler.java:106)
            at com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:105)
            at com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.update(DmlBeanPersister.java:85)
            at com.avaje.ebeaninternal.server.persist.DefaultPersistExecute.executeUpdateBean(DefaultPersistExecute.java:110)
            at com.avaje.ebeaninternal.server.core.PersistRequestBean.executeNow(PersistRequestBean.java:531)
            at com.avaje.ebeaninternal.server.core.PersistRequestBean.executeOrQueue(PersistRequestBean.java:557)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.update(DefaultPersister.java:430)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.saveEnhanced(DefaultPersister.java:343)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.saveRecurse(DefaultPersister.java:315)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.save(DefaultPersister.java:282)
            at com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1577)
            at com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1567)
            at me.smickles.DynamicMarket.DynamicMarket.sell(DynamicMarket.java:842)
            at me.smickles.DynamicMarket.DynamicMarket.readCommand(DynamicMarket.java:350)
            at me.smickles.DynamicMarket.DynamicMarket.onCommand(DynamicMarket.java:302)
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
            ... 12 more
    11:09:52 [SEVERE] null
    org.bukkit.command.CommandException: Unhandled exception executing command 'buy' in plugin DynaMark v0.1.1.0
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:42)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:168)
            at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:386)
            at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:777)
            at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:737)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:725)
            at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:33)
            at net.minecraft.server.NetworkManager.b(NetworkManager.java:226)
            at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:100)
            at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
            at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:536)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:434)
            at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
    Caused by: javax.persistence.OptimisticLockException: Data has changed. updated [0] rows sql[update DynaMark_Commodities set value=? where id=? and name=? and value=? and number=? and max_value=? and min_value=? and change_rate=? and data=? and spread=?] bind[null]
            at com.avaje.ebeaninternal.server.persist.dml.DmlHandler.checkRowCount(DmlHandler.java:123)
            at com.avaje.ebeaninternal.server.persist.dml.UpdateHandler.execute(UpdateHandler.java:106)
            at com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:105)
            at com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.update(DmlBeanPersister.java:85)
            at com.avaje.ebeaninternal.server.persist.DefaultPersistExecute.executeUpdateBean(DefaultPersistExecute.java:110)
            at com.avaje.ebeaninternal.server.core.PersistRequestBean.executeNow(PersistRequestBean.java:531)
            at com.avaje.ebeaninternal.server.core.PersistRequestBean.executeOrQueue(PersistRequestBean.java:557)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.update(DefaultPersister.java:430)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.saveEnhanced(DefaultPersister.java:343)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.saveRecurse(DefaultPersister.java:315)
            at com.avaje.ebeaninternal.server.persist.DefaultPersister.save(DefaultPersister.java:282)
            at com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1577)
            at com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1567)
            at me.smickles.DynamicMarket.DynamicMarket.buy(DynamicMarket.java:716)
            at me.smickles.DynamicMarket.DynamicMarket.readCommand(DynamicMarket.java:323)
            at me.smickles.DynamicMarket.DynamicMarket.onCommand(DynamicMarket.java:302)
            at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40)
            ... 12 more
    

    I have other plugins (ie. modreq) using the ebean database though MySql. Here's my bucket.yml configuration.

    database:
      username: XXXXXXX
      isolation: SERIALIZABLE
      driver: com.mysql.jdbc.Driver
      password: XXXXXXX
      url: jdbc:mysql://localhost:3306/test_database
    

    I also have an ebean.properties file in the minecraft home directory server.

    When buying or selling. The plugin is taking the objects from my inventory but I'm not seeing the price update. It looks like it's not actually updating the database.

    I do have the a proper: DynaMark_Commodities table in MySql with entries that were exported from the original config.yml.

  • _ForgeUser7599051 added the tags Accepted Defect Jan 28, 2012
  • _ForgeUser7599051 posted a comment Jan 28, 2012

    Thanks to the information you've provided, I believe that I have a solution. When I have the opportunity, I will implement the fix in code. It should come in the next release.

    After this release, I hope to see you report that it works just fine right here :D


    Edited Feb 21, 2012
  • _ForgeUser8331960 posted a comment Feb 1, 2012

    Thanks for looking into this. I can't wait to try out this plugin on our production server!!! :)

  • Toxuin posted a comment Mar 2, 2012

    Any ETA on this?.. Our server got bugged and everyone could buy over 9000 diamonds for nothing. Now using modified version of 0.1.0.0 with residence support. I could make a pull-request with this change if you update your github.

  • _ForgeUser7599051 posted a comment Mar 2, 2012

    @toxuin: Go

    what do you mean update my github?

    if you make a pull request I'll pull it in and release a new version here on dev.bukkit.org.

  • _ForgeUser2804591 posted a comment Jun 13, 2012

    I seem to get this error when using mysql but not the default sqlite. Another of my plugins uses the bukkit.yml for it's db info and it needs to use mysql. Shame you can't specify which db this plugin uses. I'd rather not use the bukkit.yml info.


To post a comment, please login or register a new account.