2015-10-20 13 views
6

Ho notato che prima del nome del vaso nelle tracce dello stack ci sono caratteri tilde poco prima di una parentesi quadra di apertura. Si verificano sempre dalla cima della traccia dello stack fino a una certa profondità. Anche tracce identiche potrebbero avere delle tilde che terminano con una profondità differente della traccia dello stack. Cosa indicano queste tilde?Cosa significa tilde (~) nella traccia java stack?

at org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:106) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.action.internal.AbstractEntityInsertAction.nullifyTransientReferencesIfNotAlready(AbstractEntityInsertAction.java:132) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.action.internal.AbstractEntityInsertAction.makeEntityManaged(AbstractEntityInsertAction.java:141) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:181) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:168) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:342) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:289) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:138) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:684) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:676) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.spi.CascadingActions$5.cascade(CascadingActions.java:235) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:350) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:293) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:379) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:319) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:296) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:161) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:118) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:470) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:295) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:138) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:715) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:707) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:702) ~[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 
at org.library.hibernate.Hibernate.saveWithTx(Hibernate.java:758) ~[library-4.5.1.0.jar:4.5.1.0] 
at org.library.hibernate.Hibernate.saveWithTx(Hibernate.java:738) ~[library-4.5.1.0.jar:4.5.1.0] 
at org.library.signatureservice.signingdevices.SigningDeviceManagerImpl.addVMacSigningDevice(SigningDeviceManagerImpl.java:421) ~[library-4.5.1.0.jar:4.5.1.0] 
at org.library.adminui.model.VMACDevices.saveItem(VMACDevices.java:243) ~[library-4.5.1.0.jar:4.5.1.0] 
at org.library.adminui.model.VMACDevices.saveItem(VMACDevices.java:21) ~[library-4.5.1.0.jar:4.5.1.0] 
at org.library.adminui.model.SignatureServerDataProvider.handleSaveItem(SignatureServerDataProvider.java:630) ~[library-4.5.1.0.jar:4.5.1.0] 
at org.library.adminui.panel.ManagementPanel.saveButtonClicked(ManagementPanel.java:231) [library-4.5.1.0.jar:4.5.1.0] 
at org.library.adminui.form.ManagementForm$5.onSubmit(ManagementForm.java:302) [library-4.5.1.0.jar:4.5.1.0] 
at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1568) [wicket-1.4.17.jar:1.4.17] 
at org.apache.wicket.markup.html.form.Form.process(Form.java:960) [wicket-1.4.17.jar:1.4.17] 
at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:921) [wicket-1.4.17.jar:1.4.17] 

Sto utilizzando il logback per registrare le tracce dello stack.

+0

A prima vista, sembra che stia dicendo che il file '.java' si trova nel file' .jar' specificato. – Justin

+1

che è un po 'di stack. – ZhongYu

+1

@Justin Si intende il file '.class'. – EJP

risposta

5

Questo comportamento non standard.
Il programma in esecuzione sembra utilizzare Logback, Log4j o un altro programma di registrazione con formattazione simile.

Dalla Logback layout page (sottolineatura mia):

Al termine di ogni frame pila di eccezione, una stringa contenente file barattolo contenente relativa classe seguita dalla "Implementation-Version" come trovato nel manifest di quel barattolo verrà aggiunto. [...] Se l'informazione è incerta, i dati della confezione della classe saranno preceduti da una tilde, cioè il carattere '~'.

Logback fa di tutto per assicurare che le informazioni confezione di classe visualizzata è corretta [...]. Tuttavia, quando non è in grado di garantire l'assoluta correttezza delle informazioni, , farà precedere i dati con una tilde, cioè il carattere '~'. Pertanto, è teoricamente possibile che le informazioni sulla confezione della classe stampata differiscano dalle informazioni sulla confezione della classe reale.

quasi identico, dal Log4j layout page:

Al termine di ogni elemento pila di eccezione, una stringa contenente il nome del file jar che contiene la classe o la directory classe si trova in e la "Versione di implementazione" come trovata nel manifest di quel jar verrà aggiunta. Se l'informazione è incerta, i dati della confezione della classe saranno preceduti da una tilde, cioè il carattere '~'.

TL; DR: Tilde significa "non al 100% che la classe è venuto da quel vaso".