JMonkey 3.1 Alpha Network error

I got the following error when running the same code that worked just fine in 3.0 on 3.1 alpha:

Exception in thread "Thread-7" java.lang.RuntimeException: Serializer registry locked trying to register class:class com.jme3.network.message.SerializerRegistrationsMessage
at com.jme3.network.serializing.Serializer.registerClassForId(Serializer.java:195)
at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:237)
at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:151)
at com.jme3.network.service.serializer.ClientSerializerRegistrationsService.onInitialize(ClientSerializerRegistrationsService.java:57)
at com.jme3.network.service.serializer.ClientSerializerRegistrationsService.onInitialize(ClientSerializerRegistrationsService.java:49)
at com.jme3.network.service.AbstractService.initialize(AbstractService.java:74)
at com.jme3.network.service.AbstractService.initialize(AbstractService.java:44)
at com.jme3.network.service.ServiceManager.addService(ServiceManager.java:110)
at com.jme3.network.service.ClientServiceManager.addService(ClientServiceManager.java:75)
at com.jme3.network.base.DefaultClient.addStandardServices(DefaultClient.java:103)
at com.jme3.network.base.DefaultClient.<init>(DefaultClient.java:92)
at com.jme3.network.base.DefaultClient.<init>(DefaultClient.java:98)
at com.jme3.network.Network.connectToServer(Network.java:167)
at fpc.states.FPSState.connectToServer(FPSState.java:682)
at fpc.states.FPSState.simpleInitApp(FPSState.java:314)
at fpc.states.FPSState.start(FPSState.java:374)
at fpc.Main.startFPS(Main.java:167)
at fpc.states.MainMenuState$2.run(MainMenuState.java:108)
at java.lang.Thread.run(Thread.java:745)

As I said before, this was working just fine on 3.0. Anything change about message serialization that I’m missing? The first entry in the stack trace that references my own code is at fpc.states.FPSState.connectToServer(FPSState.java:682), which looks like this:

client = Network.connectToServer(GAME_NAME, GAME_VERSION, ip, tcp, udp);

ip is a string, tcp and udp are ints. Name and version are static strings. Is this just a bug? If so, where should I be reporting thoes?

It could be a bug. Yes some things were changed with how default serialization is done… for one thing you shouldn’t have to register messages on the client anymore (with the default setup).

As part of this, the serializer registry gets locked once it must be static (this is a good idea anyway since the serializer will often try to autoregester stuff that hasn’t been written before and this is almost always a bug in user code).

However, for some reason when you connect, your serializer seems to have already been locked. Do you create multiple connections in the same run by any chance?