This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 227802
Collapse All | Expand All

(-)a/core.startup/apichanges.xml (+16 lines)
Lines 56-61 Link Here
56
<!-- ACTUAL CHANGES BEGIN HERE: -->
56
<!-- ACTUAL CHANGES BEGIN HERE: -->
57
57
58
  <changes>
58
  <changes>
59
     <change id="UpdateAllResources">
60
         <api name="exec-property"/>
61
         <summary>Disable creation of resources cache</summary>
62
         <version major="1" minor="XXX"/>
63
         <date day="1" month="4" year="2013"/>
64
         <author login="jtulach"/>
65
         <compatibility addition="yes" binary="compatible" semantic="compatible" />
66
         <description>
67
             <p>
68
                 New <a href="architecture-summary.html#systemproperty-org.netbeans.core.update.all.resources">property API
69
                 </a> to control creation of <code>all-resources.data</code> cache
70
                 after start.
71
             </p>
72
         </description>
73
         <issue number="227802"/>
74
     </change>
59
     <change id="module-system-check">
75
     <change id="module-system-check">
60
        <api name="bridge"/>
76
        <api name="bridge"/>
61
        <summary>Main.getModuleSystem(false)</summary>
77
        <summary>Main.getModuleSystem(false)</summary>
(-)a/core.startup/arch.xml (+31 lines)
Lines 678-683 Link Here
678
          in the About dialog box and in the log file.
678
          in the About dialog box and in the log file.
679
          </p>
679
          </p>
680
      </api>
680
      </api>
681
      
682
      <api name="org.netbeans.core.update.all.resources" 
683
           category="devel" type="export" group="systemproperty">
684
          <p>
685
          Some applications built on top of NetBeans Platform expressed
686
          an option that certain files in caches, namely 
687
          <a href="@org-netbeans-bootstrap@/architecture-summary.html#java.io.File-all-resources.dat">
688
          all-resources.dat</a>
689
          can be too big and that this is not good for multi-user installation.
690
          To give such applications control over creation of this file, there
691
          is a property to (conditionally) disable the creation of the cache file.
692
          </p>
693
          <p>
694
          Change value of <code>org.netbeans.core.update.all.resources</code> property
695
          in launcher configuration file or provide it as a virtual machine
696
          parameter on command line.
697
          Set it to <code>never</code>, <code>always</code> or <code>missing</code>.
698
          The default is to regenerate and update the cache <em>always</em>. 
699
          Value <em>missing</em> means to generate
700
          the cache only if it has not been previously available (even in 
701
          installation location). Setting the value to <em>never</em> will
702
          never disable the creation of the cache after start completely.
703
          </p>
704
          <p>
705
          Changing default value of the property may be particulary useful when there is a shared
706
          installation of the application, there are many users with a home
707
          (and cache) directory on a slow (network) file system and it is 
708
          expected most of them won't install additional modules into their
709
          own user directory.
710
          </p>
711
      </api>
681
  </p>
712
  </p>
682
 </answer>
713
 </answer>
683
714
(-)a/core.startup/src/org/netbeans/core/startup/Bundle.properties (+3 lines)
Lines 184-186 Link Here
184
# {3} - line #
184
# {3} - line #
185
EXC_sax_parse_col_line=Parse error in file {1} line {3} column {2} (PUBLIC {0})
185
EXC_sax_parse_col_line=Parse error in file {1} line {3} column {2} (PUBLIC {0})
186
186
187
# possible values: always, never, missing
188
#NOI18N
189
UpdateAllResources=always
(-)a/core.startup/src/org/netbeans/core/startup/Main.java (-1 / +18 lines)
Lines 325-331 Link Here
325
    StartLog.logProgress ("Splash hidden"); // NOI18N
325
    StartLog.logProgress ("Splash hidden"); // NOI18N
326
    StartLog.logEnd ("Preparation"); // NOI18N
326
    StartLog.logEnd ("Preparation"); // NOI18N
327
    
327
    
328
    org.netbeans.JarClassLoader.saveArchive();
328
    updateAllResources();
329
    // start to store all caches after 15s
329
    // start to store all caches after 15s
330
    Stamps.getModulesJARs().flush(15000);
330
    Stamps.getModulesJARs().flush(15000);
331
    // initialize life-cycle manager
331
    // initialize life-cycle manager
Lines 542-545 Link Here
542
        
542
        
543
        return handler.canContinue ();
543
        return handler.canContinue ();
544
    }
544
    }
545
546
    static boolean updateAllResources() {
547
        String value = System.getProperty("org.netbeans.core.update.all.resources", "always");
548
        if (!"never".equals(value)) { // NOI18N
549
            if ("missing".equals(value)) { // NOI18N
550
                if (!org.netbeans.JarClassLoader.isArchivePopulated()) {
551
                    org.netbeans.JarClassLoader.saveArchive();
552
                    return true;
553
                }
554
            } else {
555
                assert "always".equals(value); // NOI18N
556
                org.netbeans.JarClassLoader.saveArchive();
557
                return true;
558
            }
559
        }
560
        return false;
561
    }
545
}
562
}
(-)acddb10c4b71 (+112 lines)
Added Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2013 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2013 Sun Microsystems, Inc.
41
 */
42
package org.netbeans.core.startup;
43
44
import java.lang.reflect.Constructor;
45
import java.lang.reflect.Field;
46
import java.lang.reflect.Method;
47
import static junit.framework.Assert.assertTrue;
48
import org.netbeans.JarClassLoader;
49
import org.netbeans.Stamps;
50
import org.netbeans.junit.NbTestCase;
51
52
/**
53
 *
54
 * @author Jaroslav Tulach <jtulach@netbeans.org>
55
 */
56
public class UpdateAllResourcesTest extends NbTestCase{
57
    public UpdateAllResourcesTest(String name) {
58
        super(name);
59
    }
60
61
    @Override
62
    protected void setUp() throws Exception {
63
        clearWorkDir();
64
        System.setProperty("netbeans.user", getWorkDirPath());
65
        System.getProperties().remove("org.netbeans.core.update.all.resources");
66
        resetStamps();
67
    }
68
69
    public void testByDefaultTheArchiveIsUpdated() {
70
        assertTrue("Update was scheduled", Main.updateAllResources());
71
    }
72
73
    public void testNeverUpdate() {
74
        System.setProperty("org.netbeans.core.update.all.resources", "never");
75
        assertFalse("Update was not", Main.updateAllResources());
76
    }
77
78
    public void testUpdateAsNotPopulated() throws Exception {
79
        System.setProperty("org.netbeans.core.update.all.resources", "missing");
80
        populateCache(false);
81
        assertFalse("No previous all-resources.dat", JarClassLoader.isArchivePopulated());
82
        assertTrue("Performs the update", Main.updateAllResources());
83
    }
84
85
    public void testDontUpdateWhenPopulated() throws Exception {
86
        System.setProperty("org.netbeans.core.update.all.resources", "missing");
87
        populateCache(true);
88
        assertFalse("No need to update, everything is populated", Main.updateAllResources());
89
    }
90
91
    private static void populateCache(boolean prep) throws Exception {
92
        Method init = JarClassLoader.class.getDeclaredMethod("initializeCache");
93
        init.setAccessible(true);
94
        init.invoke(null);
95
96
        Field fld = JarClassLoader.class.getDeclaredField("archive");
97
        fld.setAccessible(true);
98
        Object obj = fld.get(null);
99
        assertNotNull("Archive is initialized", obj);
100
        
101
        Constructor<? extends Object> cnstr = obj.getClass().getDeclaredConstructor(boolean.class);
102
        cnstr.setAccessible(true);
103
        fld.set(null, cnstr.newInstance(prep));
104
        
105
        assertEquals("Previous all-resources.dat", prep, JarClassLoader.isArchivePopulated());
106
    }
107
    private static void resetStamps() throws Exception {
108
        final Method m = Stamps.class.getDeclaredMethod("main", String[].class);
109
        m.setAccessible(true);
110
        m.invoke(null, (Object) new String[]{"reset"});
111
    }
112
}
(-)a/o.n.bootstrap/arch.xml (+8 lines)
Lines 1080-1085 Link Here
1080
            The location is however well known for 
1080
            The location is however well known for 
1081
            <a href="@TOP@/architecture-summary.html#java.io.File-installation.cache">purposes of installer</a>.
1081
            <a href="@TOP@/architecture-summary.html#java.io.File-installation.cache">purposes of installer</a>.
1082
            </p>
1082
            </p>
1083
            
1084
            <p>
1085
            One can control creation of the <code>all-resources.dat</code> file in
1086
            the user directory via 
1087
            <a href="@org-netbeans-core-startup@/architecture-summary.html#systemproperty-org.netbeans.core.update.all.resources">
1088
                org.netbeans.core.update.all.resources
1089
            </a> property.
1090
            </p>
1083
        </api>
1091
        </api>
1084
        <api category="friend" group="java.io.File" name="all-files.dat" type="export">
1092
        <api category="friend" group="java.io.File" name="all-files.dat" type="export">
1085
            <p>
1093
            <p>
(-)a/o.n.bootstrap/src/org/netbeans/Archive.java (+10 lines)
Lines 107-112 Link Here
107
        active = false;
107
        active = false;
108
        prepopulated = false;
108
        prepopulated = false;
109
    }
109
    }
110
111
    Archive(boolean prep) {
112
        gathering = false;
113
        active = false;
114
        prepopulated = prep;
115
    }
110
    
116
    
111
    /** Creates a new instance of Archive that reads data from given cache
117
    /** Creates a new instance of Archive that reads data from given cache
112
     */
118
     */
Lines 289-294 Link Here
289
        // nothing needs to be done
295
        // nothing needs to be done
290
    }
296
    }
291
297
298
    final boolean isPopulated() {
299
        return prepopulated;
300
    }
301
292
    /* Entry layout in the buffer:
302
    /* Entry layout in the buffer:
293
     * -1    1B 0x02 type identifier (0x03 for general)
303
     * -1    1B 0x02 type identifier (0x03 for general)
294
     *  0 -> 2B src  number of the source (sources are counted in file from 0)
304
     *  0 -> 2B src  number of the source (sources are counted in file from 0)
(-)a/o.n.bootstrap/src/org/netbeans/JarClassLoader.java (+10 lines)
Lines 125-130 Link Here
125
        }
125
        }
126
    }
126
    }
127
    
127
    
128
    /** Check whether the archive has already been populated during 
129
     * previous executions.
130
     * 
131
     * @return true, if the archive is ready and non-empty
132
     * @since 1.XXX
133
     */
134
    public static boolean isArchivePopulated() {
135
        return archive != null && archive.isPopulated();
136
    }
137
    
128
    static {
138
    static {
129
        ProxyURLStreamHandlerFactory.register();
139
        ProxyURLStreamHandlerFactory.register();
130
    }
140
    }

Return to bug 227802