title: java.lang.NullPointerException at org.eclipse.persistence.platform.server.ServerPlatformUtils.createServerPlatform(ServerPlatformUtils.java)
body: <p>EclipseLink 2.6.1 (final) throws the following exception upon deploying a Java EE application on GlassFish Server 4.1. This had not been happening prior to upgrading from 2.6.0.</p>
  
  <pre><code>Warning:   java.lang.NullPointerException
      at org.eclipse.persistence.platform.server.ServerPlatformUtils.createServerPlatform(ServerPlatformUtils.java:101)
      at org.eclipse.persistence.sessions.factories.SessionManager.init(SessionManager.java:77)
      at org.eclipse.persistence.sessions.factories.SessionManager.&lt;clinit&gt;(SessionManager.java:71)
      at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.addSessionToGlobalSessionManager(EntityManagerSetupImpl.java:907)
      at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.initSession(EntityManagerSetupImpl.java:2676)
      at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:675)
      at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205)
      at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:305)
      at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337)
      at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:303)
      at org.glassfish.persistence.jpa.JPADeployer$2.visitPUD(JPADeployer.java:451)
      at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:510)
      at org.glassfish.persistence.jpa.JPADeployer.iterateInitializedPUsAtApplicationPrepare(JPADeployer.java:492)
      at org.glassfish.persistence.jpa.JPADeployer.event(JPADeployer.java:395)
      at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
      at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:487)
      at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
      at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.Subject.doAs(Subject.java:360)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.Subject.doAs(Subject.java:360)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
      at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
      at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
      at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
      at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
      at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
      at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
      at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
      at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
      at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
      at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
      at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
      at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
      at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
      at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
      at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
      at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
      at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
      at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
      at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
      at java.lang.Thread.run(Thread.java:745)
  </code></pre>
  
  <p>Although it is a <code>java.lang.NullPointerException</code>, the <code>LOG</code> level is <code>Warning</code>.</p>
  
  <p><a href="http://grepcode.com/file/repo1.maven.org/maven2/org.eclipse.persistence/eclipselink/2.6.1-RC1/org/eclipse/persistence/sessions/factories/SessionManager.java#SessionManager.init%28%29" rel="noreferrer"><code>org.eclipse.persistence.sessions.factories.SessionManager#init()</code></a> is defined as follows (though grepcode shows RC1).</p>
  
  <pre><code>74     private static void init() {
  75         String platformClass = ServerPlatformUtils.detectServerPlatform(null);
  76         try {
  77             detectedPlatform = ServerPlatformUtils.createServerPlatform(null, platformClass, SessionManager.class.getClassLoader());
  78         } catch (NullPointerException npe) {
  79             //some platforms may not be handling 'null' session well,
  80             //so be defensive here and only log throwable here
  81             detectedPlatform = null;
  82             LOG.logThrowable(SessionLog.WARNING, AbstractSessionLog.CONNECTION, npe);
  83         }
  84         supportPartitions = detectedPlatform != null &amp;&amp; detectedPlatform.usesPartitions();
  85         if (supportPartitions) {
  86             managers = new ConcurrentHashMap&lt;String, SessionManager&gt;(4, 0.9f, 1);
  87             SessionManager sm = initializeManager();
  88             manager = sm;
  89             managers.put(sm.context, sm);
  90         } else {
  91             manager = initializeManager();
  92         }
  93     }
  </code></pre>
  
  <p>Where <a href="http://grepcode.com/file/repo1.maven.org/maven2/org.eclipse.persistence/eclipselink/2.6.1-RC1/org/eclipse/persistence/platform/server/ServerPlatformUtils.java#ServerPlatformUtils.createServerPlatform%28org.eclipse.persistence.sessions.DatabaseSession%2Cjava.lang.String%2Cjava.lang.ClassLoader%29" rel="noreferrer"><code>createServerPlatform(DatabaseSession session, String platformClass, ClassLoader loader)</code></a> throws a <code>java.lang.NullPointerException</code>, if <code>platformClass</code> is <code>null</code>.</p>
  
  <pre><code>97     public static ServerPlatform createServerPlatform(DatabaseSession session, String platformClass, ClassLoader loader) {
  98         if (platformClass == null) {
  99             throw new NullPointerException();
  100        }
  
             //...
         }
  </code></pre>
  
  <p>It appears to be normal according to the code. Is it?</p>