costin      02/01/11 20:01:47

  Modified:    jk/java/org/apache/jk/apr AprImpl.java
  Log:
  Few more enhancements. Load libapr.so ( yes, I know - it works only on Unix
  at this moment, .so is hardcoded and few other things ). This is
  required to get it working without having to set LD_LIBRARY_PATH.
  
  Also use the base dir to locate the library - the idea is that we can assume
  a 'fixed' layout ( or a set of layouts ).
  
  Revision  Changes    Path
  1.3       +48 -11    jakarta-tomcat-connectors/jk/java/org/apache/jk/apr/AprImpl.java
  
  Index: AprImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jk/java/org/apache/jk/apr/AprImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AprImpl.java      6 Jan 2002 08:40:44 -0000       1.2
  +++ AprImpl.java      12 Jan 2002 04:01:47 -0000      1.3
  @@ -1,12 +1,16 @@
   package org.apache.jk.apr;
   
  +import java.io.*;
  +
   /** Implements the interface with the APR library. This is for internal-use
    *  only. The goal is to use 'natural' mappings for user code - for example
    *  java.net.Socket for unix-domain sockets, etc. 
    * 
    */
   public class AprImpl {
  -
  +    String baseDir;
  +    String aprHome;
  +    
       /** Initialize APR
        */
       public native int initialize();
  @@ -41,18 +45,51 @@
       public native int unWrite( long pool, long unSocket,
                                   byte buf[], int off, int len );
   
  +    /** Native libraries are located based on base dir.
  +     *  XXX Add platform, version, etc
  +     */
  +    public void setBaseDir(String s) {
  +        baseDir=s;
  +    }
  +
  +    // XXX maybe install the jni lib in apr-home ?
  +    public void setAprHome( String s ) {
  +        aprHome=s;
  +    }
  +    
  +    /** This method of loading the libs doesn't require setting
  +     *   LD_LIBRARY_PATH. Assuming a 'right' binary distribution,
  +     *   or a correct build all files will be in their right place.
  +     *
  +     *  The burden is on our code to deal with platform specific
  +     *  extensions and to keep the paths consistent - not easy, but
  +     *  worth it if it avoids one extra step for the user.
  +     *
  +     *  Of course, this can change to System.load() and putting the
  +     *  libs in LD_LIBRARY_PATH.
  +     */
  +    public void loadNative() {
  +        if( aprHome==null )
  +            aprHome=baseDir;
  +        File dir=new File(aprHome);
  +        // XXX platform independent, etc...
  +        File apr=new File( dir, "libapr.so");
  +
  +        loadNative( apr.getAbsolutePath() );
  +
  +        dir=new File(baseDir);
  +        File jniConnect=new File( dir, "jni_connect.so");
  +        
  +        loadNative( jniConnect.getAbsolutePath() );
  +    }
  +
  +    boolean ok=true;
  +    
       public void loadNative(String libPath) {
           try {
  -            if( libPath==null )
  -                libPath="jni_connect";
  -            // XXX use load() for full path
  -            if( libPath.indexOf( "/" ) >=0 ||
  -                libPath.indexOf( "\\" ) >=0 ) {
  -                System.load( libPath );
  -            } else {
  -                System.loadLibrary( libPath );
  -            }
  -        } catch( RuntimeException ex ) {
  +            System.load( libPath );
  +        } catch( Throwable ex ) {
  +            ok=false;
               ex.printStackTrace();
           }
       }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to