[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: New VM Selection Method



Sun, 03 Apr 2005 11:12:03 -0500, 
Jerry Haltom <wasabi@larvalstage.net> wrote: 

> We need a standard, nice, easy to extend way for binary wrappers
> in /usr/bin and/or startup scripts to locate their VM. There are a few
> requirements that I had:
>
> 1) Whatever we do should be GUI configurable. I want to write a "System
> VM Selection" control panel of some sort allowing the user to choose
> which VM is used system-wide and also program specific.
>
> 2) It would be nice if a user (or us, as maintainers) could set the
> system up so that a certain VM is used by default for a certain program.
> There is a very obvious use case for wanting to run something like
> Eclipse on Sun's VM, yet everything else on GCJ (at least until we are
> feature complete with Sun!)
>
> 3) It should be overridable per user. If only one user wants to run
> Eclipse on Sun, he should be able to.
>
> So the obvious way to implement this is to write a shell script fragment
> which queries a number of files and returns a valid path to a JAVA_HOME.
> We then include this fragment at the top of existing wrappers, or such
> as in the case of Ant, just replace the wrapper (the Ant wrapper sucks
> really badly.)
>
> Here's my idea. A JVM selection file is just a file listing JAVA_HOME
> paths in order of preference. We put the default system one here:
>
> /etc/jvm
>
> Additionally, we create a directory to hold per program files.
>
> /etc/jvm.d

What about /etc/jvm/jvm.conf
                   /jvm.d/

> A file in here would be for example named 'ant'. I'd like to talk about
> this naming convention for these files. I'm thinking we'd use the same
> stuff as like, /usr/share/$prog, not the specific package name.
>
> The script would test for /etc/jvm.d/prog, test each JAVA_HOME listed
> within, then, if it hasn't found a jvm yet, proceed with /etc/jvm.
>
> We could also have it check ~/.jvm.d and ~/.jvm in the same manor.

Same remark.

Very good idea.

> Because I like doing things before I talk about them, I did this. This
> file would be cleaned up, placed in java-common, perhaps
> in /usr/share/java-common/jvm.sh, and jvm_find would be called in each
> wrapper.
>
> #!/bin/bash
>
> function jvm_scan_file() {
>     file="$1"
>
>     while read jvm; do
>         if [ -x "$jvm/bin/java" ]; then
>             echo $jvm
>             return
>         fi
>     done < <(cat "$file" | grep -v '#')
> }
>
> function jvm_find() {
>     program_file="/etc/jvm.d/$1"
>     user_program_file="$HOME/.jvm.d/$1"
>
>     if [ -r "$user_program_file" ]; then
>         jvm="$(jvm_scan_file "$user_program_file")"
>     fi
>
>     if [ -r "$HOME/.jvm" ]; then
>         jvm="$(jvm_scan_file "$HOME/.jvm")"
>     fi
>
>     if [ -r "$program_file" ]; then
>         jvm="$(jvm_scan_file "$program_file")"
>     fi
>
>     if [ -z "$jvm" ]; then
>         jvm="$(jvm_scan_file /etc/jvm)"
>     fi
>
>     echo "$jvm"
> }
>
> Then a wrapper just sources it, JAVA_HOME=`jvm_find myname`, and goes
> on.

Excellent.

Can you send your first mail as a bug report to java-common
(see http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=java-common)

Thanks,

-- 
  .''`. 
 : :' :rnaud
 `. `'  
   `-    
Java Trap: http://www.gnu.org/philosophy/java-trap.html



Reply to: