Added new java-non-isolated module and refactored scripts/module.py to provide isolated_jvm and non_isolated_jvm as a way to build and run java apps in isolated (old default) and non-isolated mode.
The non-isolated mode gets enabled by module.py that detects if selected java module (provides = ['java']) has following attribute set to true like so: non_isolated_jvm = True Example to build an image with isolated JVM (default): ./scripts/build image=java,java-example Example to build an image with non-isolated JVM: ./scripts/build image=java-non-isolated,java-example Fixes #800 Signed-off-by: Waldemar Kozaczuk <jwkozac...@gmail.com> --- modules/java-non-isolated/Makefile | 10 ++++++++++ modules/java-non-isolated/module.py | 28 ++++++++++++++++++++++++++++ modules/java-non-isolated/usr.manifest | 21 +++++++++++++++++++++ scripts/module.py | 25 ++++++++++++++++++++++--- 4 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 modules/java-non-isolated/Makefile create mode 100644 modules/java-non-isolated/module.py create mode 100644 modules/java-non-isolated/usr.manifest diff --git a/modules/java-non-isolated/Makefile b/modules/java-non-isolated/Makefile new file mode 100644 index 0000000..d5d916e --- /dev/null +++ b/modules/java-non-isolated/Makefile @@ -0,0 +1,10 @@ +# TODO: need to move compilation of $(java-targets) from the main makefile +# to here. Unfortunately, compiling with OSv header files is a big mess, +# and much easier to do it in the main OSv makefile :-( +SRC = $(shell readlink -f ../..) +module: + cd $(SRC)/java && mvn package -DskipTests=true + +clean: + cd $(SRC)/java && mvn clean + -rm -f dependency-reduced-pom.xml diff --git a/modules/java-non-isolated/module.py b/modules/java-non-isolated/module.py new file mode 100644 index 0000000..1f5b401 --- /dev/null +++ b/modules/java-non-isolated/module.py @@ -0,0 +1,28 @@ +from osv.modules.filemap import FileMap +from osv.modules import api +import os, os.path + +usr_files = FileMap() + +provides = ['java'] + +non_isolated_jvm = True + +api.require('fonts') +api.require('ca-certificates') +api.require('libz') +api.require('josvsym') +api.require('httpserver-jolokia-plugin') +api.require('httpserver-jvm-plugin') + +jdkdir = os.path.basename(os.path.expandvars('${jdkbase}')) + +usr_files.add('${jdkbase}').to('/usr/lib/jvm/java') \ + .include('lib/**') \ + .include('jre/**') \ + .exclude('jre/lib/security/cacerts') \ + .exclude('jre/lib/audio/**') + +usr_files.link('/usr/lib/jvm/' + jdkdir).to('java') +usr_files.link('/usr/lib/jvm/jre').to('java/jre') +usr_files.link('/usr/lib/jvm/java/jre/lib/security/cacerts').to('/etc/pki/java/cacerts') diff --git a/modules/java-non-isolated/usr.manifest b/modules/java-non-isolated/usr.manifest new file mode 100644 index 0000000..63b11bc --- /dev/null +++ b/modules/java-non-isolated/usr.manifest @@ -0,0 +1,21 @@ +# +# Copyright (C) 2013-2014 Cloudius Systems, Ltd. +# +# This work is open source software, licensed under the terms of the +# BSD license as described in the LICENSE file in the top-level directory. +# + +[manifest] +/usr/lib/&/libexpat.so.1: %(miscbase)s/usr/lib64/& +/usr/lib/&/libjpeg.so.62: %(miscbase)s/usr/lib64/& +/usr/lib/jni/balloon.so: java/jni/balloon.so +/usr/lib/jni/monitor.so: java/jni/monitor.so +/usr/lib/&/jni/elf-loader.so: java/& +/usr/lib/&/jni/networking.so: java/& +/usr/lib/&/jni/stty.so: java/& +/usr/lib/&/jni/tracepoint.so: java/& +/usr/lib/&/jni/power.so: java/& +/java.so: java/jvm/java_non_isolated.so +/usr/lib/libosv.so: libosv.so +/usr/lib/jvm/java/jre/lib/ext/runjava.jar: ${OSV_BASE}/java/runjava/target/runjava.jar +/java/cloudius.jar: ${OSV_BASE}/java/cloudius/target/cloudius.jar diff --git a/scripts/module.py b/scripts/module.py index aede2cf..19c39b5 100755 --- a/scripts/module.py +++ b/scripts/module.py @@ -8,7 +8,7 @@ import argparse from functools import reduce from osv.modules import api, resolve, filemap -class jvm(api.basic_app): +class isolated_jvm(api.basic_app): multimain_manifest = '/etc/javamains' apps = [] @@ -33,6 +33,21 @@ class jvm(api.basic_app): def add(self, app): self.apps.append(app) + def has_any_app(self): + return self.apps + +class non_isolated_jvm(api.basic_app): + app = None + + def get_launcher_args(self): + return ['java.so'] + self.app.get_jvm_args() + self.app.get_multimain_lines() + + def add(self, app): + self.app = app + + def has_any_app(self): + return self.app + def expand(text, variables): def resolve(m): name = m.group('name') @@ -117,7 +132,11 @@ def flatten_list(elememnts): def get_basic_apps(apps): basic_apps = [] - _jvm = jvm() + java = resolve.require('java') + if hasattr(java,'non_isolated_jvm') and java.non_isolated_jvm: + _jvm = non_isolated_jvm() + else: + _jvm = isolated_jvm() for app in flatten_list(apps): if isinstance(app, api.basic_app): @@ -127,7 +146,7 @@ def get_basic_apps(apps): else: raise Exception("Unknown app type: " + str(app)) - if _jvm.apps: + if _jvm.has_any_app(): basic_apps.append(_jvm) return basic_apps -- 2.7.4 -- You received this message because you are subscribed to the Google Groups "OSv Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to osv-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.