在停止tomcat时使用spring服务获取java.io.NotSerializableException [英] Getting java.io.NotSerializableException with a spring service when stopping tomcat
问题描述
,我用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屋!