ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/tomcat/util/compat/Jre21Compat.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/tomcat/util/compat/Jre21Compat.java
Status
scanned
Type
file
Name
Jre21Compat.java
Extension
.java
Programming language
Java
Mime type
text/plain
File type
ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
4708 (4.6 KB)
MD5
37b839367e8d06edce44c9919df0539a
SHA1
89c4aaf99aa4562de7d2ad50c26f067f2f4a31b9
SHA256
1c040c3d44d08c04f6ed705bcd015add51dcb3566be27c9aba007f73bfca98cc
SHA512

      
    
SHA1_git
e644325126573758a6e82d06c7ef018f31a4e4e4
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
Jre21Compat.java | 4.6 KB |

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tomcat.util.compat; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.concurrent.Callable; import java.util.concurrent.CompletionException; import javax.security.auth.Subject; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.res.StringManager; public class Jre21Compat extends Jre20Compat { private static final Log log = LogFactory.getLog(Jre21Compat.class); private static final StringManager sm = StringManager.getManager(Jre21Compat.class); private static final boolean supported; private static final Method nameMethod; private static final Method startMethod; private static final Method ofVirtualMethod; private static final Method callAsMethod; static { Class<?> c1 = null; Method m1 = null; Method m2 = null; Method m3 = null; Method m4 = null; try { // Note: Virtual threads is the main new feature in Java 21, but it was previously // present as a preview. As a result, it is more accurate to test for another // new class c1 = Class.forName("java.util.SequencedCollection"); Class<?> c2 = Class.forName("java.lang.Thread$Builder"); m1 = c2.getMethod("name", String.class, long.class); m2 = c2.getMethod("start", Runnable.class); m3 = Thread.class.getMethod("ofVirtual", (Class<?>[]) null); m4 = Subject.class.getMethod("callAs", Subject.class, Callable.class); } catch (ClassNotFoundException e) { // Must be pre-Java 21 log.debug(sm.getString("jre21Compat.javaPre21"), e); } catch (ReflectiveOperationException e) { // Should never happen log.error(sm.getString("jre21Compat.unexpected"), e); } supported = (c1 != null); nameMethod = m1; startMethod = m2; ofVirtualMethod = m3; callAsMethod = m4; } static boolean isSupported() { return supported; } @Override public Object createVirtualThreadBuilder(String name) { try { Object threadBuilder = ofVirtualMethod.invoke(null, (Object[]) null); nameMethod.invoke(threadBuilder, name, Long.valueOf(0)); return threadBuilder; } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { throw new UnsupportedOperationException(e); } } @Override public void threadBuilderStart(Object threadBuilder, Runnable command) { try { startMethod.invoke(threadBuilder, command); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { throw new UnsupportedOperationException(e); } } @SuppressWarnings("unchecked") @Override public <T> T callAs(Subject subject, Callable<T> action) throws CompletionException { try { return (T) callAsMethod.invoke(null, subject, action); } catch (IllegalAccessException e) { throw new CompletionException(e); } catch (InvocationTargetException e) { Throwable cause = e.getCause(); if (cause instanceof CompletionException) { throw (CompletionException) cause; } throw new CompletionException(e); } } @Override public boolean isCanonCachesDisabled() { // The cache has been removed in Java 21 return true; } @Override public boolean disableCanonCaches() { // The cache has been removed in Java 21 return true; } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
25.65
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-4bde3f57-78aa-4201-96bf-531cba09e7de apache-2.0 Apache-2.0
URL Start line End line
http://www.apache.org/licenses/LICENSE-2.0 9 9