Prise en java.io.NotSerializableException avec un ressort de service lors de l'arrêt de tomcat
je suis en utilisant le printemps 3 avec JSF 2
et j'ai remplacé JSF géré les haricots avec le printemps, les haricots, en ajoutant sur le dessus de haricot:
@Component("mybean")
@Scope("session")
et dans mon haricot je suis permettra à l'autowiring un ressort de service (qui a été déclarée avec l'annotation @service)
bien, tout fonctionne bien avec le service, mais quand j'ai essayé d'arrêter tomcat 6, j'obtiens cette exception avec mon ressort de service
java.io.NotSerializableException
des idées pourquoi je reçois cette exception, et comment le résoudre.
Mise à JOUR:
après avoir fait mon service implémente serializable, parfois, je reçois exception suivante:
java.lang.IllegalStateException: Cannot deserialize BeanFactory with id org.springframework.web.context.WebApplicationContext:/spring_faces: no factory registered for this id
at org.springframework.beans.factory.support.DefaultListableBeanFactory$SerializedBeanFactoryReference.readResolve(DefaultListableBeanFactory.java:972)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1061)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1762)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
at org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor.readObject(AbstractBeanFactoryPointcutAdvisor.java:98)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
at org.springframework.aop.framework.AdvisedSupport.readObject(AdvisedSupport.java:550)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1496)
at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:998)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:394)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:321)
at org.apache.catalina.session.StandardManager.start(StandardManager.java:648)
at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:446)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4631)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
veuillez en informer.
OriginalL'auteur Mahmoud Saleh | 2011-09-21
Vous devez vous connecter pour publier un commentaire.
À la recherche à l'erreur, Il ressemble à tomcat est d'essayer d'arranger le tout le printemps contexte, je pense qu'il pourrait être en raison du fait que vous êtes d'exécution Sérialisable sur le Service. Je pensais peut-être avez vous besoin de faire cela, je ne sais pas JSF bien mais ma compréhension de l'étendue des haricots me fait penser, Vous pourriez avoir besoin quelque chose comme ça
quand j'ai essayé, je suis d'exception: org.springframework.aop.cadre.AopConfigException: Impossible de proxy classe cible parce que CGLIB2 n'est pas disponible. Ajouter CGLIB au chemin de classe, ou de spécifier des interfaces de proxy.
Vous n'avez pas besoin requis est vrai (juste en demandant conteneur que cette dépendance ne peut pas être ignoré) c'est la valeur par défaut, Vous avez besoin de cette dépendance <groupId>cglib</groupId> <artifactId>cglib</artifactId><version>2.2.2< version>, Vous pouvez soit utiliser le JDK ou CGLIB pour créer du proxy si vous mettez CGLIB dans le classpath de printemps de l'utilisation CGLIB pour créer le prxoy.
ok je vais essayer ça, mais tu ne m'as pas dit, ce que le code signifie: proxyMode=ScopedProxyMode.TARGET_CLASS
La lecture de cet article 3.4.4.5. à partir de la documentation ci-dessous static.springsource.org/spring/docs/2.5.x/reference/...
OriginalL'auteur Prasanna Talakanti
Vous obtenez cette exception parce que la classe n'implémente pas
Serializable
. Tomcat sérialise actuellement en cours d'exécutionHttpSession
objets, y compris tous ses attributs à disque à chaque fois qu'il est sur le point de redémarrer/redéployer, de sorte qu'ils sont repris après le cycle. Session de l'étendue des objets sont stockés en tant qu'attributs de laHttpSession
, d'où ils ont besoin pour mettre en œuvreSerializable
pour survivre à la redémarrer/redéployer.Si vous souhaitez faire
Serializable
, puis le mettre en œuvre en conséquence:Sinon, il suffit d'ignorer l'exception ou de désactiver la sérialisation des sessions sur le disque dans la configuration de Tomcat.
Noter que la même histoire s'applique également à la vue JSF/session étendue de haricots.
Si vous en avez besoin pour être sérialisable, alors oui. Autrement marquer leur transitoire. J'ai seulement ne garantit pas que le Printemps va réinjecter après la relance, c'est au-delà de ma connaissance (je ne fais pas de Printemps).
Je pense que le problème est @autocâblés de service, je pense que si vous faites le service d'un transitoire de service ne sera pas sérialisé (puisque vous ne pouvez pas vraiment sérialiser toute manière, C'est juste un prox)
qu'entendez-vous les gars en rendant service transitoire ?
question mise à jour .
OriginalL'auteur BalusC
Bien, j'ai finalement réussi à faire du bon travail, comme suit:
1 - Le Service:
2 - Le Printemps Managed Bean:
attente de vos commentaires.
OriginalL'auteur Mahmoud Saleh
J'ai eu à utiliser
readObject()
+static ApplicationContext
hack pour résoudre le problème:OriginalL'auteur vladimir83