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#branding-UpdateAllResources">branding 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 (+20 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="UpdateAllResources" category="devel" type="export" group="branding">
683
          <p>
684
          Some applications built on top of NetBeans Platform expressed
685
          an option that certain files in caches, namely <code>all-resources.dat</code>
686
          can be too big and that this is not good for multi-user installation.
687
          To give such applications control over creation of this file, there
688
          is a branding token (conditionally) disable the creation of the cache file.
689
          </p>
690
          <p>
691
          Rebrand value of <code>UpdateAllResources</code> key in
692
          <code>org.netbeans.core.startup.Bundle</code> resource bundle.
693
          Set it to <code>never</code>, <code>always</code> or <code>missing</code>.
694
          The default is to regenerate and update the cache <em>always</em>. 
695
          Value <em>missing</em> means to generate
696
          the cache only if it has not been previously available (even in 
697
          installation location). Setting the value to <em>never</em> will
698
          never disable the creation of the cache after start completely.
699
          </p>
700
      </api>
681
  </p>
701
  </p>
682
 </answer>
702
 </answer>
683
703
(-)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 / +19 lines)
Lines 50-55 Link Here
50
import java.lang.reflect.InvocationTargetException;
50
import java.lang.reflect.InvocationTargetException;
51
import java.lang.reflect.Method;
51
import java.lang.reflect.Method;
52
import java.net.URL;
52
import java.net.URL;
53
import java.util.MissingResourceException;
53
import java.util.logging.Level;
54
import java.util.logging.Level;
54
import java.util.logging.Logger;
55
import java.util.logging.Logger;
55
import javax.swing.SwingUtilities;
56
import javax.swing.SwingUtilities;
Lines 325-331 Link Here
325
    StartLog.logProgress ("Splash hidden"); // NOI18N
326
    StartLog.logProgress ("Splash hidden"); // NOI18N
326
    StartLog.logEnd ("Preparation"); // NOI18N
327
    StartLog.logEnd ("Preparation"); // NOI18N
327
    
328
    
328
    org.netbeans.JarClassLoader.saveArchive();
329
    updateAllResources();
329
    // start to store all caches after 15s
330
    // start to store all caches after 15s
330
    Stamps.getModulesJARs().flush(15000);
331
    Stamps.getModulesJARs().flush(15000);
331
    // initialize life-cycle manager
332
    // initialize life-cycle manager
Lines 542-545 Link Here
542
        
543
        
543
        return handler.canContinue ();
544
        return handler.canContinue ();
544
    }
545
    }
546
547
    static boolean updateAllResources() {
548
        String value = NbBundle.getMessage(Main.class, "UpdateAllResources"); // NOI18N
549
        if (!"never".equals(value)) { // NOI18N
550
            if ("missing".equals(value)) { // NOI18N
551
                if (!org.netbeans.JarClassLoader.isArchivePopulated()) {
552
                    org.netbeans.JarClassLoader.saveArchive();
553
                    return true;
554
                }
555
            } else {
556
                assert "always".equals(value); // NOI18N
557
                org.netbeans.JarClassLoader.saveArchive();
558
                return true;
559
            }
560
        }
561
        return false;
562
    }
545
}
563
}
(-)5423961ba374 (+47 lines)
Added Link Here
1
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
2
#
3
# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
4
#
5
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
6
# Other names may be trademarks of their respective owners.
7
#
8
# The contents of this file are subject to the terms of either the GNU
9
# General Public License Version 2 only ("GPL") or the Common
10
# Development and Distribution License("CDDL") (collectively, the
11
# "License"). You may not use this file except in compliance with the
12
# License. You can obtain a copy of the License at
13
# http://www.netbeans.org/cddl-gplv2.html
14
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
15
# specific language governing permissions and limitations under the
16
# License.  When distributing the software, include this License Header
17
# Notice in each file and include the License file at
18
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
19
# particular file as subject to the "Classpath" exception as provided
20
# by Oracle in the GPL Version 2 section of the License file that
21
# accompanied this code. If applicable, add the following below the
22
# License Header, with the fields enclosed by brackets [] replaced by
23
# your own identifying information:
24
# "Portions Copyrighted [year] [name of copyright owner]"
25
#
26
# Contributor(s):
27
#
28
# The Original Software is NetBeans. The Initial Developer of the Original
29
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
30
# Microsystems, Inc. All Rights Reserved.
31
#
32
# If you wish your version of this file to be governed by only the CDDL
33
# or only the GPL Version 2, indicate your decision by adding
34
# "[Contributor] elects to include this software in this distribution
35
# under the [CDDL or GPL Version 2] license." If you do not indicate a
36
# single choice of license, a recipient has the option to distribute
37
# your version of this file under either the CDDL, the GPL Version 2 or
38
# to extend the choice of license to its licensees as provided above.
39
# However, if you add GPL Version 2 code and therefore, elected the GPL
40
# Version 2 license, then the option applies only if the new code is
41
# made subject to such option by the copyright holder.
42
43
44
UpdateAllResources=missing
45
46
47
(-)5423961ba374 (+47 lines)
Added Link Here
1
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
2
#
3
# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
4
#
5
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
6
# Other names may be trademarks of their respective owners.
7
#
8
# The contents of this file are subject to the terms of either the GNU
9
# General Public License Version 2 only ("GPL") or the Common
10
# Development and Distribution License("CDDL") (collectively, the
11
# "License"). You may not use this file except in compliance with the
12
# License. You can obtain a copy of the License at
13
# http://www.netbeans.org/cddl-gplv2.html
14
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
15
# specific language governing permissions and limitations under the
16
# License.  When distributing the software, include this License Header
17
# Notice in each file and include the License file at
18
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
19
# particular file as subject to the "Classpath" exception as provided
20
# by Oracle in the GPL Version 2 section of the License file that
21
# accompanied this code. If applicable, add the following below the
22
# License Header, with the fields enclosed by brackets [] replaced by
23
# your own identifying information:
24
# "Portions Copyrighted [year] [name of copyright owner]"
25
#
26
# Contributor(s):
27
#
28
# The Original Software is NetBeans. The Initial Developer of the Original
29
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
30
# Microsystems, Inc. All Rights Reserved.
31
#
32
# If you wish your version of this file to be governed by only the CDDL
33
# or only the GPL Version 2, indicate your decision by adding
34
# "[Contributor] elects to include this software in this distribution
35
# under the [CDDL or GPL Version 2] license." If you do not indicate a
36
# single choice of license, a recipient has the option to distribute
37
# your version of this file under either the CDDL, the GPL Version 2 or
38
# to extend the choice of license to its licensees as provided above.
39
# However, if you add GPL Version 2 code and therefore, elected the GPL
40
# Version 2 license, then the option applies only if the new code is
41
# made subject to such option by the copyright holder.
42
43
44
UpdateAllResources=never
45
46
47
(-)5423961ba374 (+114 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
import org.openide.util.NbBundle;
52
53
/**
54
 *
55
 * @author Jaroslav Tulach <jtulach@netbeans.org>
56
 */
57
public class UpdateAllResourcesTest extends NbTestCase{
58
    public UpdateAllResourcesTest(String name) {
59
        super(name);
60
    }
61
62
    @Override
63
    protected void setUp() throws Exception {
64
        NbBundle.setBranding("any");
65
        clearWorkDir();
66
        System.setProperty("netbeans.user", getWorkDirPath());
67
        resetStamps();
68
    }
69
    
70
    
71
72
    public void testByDefaultTheArchiveIsUpdated() {
73
        assertTrue("Update was scheduled", Main.updateAllResources());
74
    }
75
76
    public void testNeverUpdate() {
77
        NbBundle.setBranding("ar_never");
78
        assertFalse("Update was not", Main.updateAllResources());
79
    }
80
81
    public void testUpdateAsNotPopulated() {
82
        NbBundle.setBranding("ar_missing");
83
        assertFalse("No previous all-resources.dat", JarClassLoader.isArchivePopulated());
84
        assertTrue("Performs the update", Main.updateAllResources());
85
    }
86
87
    public void testDontUpdateWhenPopulated() throws Exception {
88
        NbBundle.setBranding("ar_missing");
89
        populateCache();
90
        assertFalse("No need to update, everything is populated", Main.updateAllResources());
91
    }
92
93
    private static void populateCache() throws Exception {
94
        Method init = JarClassLoader.class.getDeclaredMethod("initializeCache");
95
        init.setAccessible(true);
96
        init.invoke(null);
97
98
        Field fld = JarClassLoader.class.getDeclaredField("archive");
99
        fld.setAccessible(true);
100
        Object obj = fld.get(null);
101
        assertNotNull("Archive is initialized", obj);
102
        
103
        Constructor<? extends Object> cnstr = obj.getClass().getDeclaredConstructor(boolean.class);
104
        cnstr.setAccessible(true);
105
        fld.set(null, cnstr.newInstance(true));
106
        
107
        assertTrue("Previous all-resources.dat", JarClassLoader.isArchivePopulated());
108
    }
109
    private static void resetStamps() throws Exception {
110
        final Method m = Stamps.class.getDeclaredMethod("main", String[].class);
111
        m.setAccessible(true);
112
        m.invoke(null, (Object) new String[]{"reset"});
113
    }
114
}
(-)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