The second release of 2016 is finally here! Payara Server 4.1.1.162 is our biggest release yet in terms of sheer number of bug fixes and new features. One of the biggest things isn’t actually a new feature of Payara Server but a newly rehosted documentation, and it’s where you’ll find the full release notes for this version.
Outside of the Server itself, we have a couple of new things – e.g. updated documentation and improved Docker images in Docker Hub. These aren’t small improvements, so we will dedicate separate blog posts to these!
New Developers
Within the team, we have new members to welcome – Fabio Turizo has joined the Support and Customer Service Team; and Lenny Primak has joined our developers. Lenny has been part of the team for a couple of weeks now and hasn’t wasted time; two enhancements have been added by Lenny:
Implicit CDI scanning can cause problems sometimes. There is already a method to disable CDI scanning within a WAR file (WEB-INF/beans.xml attribute bean-discovery-mode=”none”will disable CDI scanning for all WAR classes and in WEB-INF/lib directory) but there was no way to do this for EAR files. So if you included 3rd party JARs in your EAR, it may still trigger implicit CDI scanning. Lenny added a tag to the glassfish-application.xml to disable CDI for an entire EAR.
Previously, it was possible to add new global libraries at the domain level, but it does not work if the same library is present as core Payara Server dependencies. The implemented behavior is that a new version of a library in domain/lib would override older version of the library inside the server. This is enabled by setting fish.payara.classloading.delegate = false (the default is true)
New Clustering Features
We already support more modern cluster topologies in Payara Server and Payara Micro through the use of Hazelcast (see more ). With this release, we have enabled Hazelcast “Lite” nodes in both Micro and Server editions. This means that you can have cluster members which share data, but have no local data storage. This means you can drastically skew your heap in favour of the new generation and, as a result, have much lower pause times! In addition to that, we have also enabled Payara Micro and Payara Server to join the same cluster.
An important improvement is that we now support Hazelcast group config and group password properties in the console. If you’re in a position where you go live to production with a Hazelcast cluster which has default settings, then previously there would be cross-talk with any other Payara Server instance that used Hazelcast on the same network. Our first recommendation is always to change the defaults, but using group configuration we can avoid accidents!
Stay tuned to this blog over the coming weeks, where we intend to go more in-depth in the advantages and disadvantages of these new styles of clustering and show how you can make the best use of them in cloud environments.
The new clustering feature I’m most looking forward to, though, is a new button in the admin console, and an asadmin command to go with it…
…because it was added by me! I’ve long been frustrated by the lack of a restart button at the cluster level, despite it being possible to restart individual instances. Now I know that my testing life is going to have one less frustration in it!
New Payara Micro Features
There have been quite a few Payara Micro improvements this month, so I’ll list the key ones here:
At the build stage, you can now package a domain.xml in with your application. While certain parts of configuration can already be packaged with your application (like a data source, for example), you can now package a fully configured Payara domain. When you are developing microservices, packaging and deployment is often much easier if all the configuration is in one versioned unit, rather than a single deployment involving multiple files.
So far in the life of Payara Micro, our design goals have been to view a microservice as just a skinny WAR – in other words, just your business logic, not the runtime. This means that your artifacts are kept as small as possible and easy to manage. IT is never a one-size-fits-all game, though, and plenty of people really like packaging the WAR into a runnable “Uber” JAR, so we have now added a feature to output a runnable JAR as a command line option!
Community Fixes and Enhancements
As usual, the community effort has been very strong! Our thanks for this release go out to:
A special mention to all those who have been raising issues on GitHub! We’re very grateful for all the work in testing our new releases and quickly raising bugs. The more things we catch early, the better Payara Server becomes!
As mentioned above, keep an eye out for more blog posts explaining the new Payara Server and Payara Micro 162 features in more detail – all coming within the next couple of weeks. Make sure you don’t miss them and subscribe to our blog ( top of this page).
Hi Juliano! To some extent, how to upgrade depends on how you have configured your servers, how many clusters you have and what are the applications. I will send you an email with some more information.
I would like to clarify what means “Haselcast Lite Member”? I have 5 nodes in my test environment: 4 pure Hazelcast nodes and one Payara Server Full node as “light” member. Using Hazelcast Management Center I see that Payara serves Hazelcast partitions as well and stores data. May be I missed something?
A hazelcast lite member is essentially a Hazelcast node which does not store any data. How did you configure your Payara Server lite node? If you think this is a bug, raise an issue on GitHub with the steps to reproduce the problem:
Problem is found: I’m using alternative hazelcast-config.xml, so it is required to specify within it. With this setting Payara behave exactly as expected. Thank you!
Hi Mike, I am facing some issues while migrating from glassfish 4.1.1 to payara 4.1.1.162. While trying to access the remote ejb (with serializable class as an input param) i get the following error. The code works fine works fine when when I run it on glassfish 4.1.1. Could you tell me if im missing some basic configuration change. Thank you for your help.
org.omg.CORBA.MARSHAL: WARNING: 00810013: Could not find class in CDRInputStream.readClass vmcid: OMG minor code: 13 completed: Maybe
at com.sun.proxy.$Proxy175.cnfeReadClass(Unknown Source)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readClass(CDRInputStream_1_0.java:1312)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:961)
at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:518)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:383)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:450)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:171)
at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528)
at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549)
at com.sun.corba.ee.impl.protocol.SharedCDRClientRequestDispatcherImpl.marshalingComplete(SharedCDRClientRequestDispatcherImpl.java:119)
at com.sun.corba.ee.impl.protocol.ClientDelegateImpl.invoke(ClientDelegateImpl.java:258)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:198)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:150)
at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:226)
Hi Nikhil, it’s hard to tell from your comment. Could you create a new issue on our GitHub project with some extra detail from the server log and the code that is failing. https://github.com/payara/Payara/issues
How to migrate from Payara Server 4.1.1.161.1 to 4.1.1.162?
I did some configuration (datasources, jars) and I don’t want to lose it.
Thanks.
Hi Juliano! To some extent, how to upgrade depends on how you have configured your servers, how many clusters you have and what are the applications. I will send you an email with some more information.
Hi, Mike.
I would like to clarify what means “Haselcast Lite Member”? I have 5 nodes in my test environment: 4 pure Hazelcast nodes and one Payara Server Full node as “light” member. Using Hazelcast Management Center I see that Payara serves Hazelcast partitions as well and stores data. May be I missed something?
A hazelcast lite member is essentially a Hazelcast node which does not store any data. How did you configure your Payara Server lite node? If you think this is a bug, raise an issue on GitHub with the steps to reproduce the problem:
https://github.com/payara/Payara/issues
Hi, Mike.
Problem is found: I’m using alternative hazelcast-config.xml, so it is required to specify within it. With this setting Payara behave exactly as expected. Thank you!
Hi Mike, I am facing some issues while migrating from glassfish 4.1.1 to payara 4.1.1.162. While trying to access the remote ejb (with serializable class as an input param) i get the following error. The code works fine works fine when when I run it on glassfish 4.1.1. Could you tell me if im missing some basic configuration change. Thank you for your help.
org.omg.CORBA.MARSHAL: WARNING: 00810013: Could not find class in CDRInputStream.readClass vmcid: OMG minor code: 13 completed: Maybe
at com.sun.proxy.$Proxy175.cnfeReadClass(Unknown Source)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readClass(CDRInputStream_1_0.java:1312)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:961)
at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:518)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:383)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readArguments(DynamicMethodMarshallerImpl.java:450)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:171)
at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatchToServant(ServerRequestDispatcherImpl.java:528)
at com.sun.corba.ee.impl.protocol.ServerRequestDispatcherImpl.dispatch(ServerRequestDispatcherImpl.java:199)
at com.sun.corba.ee.impl.protocol.MessageMediatorImpl.handleRequestRequest(MessageMediatorImpl.java:1549)
at com.sun.corba.ee.impl.protocol.SharedCDRClientRequestDispatcherImpl.marshalingComplete(SharedCDRClientRequestDispatcherImpl.java:119)
at com.sun.corba.ee.impl.protocol.ClientDelegateImpl.invoke(ClientDelegateImpl.java:258)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:198)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:150)
at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:226)
Hi Nikhil, it’s hard to tell from your comment. Could you create a new issue on our GitHub project with some extra detail from the server log and the code that is failing.
https://github.com/payara/Payara/issues