I think Java broke up environment variables and system properties to allow for a more fine grained permission model of who is allowed to edit them and read them, hence the overly locked down API for it.
Would it be feasible to launch a sub process with the environment variables initialized? Or would that be too much overhead for this use case? On Sat, Mar 28, 2020 at 09:31 Rodric Rabbah <rod...@gmail.com> wrote: > We should not change this for java8. For Java 11 since it’s new, it would > be ok to make the change but only for the activation context. Since init > time env vars can still be set by the proxy. > > Another approach since something will change for 11: introduce the context > object for java methods that want these variables (alternate signature) > which matches aws lambda. > > -r > > > On Mar 28, 2020, at 7:34 AM, Carlos Santana <csantan...@gmail.com> > wrote: > > > > Would this be for a new kind “java:11” not affecting existing java > kinds? > > > > Then will affect only someone migrating a java action from using java:8 > or java:8a to use java:11? then it would be a good time to also clean up > how it access this variables/properties if for any chance is using them in > existing kind. > > > > there is no java sdk in openwhisk like the one from node.js > > > > Can’t think what other areas of openwhisk or use cases this will affect. > > > > - Carlos Santana > > @csantanapr > > > >> On Mar 28, 2020, at 7:13 AM, Michele Sciabarra <mich...@sciabarra.com> > wrote: > >> > >> Community, > >> > >> Let's make a long story short: > >> > >> In the openwhisk runtime for java, when you activate an action, you > have to pass some informatins. Most notably those: > >> > >> --- > >> { > >> "namespace": String, > >> "action_name": String, > >> "api_host": String, > >> "api_key": String, > >> "activation_id": String, > >> "transaction_id": String, > >> "deadline": Number > >> } > >> --- > >> > >> Now, the common way in all the programming languages is to set > environement variables: > >> > >> so action_name is passed as __OW_ACTION_NAME and so on. > >> > >> This is easy in every programming language except java. In Java "you > should not change environment variables". Because the concept of > environemnt variables is actually to use "system properties". Generally all > the environment variables are used to set system properties, read only. > >> > >> In che java8 runtime however the environment variables has been set. > Following this stack overlflow "horrible and unacceptable' (my opinion) > hack > >> > >> > https://stackoverflow.com/questions/318239/how-do-i-set-environment-variables-from-java > >> > >> Note this "vomit causing" (still my opinion) thing: > >> > >> Field field = cl.getDeclaredField("m"); > >> field.setAccessible(true); > >> > >> Yep, you hack an in-memory undocumented hash map marked read only with > reflection to say "no, I want to write in it anyway" and then proceed your > surgery. > >> > >> I very very very very unwillingly applied this hack in the actionloop > runtime for java 8 for the sake of keeping compatibility and pass all the > existing tests. > >> > >> For java 11 however, this hack also requires you mark the runtime as > using "unsafe code" > >> > >> I thing this thing now it is a bit ... too much. So we should instead > change the way we pass the values and use system properties instead. > >> > >> Yes, user code for Java11 need to be changed. No more > System.getenv(...) but System.getProperties. > >> > >> Your thoughts? > >> > >> > >> -- > >> Michele Sciabarra > >> mich...@sciabarra.com > -- Matt Sicker <boa...@gmail.com>