que org dbcp basicdatasource java exception exception-handling notserializableexception

org - java.io.NotSerializableException



java io notserializableexception org apache tomcat dbcp dbcp basicdatasource (3)

A veces, "java.io.NotSerializableException" se produce cuando serializa una instancia de clase interna porque:

"serializar una instancia de clase interna dará como resultado la serialización de su instancia de clase externa asociada también"

"La serialización de clases internas (es decir, clases anidadas que no son clases de miembros estáticos), incluidas las clases locales y anónimas, se desaconseja enérgicamente "

Ref: La interfaz serializable

Tengo esta excepción y no entiendo por qué se lanzará o cómo debo manejarlo.

try { os.writeObject(element); } catch (IOException e) { e.printStackTrace(); }

Donde element es un TransformGroup contiene algunos otros TransformGroups una instancia de la clase Atom:

public class Atom extends Group implements Serializable{ float pozX,pozY; Group group= new Group(); Color3f blue = new Color3f(new Color(255)); Color3f black = new Color3f(new Color(0)); Sphere AtSph=new Sphere(); public Atom(final float WEIGHT, final int BOUNDS,final float radius,Color3f color) { AppSetting ap= new AppSetting(color, black); AtSph=new Sphere(radius,1,100,ap); } }

El registro de error completo:

java.io.NotSerializableException: javax.media.j3d.TransformGroup at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at cls.MolecularBuilder.addAtom(MolecularBuilder.java:511) at cls.MolecularBuilder$Console.HidrogenItemActionPerformed(MolecularBuilder.java:897) at cls.MolecularBuilder$Console$2.actionPerformed(MolecularBuilder.java:746) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.AbstractButton.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Nota: AppSetting (en la clase Atom) es solo una clase personalizada que extiende Apariencia.


Haz la clase serializable implementando la interfaz java.io.Serializable .

  • java.io.Serializable - Marker Interface que no tiene ningún método.
  • Propósito de la interfaz de marcador: indicarle a ObjectOutputStream que este objeto es un objeto serializable.

Los campos de su objeto tienen a su vez sus campos, algunos de los cuales no implementan Serializable . En tu caso, la clase ofensiva es TransformGroup . ¿Cómo resolverlo?

  • si la clase es tuya, haz que sea Serializable
  • si la clase es de terceros, pero no la necesita en forma serializada, marque el campo como transient
  • si necesita sus datos y es un tercero, considere otros medios de serialización, como JSON, XML <BSON, MessagePack, etc. donde puede obtener serializaciones de objetos de terceros sin modificar sus definiciones.