Hi Thomas
Journal Explorer is such a great tool, but after updating my installation to 3.2.2.r I receive a message box telling me java.lang.nullPointerException.
I fill in the dialog box Open journal, then press Ok button. Boom, i get the java.lang.nullPointerException.
Any suggestions about what to do?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I could not yet reproduce the error. I assumed:
1. You want to open an output file created with DSPJRN, right?
2. You get the NullPointerException for all your output files, right?
Can you send me a save file with an output file that creates the error?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Although I prefered getting an example file to debug then problem here, you may consider to install 3.2.3.b002. You can download it from my private cloud server following this link: https://oc-tools400.dyndns.org/nextcloud/index.php/s/2m2r8eY3kFgBh88
The link will expire Saturday.
Nothing important has been changed in 3.2.3.b002 but. I just added additinal log statements.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
*** Error in method JournalExplorerView.createJournalTab(3) ***
java.lang.NullPointerException
at biz.isphere.journalexplorer.core.model.dao.AbstractTypeDAO.deleteDatabaseOverwrite(AbstractTypeDAO.java:149)
at biz.isphere.journalexplorer.core.model.dao.AbstractTypeDAO.load(AbstractTypeDAO.java:95)
at biz.isphere.journalexplorer.core.model.dao.OutputFileDAO.getJournalData(OutputFileDAO.java:69)
at biz.isphere.journalexplorer.core.ui.widgets.JournalEntriesViewerForOutputFiles$1.run(JournalEntriesViewerForOutputFiles.java:134)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at biz.isphere.journalexplorer.core.ui.widgets.JournalEntriesViewerForOutputFiles.openJournal(JournalEntriesViewerForOutputFiles.java:145)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView.performLoadJournalEntries(JournalExplorerView.java:276)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView.createJournalTab(JournalExplorerView.java:236)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView.access$4(JournalExplorerView.java:211)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView$2.postRunAction(JournalExplorerView.java:141)
at biz.isphere.journalexplorer.core.ui.actions.OpenJournalOutfileAction.run(OpenJournalOutfileAction.java:45)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:519)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511)
at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:462)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:677)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:587)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Is it possible that your user profile has "Limit capabilities" (LMTCPB) set to *YES? That may explain, why you are not allowed to execute the DLTOVR command, although I could not reproduce the error with such a user profile.
Please try to run the following commands on a command line and let me know the result:
Thank you for the data provided. I spotted the NullPointerException and fixed it. But I could not yet figure out the actual problem, which is that a file override (DLTOVR) does not work for you. Actually I needed the job log of the server job that serves the connection.
Do you know how to get it? If not, I can guide you to it, tomorrow.
For now you can install v3.2.3.b003, which fixes the NullPointerException. https://oc-tools400.dyndns.org/nextcloud/index.php/s/1JlbyD0IsEs8BQl
The link will expire Saturday.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I added a save file that contains library DBGUTILS, which contains command WHOAMI. WHOAMI displays the TCP/IP address of the local PC that runs the 5250 emulation. The IP address is required for NETSTAT, option 3 to find the server jobs used by iSphere. The list of connections that is displayed with NETSTAT, option 3, can be filtered with CmdKey F15 and the IP address pasted into field "Remote internet address range, Lower value".
Then the "as-data" job with the lowest "Idle Time" should be the one used for reading the data from the output file. The job log of that job should help to find the problem.
Hi Thomas
I found out that for some reason I do not understand, the two commands
CALL QSYS.QCMDEXC('OVRDBF FILE(WOPHDRS14C) TOFILE(XUPL04SEL/WOPHDRS14C) MBR(FIRST) OVRSCOPE(JOB)', 0000000079,00000)
CALL QSYS.QCMDEXC('DLTOVR FILE(WOPHDRS14C) LVL(*JOB)', 0000000033,00000)
both give an sqlcode of -443 and the message that the command is too long ( CPD0005 )
I tried to run the statements interactively and I received the same result.
My suggestion is that you use QSYS2.QCMDEXC. The command work on my machine. The problem however is that it will only work on systems that are running 7.1 or higher.
(I tried to run other commands with QSYS.QCMDEXEC and they all fail, even though I counted the length of the string again and again. I really do not understand why the system I am running on does not accept QSYS.QCMDEXC)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
How did you figure that out? Did you debug the Java code or could you get the information from the job log? Anyway: GOOD JOB!
Unfortunately I cannot switch to QSYS2.QCMDEXC, because I do not want to disconnect all the users that are still on 6.1.
Can you please try to run the commands like this:
CALL QSYS.QCMDEXC('OVRDBF FILE(WOPHDRS14C) TOFILE(RADDATZ/WOPHDRS14C) MBR(FIRST) OVRSCOPE(JOB)', CAST(77 AS DECIMAL(15,5)));
CALL QSYS.QCMDEXC('DLTOVR FILE(WOPHDRS14C) LVL(*JOB)', CAST(33 AS DECIMAL(15, 5)));
I am just curious and I do not yet have another idea.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Thomas
I used DBMON to see what sql statements were used.
Below is the two statements copy pasted directly from the database monitor statements.
~~~
CALL QSYS.QCMDEXC('OVRDBF FILE(WOPHDRS14C) TOFILE(XUPL04SEL/WOPHDRS14C) MBR(FIRST) OVRSCOPE(JOB)', 0000000079,00000)
CALL QSYS.QCMDEXC('DLTOVR FILE(WOPHDRS14C) LVL(*JOB)', 0000000033,00000) ~~~
My colleague spotted the problem.
If you look at the length parameter, you see that the statement say 0000000079 comma 00000 . If this is changed to 0000000079 period 00000 then the statement runs without problem.
Br
Sune
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
That is great news. Congratulations to your colleague.
I do not know/understand why the period, that is used by iSphere gets translated to a command on your system. Could you already test the statements using CAST?
I attached some pictures from the Eclipse debugger to show that I use a dot as the decimal point and I attached a txt document with the CALL statements. That should make it easy for you to run the statements with the CAST.
OK, but that is not the final solution. As mentioned before, I changed the OVRDBF and DLTOVR commands to be produced with a CAST expression in order to make it universal. Therefore it was great if you got give beta 4 a try.
I confirm, that DecimalFormat uses a comma, when started with locale "de". I did not expect that or had that in mind and first a was astonished. But on the other hand I can understand that it works like that. So using CAST should be the better option.
Last edit: Thomas Raddatz 2018-02-16
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi Thomas
Journal Explorer is such a great tool, but after updating my installation to 3.2.2.r I receive a message box telling me java.lang.nullPointerException.
I fill in the dialog box Open journal, then press Ok button. Boom, i get the java.lang.nullPointerException.
Any suggestions about what to do?
Sune,
Please open the Eclipse "Error Log" view and check whether the error has been logged there (Pic_1).
If the rror has been logged, please send the stack trace to me (Pic_2). Please send it as plain text.
Thomas.
I have attached a screen capture, but nothing is logged in the "Error Logged".
Br
Sune
I could not yet reproduce the error. I assumed:
1. You want to open an output file created with DSPJRN, right?
2. You get the NullPointerException for all your output files, right?
Can you send me a save file with an output file that creates the error?
Although I prefered getting an example file to debug then problem here, you may consider to install 3.2.3.b002. You can download it from my private cloud server following this link:
https://oc-tools400.dyndns.org/nextcloud/index.php/s/2m2r8eY3kFgBh88
The link will expire Saturday.
Nothing important has been changed in 3.2.3.b002 but. I just added additinal log statements.
Yes, I will send an output file. I have also, in another mail send you the info i get in the error log.
Save file attached
biz.isphere.core
*** Error in method JournalExplorerView.createJournalTab(3) ***
java.lang.NullPointerException
at biz.isphere.journalexplorer.core.model.dao.AbstractTypeDAO.deleteDatabaseOverwrite(AbstractTypeDAO.java:149)
at biz.isphere.journalexplorer.core.model.dao.AbstractTypeDAO.load(AbstractTypeDAO.java:95)
at biz.isphere.journalexplorer.core.model.dao.OutputFileDAO.getJournalData(OutputFileDAO.java:69)
at biz.isphere.journalexplorer.core.ui.widgets.JournalEntriesViewerForOutputFiles$1.run(JournalEntriesViewerForOutputFiles.java:134)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at biz.isphere.journalexplorer.core.ui.widgets.JournalEntriesViewerForOutputFiles.openJournal(JournalEntriesViewerForOutputFiles.java:145)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView.performLoadJournalEntries(JournalExplorerView.java:276)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView.createJournalTab(JournalExplorerView.java:236)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView.access$4(JournalExplorerView.java:211)
at biz.isphere.journalexplorer.core.ui.views.JournalExplorerView$2.postRunAction(JournalExplorerView.java:141)
at biz.isphere.journalexplorer.core.ui.actions.OpenJournalOutfileAction.run(OpenJournalOutfileAction.java:45)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:519)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:511)
at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:462)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4353)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3761)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:677)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:587)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
eclipse.buildId=unknown
java.fullversion=JRE 1.8.0 IBM J9 2.8 Windows 8.1 amd64-64 Compressed References 20170722_357405 (JIT enabled, AOT enabled)
J9VM - R28_20170722_0201_B357405
JIT - tr.r14.java_20170722_357405
GC - R28_20170722_0201_B357405_CMPRSS
J9CL - 20170722_357405
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=da_DK
Framework arguments: -eclipse.keyring C:\secure_storage com.ibm.rational.developer.ibmi.product.ide
Command-line arguments: -os win32 -ws win32 -arch x86_64 -eclipse.keyring C:\secure_storage -console po-product com.ibm.rational.developer.ibmi.product.ide
Is it possible that your user profile has "Limit capabilities" (LMTCPB) set to *YES? That may explain, why you are not allowed to execute the DLTOVR command, although I could not reproduce the error with such a user profile.
Please try to run the following commands on a command line and let me know the result:
OVRDBF FILE(WOPHDRS14C) TOFILE(RADDATZ/WOPHDRS14C) MBR(*FIRST) OVRSCOPE(*JOB)
DLTOVR FILE(WOPHDRS14C) LVL(*JOB)
Of course you need to change the library name.
iSphere has to override the physical file to read the records from a given member with JDBC.
Thank you for the data provided. I spotted the NullPointerException and fixed it. But I could not yet figure out the actual problem, which is that a file override (DLTOVR) does not work for you. Actually I needed the job log of the server job that serves the connection.
Do you know how to get it? If not, I can guide you to it, tomorrow.
For now you can install v3.2.3.b003, which fixes the NullPointerException.
https://oc-tools400.dyndns.org/nextcloud/index.php/s/1JlbyD0IsEs8BQl
The link will expire Saturday.
I added a save file that contains library DBGUTILS, which contains command WHOAMI. WHOAMI displays the TCP/IP address of the local PC that runs the 5250 emulation. The IP address is required for NETSTAT, option 3 to find the server jobs used by iSphere. The list of connections that is displayed with NETSTAT, option 3, can be filtered with CmdKey F15 and the IP address pasted into field "Remote internet address range, Lower value".
Then the "as-data" job with the lowest "Idle Time" should be the one used for reading the data from the output file. The job log of that job should help to find the problem.
Hi Thomas
I found out that for some reason I do not understand, the two commands
CALL QSYS.QCMDEXC('OVRDBF FILE(WOPHDRS14C) TOFILE(XUPL04SEL/WOPHDRS14C) MBR(FIRST) OVRSCOPE(JOB)', 0000000079,00000)
CALL QSYS.QCMDEXC('DLTOVR FILE(WOPHDRS14C) LVL(*JOB)', 0000000033,00000)
both give an sqlcode of -443 and the message that the command is too long ( CPD0005 )
I tried to run the statements interactively and I received the same result.
My suggestion is that you use QSYS2.QCMDEXC. The command work on my machine. The problem however is that it will only work on systems that are running 7.1 or higher.
(I tried to run other commands with QSYS.QCMDEXEC and they all fail, even though I counted the length of the string again and again. I really do not understand why the system I am running on does not accept QSYS.QCMDEXC)
How did you figure that out? Did you debug the Java code or could you get the information from the job log? Anyway: GOOD JOB!
Unfortunately I cannot switch to QSYS2.QCMDEXC, because I do not want to disconnect all the users that are still on 6.1.
Can you please try to run the commands like this:
CALL QSYS.QCMDEXC('OVRDBF FILE(WOPHDRS14C) TOFILE(RADDATZ/WOPHDRS14C) MBR(FIRST) OVRSCOPE(JOB)', CAST(77 AS DECIMAL(15,5)));
CALL QSYS.QCMDEXC('DLTOVR FILE(WOPHDRS14C) LVL(*JOB)', CAST(33 AS DECIMAL(15, 5)));
I am just curious and I do not yet have another idea.
Hi Thomas
I used DBMON to see what sql statements were used.
Below is the two statements copy pasted directly from the database monitor statements.
~~~
CALL QSYS.QCMDEXC('OVRDBF FILE(WOPHDRS14C) TOFILE(XUPL04SEL/WOPHDRS14C) MBR(FIRST) OVRSCOPE(JOB)', 0000000079,00000)
CALL QSYS.QCMDEXC('DLTOVR FILE(WOPHDRS14C) LVL(*JOB)', 0000000033,00000) ~~~
My colleague spotted the problem.
If you look at the length parameter, you see that the statement say 0000000079 comma 00000 . If this is changed to 0000000079 period 00000 then the statement runs without problem.
Br
Sune
The MBR(FIRST) should of course be MBR( Asterisk FIRST) but the editor is removing the Asterisk.
You need to escape the asterisk with a blackslash to preserve it. Otherweise the asterisk is treated as a markup.
That is great news. Congratulations to your colleague.
I do not know/understand why the period, that is used by iSphere gets translated to a command on your system. Could you already test the statements using CAST?
I attached some pictures from the Eclipse debugger to show that I use a dot as the decimal point and I attached a txt document with the CALL statements. That should make it easy for you to run the statements with the CAST.
Hi Thomas
My guess is that decimalFormatter uses the locale of my PC to format the the string with a comma.
Br
Sune
I do not think so, because decimalFormatter uses the following pattern, which contains a dot:
But what about the SQL CALL statements that use the SQL CAST expression to call QCMDEXC? Does that work on your system?
Using CAST will work.
Sune
I uploaded v3.2.3.b004, which uses the CASE version, now. Feel free to give it a try. You can download it from here:
https://oc-tools400.dyndns.org/nextcloud/index.php/s/qKeNeyiaUXXxrgD
The link will expire on Tuesday.
Hi Thomas
I just added -vmargs -Duser.language=en -Duser.country=US to my eclipse launch configuration.
Now I can load a file into the Journal Explorer without problem.
OK, but that is not the final solution. As mentioned before, I changed the OVRDBF and DLTOVR commands to be produced with a CAST expression in order to make it universal. Therefore it was great if you got give beta 4 a try.
I confirm, that DecimalFormat uses a comma, when started with locale "de". I did not expect that or had that in mind and first a was astonished. But on the other hand I can understand that it works like that. So using CAST should be the better option.
Last edit: Thomas Raddatz 2018-02-16
I can confirm that beta 4 works.
Br
Sune
Thank you for the update. I released v3.2.3.r this weekend. It is identical with beta 4.
Thank you for your help. It was a pleasure working with you.