Page 1 of 1

Fehler beim fetchen der Metadaten

PostPosted: Mon Sep 10, 2018 11:52 am
by hansemar
Hallo zusammen,

nachdem ich die JVX-Version von 2.8 Version b36 auf 5.1.8 Version b41 geupdatet habe, bekomme ich folgende Fehlermeldung:

Meta data couldn't load from database! - SELECT *
FROM [SCHEMA_OWNER].(SELECT [COLUMNS] FROM [TABEL] WHERE [WHERE_CLAUSE] GROUP BY [COLUMN] )
WHERE 1=2

In der vorherigen Version konnten die Metadaten ohne Fehler gefetched werden.

Die Implementierung im Servercode:

Code: Select all
private final static String ARTIKEL = "("
                  + "select fk_user_name, "
                  + "min(anlage_datum) AS DATUM "
                  + "from artikel "
                  + "where fk_Status='aktiv' "
                  + "group by fk_user_name "
                  + "order by 2 desc "
                  + ")";
   
public DBStorage getArtikel() throws Exception
   {
      final String artikel = "ARTIKEL";
   
      DBStorage dbsArtikel = (DBStorage)get(artikel);
      if (dbsArtikel == null)
      {
         dbsArtikel = new DBStorage();
         dbsArtikel.setWritebackTable(ARTIKEL);
         dbsArtikel.setDBAccess(getDBAccess());
         dbsArtikel.open();

         put(artikel, dbsArtikel);
      }
      return dbsArtikel;
   }


Kann mir jemand helfen warum dieser Fehler nach dem Update auf die neue Version geschieht und wie man diesen beheben kann?

Gruß Mark

Re: Fehler beim fetchen der Metadaten

PostPosted: Mon Sep 10, 2018 1:42 pm
by Support@SIB
Der Beispielcode ist nicht konsistent, sprich ARTIKEL ist kein String. Aber das wird wohl beim Aufbereiten für diesen Post passiert sein?

Also JVx liegt aktuell in Version 2.8 vor, aber 5.1.8 gibt es nicht.
Wir nehmen an das VisionX 5.1.8 gemeint ist.

Das Select Statement dürfte auch angepasst worden sein im Post?
Was passiert wenn Sie das fehlerhafte Statement, mit den Parametern - aus der Fehlermeldung, manuell ausführen? mit zB sqlplus (im Falle von Oracle)?

Im Fehlerfall bitte ein Ticket erstellen.

Aber auf jeden Fall, bitte die JVx Version (alt) und JVx Version (Neu) posten bzw. von welchem VisionX zu welchem VisionX aktualisiert wurde.

Re: Fehler beim fetchen der Metadaten

PostPosted: Mon Sep 10, 2018 2:01 pm
by hansemar
Ja, die Fehler haben sich in der Anpassung des Codes reingeschlichen. Die SQL-Statements gegen die Datenbank liefern auch die angefragten Daten, wenn man aus der Abfrage „1=2“ weg lässt.

Hier die Manifest der JVX Version in der es beim Öffnen des Workscreens zu keinen Fehler gekommen:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_31-b04 (Sun Microsystems Inc.)
Implementation-Title: JVx 2.7 beta (nightly)
Implementation-Version: b1 16.11.2017 05:23:26 (nightly)
Implementation-Vendor: SIB Visions GmbH

Unter folgender Version ist es der Fehler beim Metadaten Fetch aufgetreten:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.5
Created-By: 1.6.0_24-b07 (Sun Microsystems Inc.)
Implementation-Title: JVx 2.8 (beta)
Implementation-Version: b41 17.05.2018 14:30:38
Implementation-Vendor: SIB Visions GmbH

Weitere Information dazu, beim zweiten Versuch den Workscreen zu öffnen wird kein Fehler mehr von der Applikation geworfen. Dieser tritt nur beim initialen öffnen des Workscreens auf.

Gruß Mark

Re: Fehler beim fetchen der Metadaten

PostPosted: Mon Sep 10, 2018 2:26 pm
by hansemar
Hier ein ausführlicher Auszug des Stacktrace:

java.lang.SecurityException: Error opening work-screen 'de.fooBar.apps.l2kx.screens.DigitalWEKoepfeWorkScreen'
at com.sibvisions.apps.projx.ProjX.loadWorkScreen(ProjX.java:1172)
at com.sibvisions.apps.projx.ProjX.openWorkScreen(ProjX.java:2019)
at de.fooBar.apps.l2kx.fooBarERPApplication.openWorkScreen(fooBarERPApplication.java:134)
at com.sibvisions.apps.projx.ProjX.openWorkScreen(ProjX.java:750)
at javax.rad.application.genui.RemoteWorkScreenApplication.openWorkScreen(RemoteWorkScreenApplication.java:82)
at de.fooBar.apps.l2kx.screens.TreeMenuWorkScreen.doOpenWorkscreen(TreeMenuWorkScreen.java:140)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at javax.rad.util.EventHandler$ListenerHandler.dispatchEvent(EventHandler.java:1016)
at javax.rad.util.EventHandler.dispatchEvent(EventHandler.java:606)
at javax.rad.util.RuntimeEventHandler.dispatchEvent(RuntimeEventHandler.java:73)
at com.sibvisions.rad.ui.awt.impl.AwtComponent.mousePressed(AwtComponent.java:996)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)
at java.awt.Component.processMouseEvent(Component.java:6530)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4522)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.sibvisions.apps.projx.ProjX.loadWorkScreen(ProjX.java:4387)
at com.sibvisions.apps.projx.ProjX.loadWorkScreen(ProjX.java:1167)
... 45 more
Caused by: javax.rad.model.ModelException: RowDefintion can't init with meta data from storage!
at com.sibvisions.rad.model.remote.RemoteDataBook.open(RemoteDataBook.java:228)
at de.fooBar.apps.l2kx.screens.DigitalWEKoepfeWorkScreen.initializeModel(DigitalWEKoepfeWorkScreen.java:159)
at de.fooBar.apps.l2kx.screens.DigitalWEKoepfeWorkScreen.<init>(DigitalWEKoepfeWorkScreen.java:144)
... 51 more
Caused by: javax.rad.persist.DataSourceException: Init ServerMetaData failed!
at com.sibvisions.rad.model.remote.RemoteDataBook.initServerMetaData(RemoteDataBook.java:956)
at com.sibvisions.rad.model.remote.RemoteDataBook.open(RemoteDataBook.java:224)
... 53 more
Caused by: java.lang.RuntimeException: Meta data couldn't load from database!

Re: Fehler beim fetchen der Metadaten

PostPosted: Mon Sep 10, 2018 2:37 pm
by Support@SIB
Bitte das Log für DBAccess einschalten. Dann wird das Statement angedruckt im logfile bzw. in der Konsole, je nachdem wie Sie die Applikation starten.

Das sollte weitere Hinweise liefern.

Beim 2. Mal Öffnen kommt kein Fehler? Hat die Tabelle dann alle gewünschten Spalten?

Re: Fehler beim fetchen der Metadaten

PostPosted: Mon Sep 10, 2018 2:51 pm
by hansemar
Hier das Log, wenn DBAccess auf Debug geschaltet ist:

com.sibvisions.rad.persist.jdbc.DBAccess getAndStoreMetaDataIntern (Line: 5253)
ColumnMetaData(SELECT *
FROM ([SELECT_ABFRAGE])

WHERE 1=2 ) in 1ms
10.09.2018 14:39:21 [ FINE ] com.sibvisions.rad.persist.jdbc.DBAccess getForeignKeys (Line: 1255)
getConstraints(([SELECT_ABFRAGE])) in 10ms
10.09.2018 14:39:21 [ FINE ] com.sibvisions.rad.persist.jdbc.DBAccess getDefaultValues (Line: 5857)
getDefaultValuesIntern(([SELECT_ABFRAGE])) in 2ms
10.09.2018 14:39:21 [ SEVERE ] de.fooBar.apps.l2kx.LibriERPApplication openWorkScreen (Line: 134)
java.lang.SecurityException: Error opening work-screen 'de.fooBar.apps.l2kx.screens.DigitalWEKoepfeWorkScreen'

Die genaue Select-Abfrage habe ich rausgenommen. Diese hatte ich aber nochmal auf der Datenbank abgesetzt und keinen Fehler erhalten und auch alle Spalten sind enthalten.

Wenn ich nach dem ersten öffnen und der Exception das Log der Konsole lösche und den Workscreen erneut öffne sehe ich einen erfolgreichen Fetch-Aufruf gegen Datenbank.
Wie vorher geschrieben, mit einer älteren JVX-Version gab es keinen Fehler. Dieser tritt erst nach dem Update auf, daher gehe ich auch nicht von einen Fehler in der Abfrage aus.

Re: Fehler beim fetchen der Metadaten

PostPosted: Mon Sep 10, 2018 3:44 pm
by hansemar
Wir haben eine Vermutung. Beim Fetchen der Metadaten, wobei es zu diesen Fehler kommt, wird der Schema Owner davor geschrieben.

SELECT *
FROM [SCHEMA_OWNER].(SELECT [COLUMNS] FROM [TABEL] WHERE [WHERE_CLAUSE] GROUP BY [COLUMN] )
WHERE 1=2

Bei der Abfrage des kommpletten Select kommt es auch auf der Datenbank zu einen Fehler, dass die Tabelle nicht existiert.

Zwei Fragen ergeben sich aber daraus.
1. Warum tritt der Fehler nach dem Update der JVX-Version auf
2. Warum kann man beim zweiten mal den Workscreen öffnen

Re: Fehler beim fetchen der Metadaten

PostPosted: Tue Sep 11, 2018 12:00 pm
by Support@SIB
Um Ihnen helfen zu können benötigen wir detailiertere Informationen. Der StackTrace zB enthält keine Info vom Server Aufruf, sprich der DBStorage/DBAccess. Wurde dieser Teil entfernt?

Das Statement zu verstecken macht es für uns auch nicht einfacher. Wir können nur raten und das bringt keinen Erfolg. Mit ähnlichen Statements funktioniert das nämlich.

Natürlich kann es sein das ein Statement mit älteren JVx Versionen anders funktioniert als mit neueren, wenn zB ein Fehler in der älteren war und ein workaround gefunden wurde, dann kann es durchaus sein das dieser in neueren JVx Versionen nicht funktioniert. Aber klar kann es sein das sich ein Fehler eingeschlichen hat oder ein Feature das eine andere Verwendung voraussetzt.

Wie gesagt, es wäre sehr hilfreich, wenn wir einen Testfall zusammenbekämen der den Fehler reproduzierbar macht. Wir suchen ansonsten die Nadel im Heuhaufen. Vor allem der SCHEMA_OWNER wundert uns.

An dieser Stelle wäre es nötig, ein JVx Ticket zu erstellen und das Problem an die JVx Entwickler durchzureichen.

Re: Fehler beim fetchen der Metadaten

PostPosted: Tue Sep 11, 2018 12:28 pm
by hansemar
Ich habe den Fall unter folgender Ticketnummer angelegt: FS#1947

Re: Fehler beim fetchen der Metadaten

PostPosted: Tue Sep 11, 2018 3:45 pm
by Support@SIB
Das Ticketing wird Englisch gehalten. Bitte dies zu berücksichtigen.

Probieren Sie bitte mal, die Leerzeichen am Ende des Statements zu entfernen. Wir vermuten das es damit zusammenhängen könnte.

Weiters verwenden Sie Konstante in Ihren LCO für put/get. Diese entsprechen aber nicht dem Standard bzw. Methoden Namen. Dadurch wird die Objektsuche etwas gebremst. Hier wäre es ratsam den Methodennamen zu verwenden, z.B.

getDBAccess() -> "dBAccess"

Re: Fehler beim fetchen der Metadaten

PostPosted: Tue Sep 11, 2018 5:04 pm
by hansemar
Wenn man den Zeilen Umbruch und das Leerzeichen am Ende des individuellen Selects entfernt, dann kann man den Workscreen ohne Fehler öffnen.

Warum ist der Fehler mit der neuen JVX-Version jetzt aufgetreten und die vorherige hatte keinen Fehler damit?

Re: Fehler beim fetchen der Metadaten

PostPosted: Wed Sep 12, 2018 12:09 am
by Development@SIB
Das aktuelle JVx hat eine Optimierung hinsichtlich der Statements die beim open einer Storage abgesetzt werden. Wenn ein einzelnes Statement mehrmals abgesetzt wurde, so wird jetzt das Statement nur 1x abgesetzt. Das wirkte sich natürlich positiv auf die Performance aus, aber durch einen Fehler beim Statement Vergleich kam es zu ihrem Problem. Da reichte schon ein Whitespace am Ende.

Das Problem mit den Workscreen, der beim 2. Mal Öffnen funktionierte, lag daran das ein Cache Key nicht zurückgesetzt wird, im Fehlerfall - also ein Bug.

Also im Prinzip waren es Verbesserungen die noch nicht perfekt funktionieren und dann zu Problemen führen.