Changeset 5d6d279


Ignore:
Timestamp:
Oct 14, 2012 1:54:08 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
184220f
Parents:
cb56b76
Message:
  • Console: Use non-nio connector for Java 5 and JamVM/gij

(tickets #715 and #743)

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java

    rcb56b76 r5d6d279  
    3535import net.i2p.util.SecureFileOutputStream;
    3636import net.i2p.util.ShellCommand;
     37import net.i2p.util.SystemVersion;
    3738import net.i2p.util.VersionComparator;
    3839
     40import org.mortbay.jetty.AbstractConnector;
    3941import org.mortbay.jetty.Connector;
    4042import org.mortbay.jetty.NCSARequestLog;
    4143import org.mortbay.jetty.Server;
     44import org.mortbay.jetty.bio.SocketConnector;
    4245import org.mortbay.jetty.handler.ContextHandlerCollection;
    4346import org.mortbay.jetty.handler.DefaultHandler;
     
    5053import org.mortbay.jetty.security.ConstraintMapping;
    5154import org.mortbay.jetty.security.SecurityHandler;
     55import org.mortbay.jetty.security.SslSocketConnector;
    5256import org.mortbay.jetty.security.SslSelectChannelConnector;
    5357import org.mortbay.jetty.servlet.ServletHandler;
     
    178182            //TODO: move away from routerconsole into a separate application.
    179183            //ApplicationManager?
    180             VersionComparator v = new VersionComparator();
    181             boolean recentJava = v.compare(System.getProperty("java.runtime.version"), "1.6") >= 0;
     184            boolean recentJava = SystemVersion.isJava6();
    182185            // default false for now
    183186            boolean desktopguiEnabled = I2PAppContext.getGlobalContext().getBooleanProperty("desktopgui.enabled");
     
    335338                        //else
    336339                        //    _server.addListener(host + ':' + _listenPort);
    337                         SelectChannelConnector lsnr = new SelectChannelConnector();
     340                        AbstractConnector lsnr;
     341                        if (SystemVersion.isJava6() && !SystemVersion.isGNU()) {
     342                            SelectChannelConnector slsnr = new SelectChannelConnector();
     343                            slsnr.setUseDirectBuffers(false);  // default true seems to be leaky
     344                            lsnr = slsnr;
     345                        } else {
     346                            // Jetty 6 and NIO on Java 5 don't get along that well
     347                            // Also: http://jira.codehaus.org/browse/JETTY-1238
     348                            // "Do not use GCJ with Jetty, it will not work."
     349                            // Actually it does if you don't use NIO
     350                            lsnr = new SocketConnector();
     351                        }
    338352                        lsnr.setHost(host);
    339353                        lsnr.setPort(lport);
    340354                        lsnr.setMaxIdleTime(90*1000);  // default 10 sec
    341355                        lsnr.setName("ConsoleSocket");   // all with same name will use the same thread pool
    342                         lsnr.setUseDirectBuffers(false);  // default true seems to be leaky
    343356                        //_server.addConnector(lsnr);
    344357                        connectors.add(lsnr);
     
    390403                            // TODO if class not found use SslChannelConnector
    391404                            // Sadly there's no common base class with the ssl methods in it
    392                             SslSelectChannelConnector ssll = new SslSelectChannelConnector();
     405                            AbstractConnector ssll;
     406                            if (SystemVersion.isJava6() && !SystemVersion.isGNU()) {
     407                                SslSelectChannelConnector sssll = new SslSelectChannelConnector();
     408                                // the keystore path and password
     409                                sssll.setKeystore(keyStore.getAbsolutePath());
     410                                sssll.setPassword(ctx.getProperty(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD));
     411                                // the X.509 cert password (if not present, verifyKeyStore() returned false)
     412                                sssll.setKeyPassword(ctx.getProperty(PROP_KEY_PASSWORD, "thisWontWork"));
     413                                sssll.setUseDirectBuffers(false);  // default true seems to be leaky
     414                                ssll = sssll;
     415                            } else {
     416                                // Jetty 6 and NIO on Java 5 don't get along that well
     417                                SslSocketConnector sssll = new SslSocketConnector();
     418                            // the keystore path and password
     419                                sssll.setKeystore(keyStore.getAbsolutePath());
     420                                sssll.setPassword(ctx.getProperty(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD));
     421                            // the X.509 cert password (if not present, verifyKeyStore() returned false)
     422                                sssll.setKeyPassword(ctx.getProperty(PROP_KEY_PASSWORD, "thisWontWork"));
     423                                ssll = sssll;
     424                            }
    393425                            ssll.setHost(host);
    394426                            ssll.setPort(sslPort);
    395                             // the keystore path and password
    396                             ssll.setKeystore(keyStore.getAbsolutePath());
    397                             ssll.setPassword(ctx.getProperty(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD));
    398                             // the X.509 cert password (if not present, verifyKeyStore() returned false)
    399                             ssll.setKeyPassword(ctx.getProperty(PROP_KEY_PASSWORD, "thisWontWork"));
    400427                            ssll.setMaxIdleTime(90*1000);  // default 10 sec
    401428                            ssll.setName("ConsoleSocket");   // all with same name will use the same thread pool
    402                             ssll.setUseDirectBuffers(false);  // default true seems to be leaky
    403429                            //_server.addConnector(ssll);
    404430                            connectors.add(ssll);
     
    406432                        } catch (Exception e) {
    407433                            System.err.println("Unable to bind routerconsole to " + host + " port " + sslPort + " for SSL: " + e);
     434                            if (SystemVersion.isGNU())
     435                                System.err.println("Probably because GNU classpath does not support Sun keystores");
    408436                            System.err.println("You may ignore this warning if the console is still available at https://localhost:" + sslPort);
    409437                        }
  • apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java

    rcb56b76 r5d6d279  
    6868    public void run() {
    6969        // JRobin 1.5.9 crashes these JVMs
    70         String vendor = System.getProperty("java.vendor");
    71         if (vendor.startsWith("Apache") ||                      // Harmony
    72             vendor.startsWith("GNU Classpath") ||               // JamVM
    73             vendor.startsWith("Free Software Foundation")) {    // gij
     70        if (SystemVersion.isApache() ||            // Harmony
     71            SystemVersion.isGNU()) {               // JamVM or gij
    7472            _log.logAlways(Log.WARN, "Graphing not supported with this JVM: " +
    75                                      vendor + ' ' +
     73                                     System.getProperty("java.vendor") + ' ' +
    7674                                     System.getProperty("java.version") + " (" +
    7775                                     System.getProperty("java.runtime.name") + ' ' +
  • core/java/src/net/i2p/crypto/SHA1.java

    rcb56b76 r5d6d279  
    2020import java.security.MessageDigest;
    2121import java.security.NoSuchAlgorithmException;
     22
     23import net.i2p.util.SystemVersion;
    2224
    2325/**
     
    9597        // oddly, Bitzi is faster than Oracle - see test results below
    9698        boolean useBitzi = true;
    97         String vendor = System.getProperty("java.vendor");
    98         if (vendor.startsWith("Apache") ||                      // Harmony
    99             vendor.startsWith("GNU Classpath") ||               // JamVM
    100             vendor.startsWith("Free Software Foundation")) {    // gij
     99        if (SystemVersion.isApache() ||            // Harmony
     100            SystemVersion.isGNU()) {               // JamVM or gij
    101101            try {
    102102                MessageDigest.getInstance("SHA-1");
  • core/java/src/net/i2p/util/ReusableGZIPInputStream.java

    rcb56b76 r5d6d279  
    1010    // Apache Harmony 5.0M13 Deflater doesn't work after reset()
    1111    // Neither does Android
    12     private static final boolean ENABLE_CACHING = !(System.getProperty("java.vendor").startsWith("Apache") ||
     12    private static final boolean ENABLE_CACHING = !(SystemVersion.isApache() ||
    1313                                                    SystemVersion.isAndroid());
    1414    private static final LinkedBlockingQueue<ReusableGZIPInputStream> _available;
  • core/java/src/net/i2p/util/ReusableGZIPOutputStream.java

    rcb56b76 r5d6d279  
    2121    // Apache Harmony 5.0M13 Deflater doesn't work after reset()
    2222    // Neither does Android
    23     private static final boolean ENABLE_CACHING = !(System.getProperty("java.vendor").startsWith("Apache") ||
     23    private static final boolean ENABLE_CACHING = !(SystemVersion.isApache() ||
    2424                                                    SystemVersion.isAndroid());
    2525    private static final LinkedBlockingQueue<ReusableGZIPOutputStream> _available;
  • core/java/src/net/i2p/util/SystemVersion.java

    rcb56b76 r5d6d279  
    1616    private static final boolean _isWin = System.getProperty("os.name").startsWith("Win");
    1717    private static final boolean _isMac = System.getProperty("os.name").startsWith("Mac");
    18     private static final boolean _isAndroid = System.getProperty("java.vendor").contains("Android");
     18    private static final boolean _isAndroid;
     19    private static final boolean _isApache;
     20    private static final boolean _isGNU;
    1921    private static final boolean _is64 = "64".equals(System.getProperty("sun.arch.data.model")) ||
    2022                                         System.getProperty("os.arch").contains("64");
     23    private static final boolean _hasWrapper = System.getProperty("wrapper.version") != null;
    2124
    2225    private static final boolean _oneDotSix;
     
    2427
    2528    static {
     29        String vendor = System.getProperty("java.vendor");
     30        _isAndroid = vendor.contains("Android");
     31        _isApache = vendor.startsWith("Apache");
     32        _isGNU = vendor.startsWith("GNU Classpath") ||               // JamVM
     33                 vendor.startsWith("Free Software Foundation");      // gij
     34
    2635        int sdk = 0;
    2736        if (_isAndroid) {
     
    5160    public static boolean isAndroid() {
    5261        return _isAndroid;
     62    }
     63
     64    /**
     65     *  Apache Harmony JVM, or Android
     66     */
     67    public static boolean isApache() {
     68        return _isApache || _isAndroid;
     69    }
     70
     71    /**
     72     *  gij or JamVM with GNU Classpath
     73     */
     74    public static boolean isGNU() {
     75        return _isGNU;
    5376    }
    5477
     
    91114     */
    92115    public static boolean hasWrapper() {
    93         return System.getProperty("wrapper.version") != null;
     116        return _hasWrapper;
    94117    }
    95118}
  • installer/resources/eepsite/jetty.xml

    rcb56b76 r5d6d279  
    9191    <!-- Use this connector for many frequently idle connections
    9292         and for threadless continuations.
    93          Not recommended on Java 5 - comment out and uncomment the
     93         Not recommended on Java 5 - comment this out, and uncomment the
     94         SocketConnector below.
     95         Do not use for gij or JamVM - comment this out, and uncomment the
    9496         SocketConnector below.
    9597    -->   
Note: See TracChangeset for help on using the changeset viewer.