在停止tomcat时使用spring服务获取java.io.NotSerializableException [英] Getting java.io.NotSerializableException with a spring service when stopping tomcat

查看:136
本文介绍了在停止tomcat时使用spring服务获取java.io.NotSerializableException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用弹簧3与JSF 2
,我用Spring bean替换了JSF托管的bean,添加在bean的顶部:

 
@Scope(session)



在我的bean中,我自动连接一个spring服务(已经注释为@service)



好的,一切都可以正常工作,但是当我尝试停止tomcat 6,我使用我的春季服务得到这个异常

  java.io.NotSerializableException 

任何想法为什么我得到这个例外,以及如何解决它。



更新:



在使我的服务实现可序列化后,有时我会得到以下异常:

  java.lang.IllegalStateException:无法反序列化BeanFactory与id org.springframework.web.context.WebApplicationContext:/ spring_faces:没有工厂注册此id 
在org.springframework.b eans.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)
在java.lang.reflect.Method.invoke(Method.java:597)
在java。 io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1061)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1762)
在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
在java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
在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)
java.lang.reflect.Method.invoke(Method.java:597)
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java.io.ObjectInputStream.readObject0(ObjectInputStream.java: 1329)
在java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
在java.io.ObjectInputStream .defaultReadFields(ObjectInputStream.java:1947)
在java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
在org.spring framework.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)
在java.lang.reflect.Method.invoke(Method.java:597)
在java.io. ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
在java.io.ObjectInputStream.readSerialData(ObjectInputStream .java:1871)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java.io.O bjectInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
在java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.defaultReadFields(ObjectInputStream .java:1947)
在java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java。 io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
在java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java.io.Objec tInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
在java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.defaultReadFields(ObjectInputStream .java:1947)
在java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
在java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
在java。 io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
在java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
在org.apache.catalina.session.StandardSession.readObject(StandardSession。 java:1496)
在org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:998)
at或g.apache.catalina.session.StandardManager.doLoad(StandardManager.java:394)
在org.apache.catalina.session.StandardManager.load(StandardManager.java:321)
在org.apache。 catalina.session.StandardManager.start(StandardManager.java:648)
在org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:446)
在org.apache.catalina.core。 StandardContext.start(StandardContext.java:4631)
在org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
在org.apache.catalina.core.StandardHost.start( StandardHost.java:840)
在org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
在org.apache.catalina.core.StandardEngine.start(StandardEngine.java: 463)
在org.apache.catalina.core.StandardService.start(StandardService.java:525)
在org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
a t sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在java.lang.reflect.Method.invoke(Method.java:597)
在org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
在org .apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

请指教。 / p>

解决方案

嗯,最后我能够使其工作正常如下:



1-服务

  @Service 
@Scope(singleton )
public class PersonService {

}

2- Spring Managed Bean:

  @Component(person)
@Scope session)
public class PersonBean implements Serializable {

@Inject
private PersonService personService;

}

等待您的反馈。


i am using spring 3 with JSF 2 and i replaced JSF managed beans with spring beans, by adding on top of bean:

@Component("mybean")
@Scope("session")

and in my bean i am autowiring a spring service (which was declared with the annotation @service)

well, everything works fine with the service, but when i tried to stop tomcat 6, i am getting this exception with my spring service

java.io.NotSerializableException

any ideas why i am getting this exception, and how to solve it.

UPDATE:

after making my service implements serializable, sometimes i am getting following exception:

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)

please advise.

解决方案

Well, finally i was able to make it work fine as follows:

1- The Service:

@Service
@Scope("singleton")
public class PersonService{

}

2- The Spring Managed Bean:

 @Component("person")
   @Scope("session")
   public class PersonBean implements Serializable{

   @Inject
   private PersonService personService;

   }

waiting for your feedback.

这篇关于在停止tomcat时使用spring服务获取java.io.NotSerializableException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆