Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[camel-main] jt400 - latest upgraded jt400 dependency fails in the native mode #6889

Open
JiriOndrusek opened this issue Jan 6, 2025 · 0 comments

Comments

@JiriOndrusek
Copy link
Contributor

Bug description

Jt400 client is tightly coupled with GUI dialogues, which does not work in the native. In previous version (20.0.7), the limitation was solved by a couple of substitutions. The newest version (20.0.8) brings several small changes, which add more gui actions into the signon process. After several hours spent on the preparation of new substitutions I start to think, that it is not possible to substitute code in a way that signon works on the native. (mostly because the class ToolboxSignonHandler is final and therefore can not be modified.

Here is one of many errors, which happens (obtained on jt400-mocked tests):

Error: Detected a started Thread in the image heap. Thread name: Java2D Disposer. Threads running in the image generator are no longer running at image runtime. If these objects should not be stored in the image heap, you can use 

    '--trace-object-instantiation=java.lang.Thread'

to find classes that instantiate these objects. Once you found such a class, you can mark it explicitly for run time initialization with 

    '--initialize-at-run-time=<culprit>'

to prevent the instantiation of the object.
The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Detailed message:
Trace: Object was reached by
  reading field java.util.concurrent.locks.AbstractQueuedSynchronizer$Node.waiter of constant 
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode@619472ea: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode@619472ea
  reading field java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.firstWaiter of constant 
    java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3011233f: java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@3011233f
  reading field java.lang.ref.ReferenceQueue.notEmpty of constant 
    java.lang.ref.ReferenceQueue@36b1f89e: java.lang.ref.ReferenceQueue@36b1f89e
  scanning root java.lang.ref.ReferenceQueue@36b1f89e: java.lang.ref.ReferenceQueue@36b1f89e embedded in 
    sun.java2d.Disposer.add(Disposer.java:135)
  parsing method sun.java2d.Disposer.add(Disposer.java:130) reachable via the parsing context
    at sun.java2d.Disposer.addRecord(Disposer.java:118)
    at java.awt.Window.init(Window.java:534)
    at java.awt.Window.<init>(Window.java:453)
    at java.awt.Window.<init>(Window.java:608)
    at java.awt.Dialog.<init>(Dialog.java:674)
    at com.ibm.as400.access.PasswordDialog.<init>(PasswordDialog.java:73)
    at com.ibm.as400.access.ToolboxSignonHandler.setupPasswordDialog(ToolboxSignonHandler.java:596)
    at com.ibm.as400.access.ToolboxSignonHandler.handleSignon(ToolboxSignonHandler.java:515)
    at com.ibm.as400.access.ToolboxSignonHandler.connectionInitiated(ToolboxSignonHandler.java:52)
    at com.ibm.as400.access.AS400.promptSignon(AS400.java:3871)
    at com.ibm.as400.access.AS400.signon(AS400.java:5436)
    at com.ibm.as400.access.AS400.getCcsid(AS400.java:2192)
    ...

I added a simple workaround when the signon is disabled in the native - until the proper fix is prepared.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant