14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.jimage;
27
28 import java.io.IOException;
29 import java.io.UncheckedIOException;
30 import java.nio.file.Path;
31 import java.nio.file.Paths;
32 import java.util.concurrent.ConcurrentHashMap;
33 import java.util.Map;
34
35 /**
36 * Factory to get ImageReader
37 *
38 * @implNote This class needs to maintain JDK 8 source compatibility.
39 *
40 * It is used internally in the JDK to implement jimage/jrtfs access,
41 * but also compiled and delivered as part of the jrtfs.jar to support access
42 * to the jimage file provided by the shipped JDK by tools running on JDK 8.
43 */
44 public class ImageReaderFactory {
45 private ImageReaderFactory() {}
46
47 private static final String JAVA_HOME = System.getProperty("java.home");
48 private static final Path BOOT_MODULES_JIMAGE =
49 Paths.get(JAVA_HOME, "lib", "modules");
50
51 private static final Map<Path, ImageReader> readers = new ConcurrentHashMap<>();
52
53 /**
54 * Returns an {@code ImageReader} to read from the given image file
55 */
56 public static ImageReader get(Path jimage) throws IOException {
57 ImageReader reader = readers.get(jimage);
58 if (reader != null) {
59 return reader;
60 }
61 reader = ImageReader.open(jimage);
62 // potential race with other threads opening the same URL
63 ImageReader r = readers.putIfAbsent(jimage, reader);
64 if (r == null) {
65 return reader;
66 } else {
67 reader.close();
68 return r;
69 }
70 }
71
72 /**
73 * Returns the {@code ImageReader} to read the image file in this
74 * run-time image.
75 *
76 * @throws UncheckedIOException if an I/O error occurs
|
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package jdk.internal.jimage;
27
28 import java.io.IOException;
29 import java.io.UncheckedIOException;
30 import java.nio.file.Path;
31 import java.nio.file.Paths;
32 import java.util.concurrent.ConcurrentHashMap;
33 import java.util.Map;
34 import java.util.Objects;
35
36 /**
37 * Factory to get ImageReader
38 *
39 * @implNote This class needs to maintain JDK 8 source compatibility.
40 *
41 * It is used internally in the JDK to implement jimage/jrtfs access,
42 * but also compiled and delivered as part of the jrtfs.jar to support access
43 * to the jimage file provided by the shipped JDK by tools running on JDK 8.
44 */
45 public class ImageReaderFactory {
46 private ImageReaderFactory() {}
47
48 private static final String JAVA_HOME = System.getProperty("java.home");
49 private static final Path BOOT_MODULES_JIMAGE =
50 Paths.get(JAVA_HOME, "lib", "modules");
51
52 private static final Map<Path, ImageReader> readers = new ConcurrentHashMap<>();
53
54 /**
55 * Returns an {@code ImageReader} to read from the given image file
56 */
57 public static ImageReader get(Path jimage) throws IOException {
58 Objects.requireNonNull(jimage);
59 ImageReader reader = readers.get(jimage);
60 if (reader != null) {
61 return reader;
62 }
63 reader = ImageReader.open(jimage);
64 // potential race with other threads opening the same URL
65 ImageReader r = readers.putIfAbsent(jimage, reader);
66 if (r == null) {
67 return reader;
68 } else {
69 reader.close();
70 return r;
71 }
72 }
73
74 /**
75 * Returns the {@code ImageReader} to read the image file in this
76 * run-time image.
77 *
78 * @throws UncheckedIOException if an I/O error occurs
|