2016-06-28 5 views
1

je lance dans une exception lors de l'ajout du OmniFaces projet de travail dépendance maven à un existant:Exception lors de la combinaison Omnifaces et PrimeFaces LazyDataModel sur Payara Micro

[2016-06-28T17:19:09.280+0200] [Payara Micro 4.1] [SEVERE] [AS-WEB-CORE-00037] [javax.enterprise.web.core] [tid: _ThreadID=17 _ThreadName=http-listener(7)] [timeMillis: 1467127149280] [levelValue: 1000] [[An exception or error occurred in the container during the request processing 
java.lang.ClassCastException: cannot assign instance of java.lang.String to field org.primefaces.model.LazyDataModel.data of type java.util.List in instance of org.primefaces.showcase.view.data.datatable.LazyCarDataModel 
    at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2083) 
    at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1261) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1995) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)  
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    at java.util.HashMap.readObject(HashMap.java:1155) 
    at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    at java.util.HashMap.readObject(HashMap.java:1155) 
    at sun.reflect.GeneratedMethodAccessor48.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    at org.apache.catalina.session.StandardSession.readRemainingObject(StandardSession.java:2079) 
    at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1987) 
    at sun.reflect.GeneratedMethodAccessor49.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017) 
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) 
    at org.apache.catalina.session.StandardSession.deserialize(StandardSession.java:1274) 
    at org.apache.catalina.session.StoreBase.readSession(StoreBase.java:296) 
    at org.glassfish.web.ha.session.management.ReplicationStore.getSession(ReplicationStore.java:567) 
    at org.glassfish.web.ha.session.management.ReplicationStore.getSession(ReplicationStore.java:519) 
    at org.glassfish.web.ha.session.management.ReplicationStore.loadFromBackingStore(ReplicationStore.java:433) 
    at org.glassfish.web.ha.session.management.ReplicationStore.load(ReplicationStore.java:416) 
    at org.apache.catalina.session.PersistentManagerBase.doSwapIn(PersistentManagerBase.java:1215) 
    at org.apache.catalina.session.PersistentManagerBase.swapIn(PersistentManagerBase.java:1175) 
    at org.glassfish.web.ha.session.management.ReplicationManagerBase.findSession(ReplicationManagerBase.java:161) 
    at org.apache.catalina.connector.Request.isRequestedSessionIdValid(Request.java:2996) 
    at org.apache.catalina.connector.Request.parseSessionCookiesId(Request.java:4113) 
    at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:672) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:354) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:283) 
    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:206) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180) 
    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:526) 
    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:591) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571) 
    at java.lang.Thread.run(Thread.java:724) 
]] 

je peux reproduire l'exception des PrimeFaces 6.0 Showcase, il On dirait que la cause n'est pas dans mon code.

Voici comment reproduire avec PrimeFaces vitrine:

  1. Télécharger PrimeFaces 6.0 showcase sources de GitHub.

  2. Ajouter une dépendance OnmiFaces à pom.xml:

    <dependency> 
        <groupId>org.omnifaces</groupId> 
        <artifactId>omnifaces</artifactId> 
        <version>2.3</version> 
    </dependency> 
    
  3. Ajoutez le code Maven pour la création de pot Payara Micro Uber de http://blog.payara.fish/creating-uber-jar-with-payara-micro à pom.xml

  4. Construire avec mvn package puis commencer par java -jar showcase-6.0.jar

  5. Lancez maintenant le showcase sur localhost et ouvrez le DataTable Laz y Charger l'exemple et vous devriez obtenir l'exception.

L'exeption ne se produit pas lorsque la dépendance OmniFaces est supprimée. Et cela ne se produit pas sur Payara Application Server, mais seulement sur Payara Micro. Donc, je ne suis pas sûr si l'erreur est dans OmniFaces, Payara Micro, PrimeFaces ou ailleurs.

+0

Cela pourrait être un bug dans Payara Micro, si la même chose fonctionne correctement dans Payara Server. Avez-vous plusieurs instances de Payara Micro en cours d'exécution (dans un cluster) ou vous exécutez une instance unique? Il est préférable de signaler un problème sur [Payara issue tracker] (https://github.com/payara/Payara/issues). – OndrejM

+0

Numéro de Payara créé: https://github.com/payara/Payara/issues/884 –

+0

Problème ne se pose pas lors du démarrage de Payara Micro avec l'option --noCluster. Donc, si le clustering n'est pas requis, il s'agit d'une solution de contournement jusqu'à ce que le problème soit résolu. –

Répondre

2

Ce comportement est dû au drapeau <distributable> qui était added pour OmniFaces 2.1 afin de prendre en charge l'exécution sur un cluster.

Cela a révélé à son tour quelques bugs dans PrimeFaces 6.0, l'application vitrine PrimeFaces et Payara Micro.

  • PrimeFaces 6.0 nouvelle PhaseInfo classe implémente Serializable, mais possède une propriété PhaseId qui n'est pas du tout Serializable.
  • Dans la vitrine PrimeFaces, il existe plusieurs beans de vue Serializable ayant une propriété de service non sérialisable, tels que CarService dans LazyView bean de support derrière la page de démonstration du tableau de données paresseux.
  • Payara Micro ne semble pas considérer le web.xml de WAR, qu'il soit équipé de <distributable>. Si cet indicateur n'est pas défini, le conteneur ne doit pas supposer que le fichier WAR est distribuable.

Les mêmes problèmes de sérialisation avec PrimeFaces 6.0 et PrimeFaces vitrine sont reproductibles lorsque vous supprimez OmniFaces tout à fait, mais mettre le drapeau <distributable> dans web.xml de PrimeFaces vitrine. Chacune de ces questions doit être rapportée individuellement. J'ai au moins signalé le PhaseInfo question comme issue 1570 et posté un comment sur votre problème Payara Micro.Sur une note légèrement similaire, j'ai également remarqué que web.xml de PrimeFaces showcase a défini com.sun.faces.serializeServerState spécifique à Mojarra sur false. Je n'ai pas étudié les effets lors de la mise à true, mais ce paramètre de false est et non recommandé car il peut masquer d'autres bogues liés à la gestion des vues et de l'état.

+0

Vous pouvez exécuter Payara Micro avec --noCluster puis il ne considérera pas l'application pour la mise en cluster. Par défaut, Payara Micro fonctionne en cluster et tentera donc de déployer toutes les applications en cluster. –

+0

@leetjava: c'était en effet commenté dans le numéro et même sur la question :) – BalusC

+0

Oups raté ça –