Can you use StackWalker with StackWalker.Option::SHOW_HIDDEN_FRAMES to
programmatically find the appropriate frame as an interim solution?
ClassOption.SHOW_IN_STACKTRACE might be one possibility. IMO we should
take the time and consider together with JDK-8212620 what other options
could be explored before we provide an easy simple fix just for this
specific case.
Mandy
On 9/7/20 11:39 AM, Uwe Schindler wrote:
Thanks Mandy.
In my opinion for the hidden classes an additional enum constant in
ClassOption would be fine: ClassOption.SHOW_IN_STACKTRACE (or similar).
That would be simplest to implement and allows also for the caller to
enable it like strong references or nestmate features. So it's
consistent with the other API parts.
The annotations are good for fine granular hiding (like complex
classes recursively calling methods). Or for frameworks like Spring.
Should I add a comment to this issue?
We are now doing some testing in Lucene's expressions module (it's
about scoring formulas in query execution). Here's the draft PR:
https://github.com/apache/lucene-solr/pull/1837/files
<https://urldefense.com/v3/__https://github.com/apache/lucene-solr/pull/1837/files__;!!GqivPVa7Brio!IT0c8RG8ghG1Kth5nLUmXQ-q5w0GVPR_ejFbCZB2aKzR2LJ3hXMUVgyqGK4YPZRufg$>
We use the new features in Lucene when the static initializer detects
defineHiddenClass using a publicLookup.
Currently a test fails, because of missing debug information in stack
traces. The executed scoring formula is part of the filename attribute
in class file. As this is missing, test fails. 🙃
Uwe
Am September 7, 2020 4:44:18 PM UTC schrieb Mandy Chung
<mandy.ch...@oracle.com>:
Hi Uwe,
It's a future enhancement to allow a class/method to request
filtering from stack trace:
https://bugs.openjdk.java.net/browse/JDK-8212620
This RFE should also take hidden classes into account.
Mandy
On 9/5/20 4:55 AM, Uwe Schindler wrote:
Hi,
I am doing a mockup for dynamically compiled scripts in Apache Lucene (later
also painless scripting in elastcsearch), where I tried to use
Lookup#defineHiddenClass (with default parameters, so weak and no nestmates
- but: for painless scripts of Elasticsearch, nestmates will be great). It
all looks great, as sometimes for every query a new class is generated.
The current approach (Java 8, Java 11) uses a Classloader per script, which
is mostly OK, but hidden classes would be better, especially under high load
with many new classes. The problem I see is: The hidden class and their
methods are also hidden from stack traces, so people neither get the script
source code reference, nor they get the method, which was called at all.
My question is: is it possible to mark such a hidden class in byte code or
by a flag to defineHiddenClass() so it is "unhidden"? - I know you can do
this by a command line option, but that's for developers and debugging only.
In some cases, this is really wanted (like for scripting languages), but
code still wants to use the better class unloading. If this is not possible,
how about extending the Lookup.ClassOption enum (last parameter of
defineHiddenClass), to also pass a flag to show them in stack traces?
Uwe
-----
Uwe Schindler
uschind...@apache.org
ASF Member, Apache Lucene PMC / Committer
Bremen, Germany
https://lucene.apache.org/