Hemos utilizado liquibase en nuestra compañía por un tiempo, y hemos tenido un entorno de integración continua configurado para las migraciones de bases de datos que romperían un trabajo cuando un parche tuviera un error.¿Es posible agregar metadatos personalizados a los archivos .class?
Una "característica" interesante de ese entorno de CI es que la rotura tenía un "posible culpable", porque todos los parches deben tener un "autor", y el mensaje de error muestra el nombre del autor.
Si no sabes lo que es la liquiba, está bien, no es el punto.
El punto es: tener una persona nombre atribuido a un error es muy bueno para el desarrollo de software proccess: problemas se abordan de forma más rápida.
Así que estaba pensando: ¿Es eso posible para stacktraces de Java?
¿Podríamos tener una stacktrace con nombres de personas junto con números de línea como el siguiente?
java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372:john)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121:mike)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232:bob)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173:bob)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87:bob)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862:john)
Ese tipo de información tendría que ser sacado de un sistema de SCM (como la realización de la "culpa SVN" para cada archivo de origen).
Ahora, olvídate de destrozar el tiempo de compilación por un minuto: ¿Eso sería posible? Para agregar metadatos a archivos de clase como ese?
¿Por qué pondría esto en un archivo de clase? Tener esto en un sistema externo probablemente sería una mejor idea? – Suman
Dudo que los rastros sean relevantes, las líneas que lanzan una NullPointerException raramente son la línea responsable del error (y el autor ciertamente no es el culpable). El error ocurre porque los datos procesados por el código no se desinfectaron correctamente, y cuando explota es demasiado tarde (y demasiado lejos del punto en el código que se debe corregir). –