NetBeans Architecture Answers for Execution API module
- Author: [email protected]
- Answers as of: May 13, 2025
- Answers for questions version: 1.12
- Latest available version of questions: 1.29
Interfaces table
Group of java interfaces
Interface Name | In/Out | Stability | Specified in What Document? |
---|---|---|---|
ExecutionAPI | Exported | Official | .../org/openide/execution/doc-files/api.html |
WindowSystemAPI | Imported | Official | .../org/openide/windows/doc-files/api.html |
FilesystemsAPI | Imported | Official | The module is needed for compilation. The module is used during runtime. Specification version 9.0 is required. |
InputOutputAPI | Imported | Official | The module is needed for compilation. The module is used during runtime. Specification version 1.0 is required. |
UtilitiesAPI | Imported | Official | The module is needed for compilation. The module is used during runtime. Specification version 9.3 is required. |
WeakListener.setAccessible | Imported | Under Development | The module is needed for compilation. The module is used during runtime. Specification version 9.3 is required. |
LookupAPI | Imported | Official | The module is needed for compilation. The module is used during runtime. Specification version 8.0 is required. |
Group of property interfaces
Interface Name | In/Out | Stability | Specified in What Document? |
---|---|---|---|
NetBeansAttrExecutor | Exported | Private | |
NetBeansAttrArguments | Exported | Private | |
readOnlyAttrs | Exported | Private | |
Env-foo | Imported | Private | |
java.home | Imported | Standard | |
jdk.home | Imported | Standard | |
java.class.path | Imported | Standard | |
sun.boot.class.path | Imported | Private | |
java.ext.dirs | Imported | Private | |
line.separator | Imported | Private |
General Information
-
Question (arch-what):
What is this project good for?
Answer:
The IDE uses a small interface to describe the execution of Java-based
classes together with arguments. The
ExecutionAPI
controls the execution
of user-level classes. The system may have several different types
of executors simultaneously installed. By default we provide so called
External Execution for running a user code by an external process and
Internal Execution for running the user code in the same virtual machine
as the IDE.
Question (arch-overall):
Describe the overall architecture.
WARNING: Question with id="arch-overall" has not been answered!
Question (arch-usecases):
Describe the main
use cases of the new API. Who will use it under
what circumstances? What kind of code would typically need to be written
to use the module?
WARNING: Question with id="arch-usecases" has not been answered!
Question (arch-time):
What are the time estimates of the work?
WARNING: Question with id="arch-time" has not been answered!
Question (arch-quality):
How will the quality
of your code be tested and
how are future regressions going to be prevented?
WARNING: Question with id="arch-quality" has not been answered!
Question (arch-where):
Where one can find sources for your module?
WARNING: Question with id="arch-where" has not been answered!
Project and platform dependencies
-
Question (dep-nb):
What other NetBeans projects and modules does this one depend on?
Answer:
WindowSystemAPI
- FilesystemsAPI - The module is needed for compilation. The module is used during runtime. Specification version 9.0 is required.
- InputOutputAPI - The module is needed for compilation. The module is used during runtime. Specification version 1.0 is required.
- UtilitiesAPI - The module is needed for compilation. The module is used during runtime. Specification version 9.3 is required.
- WeakListener.setAccessible - The module is needed for compilation. The module is used during runtime. Specification version 9.3 is required.
- LookupAPI - The module is needed for compilation. The module is used during runtime. Specification version 8.0 is required.
The default answer to this question is:
These modules are required in project.xml:
Deployment
-
Question (deploy-jar):
Do you deploy just module JAR file(s) or other files as well?
Answer:
The module creates openide-execution.jar and core-execution.jar. Both of them
are autoload modules. The openide-execution.jar contains the public APIs
and the core-execution.jar contains private implementation.
Question (deploy-nbm):
Can you deploy an NBM via the Update Center?
Answer:
Yes.
Question (deploy-shared):
Do you need to be installed in the shared location only, or in the user directory only,
or can your module be installed anywhere?
Answer:
No answer
Question (deploy-packages):
Are packages of your module made inaccessible by not declaring them
public?
Answer:
core-execution.jar does not define any public packages. So the public classes
in this jar are made inaccessible by the NetBeans module system.
openide-execution.jar contains publicly accessible classes (no protection
by the module system needed in this case).
Question (deploy-dependencies):
What do other modules need to do to declare a dependency on this one,
in addition to or instead of the normal module dependency declaration
(e.g. tokens to require)?
WARNING: Question with id="deploy-dependencies" has not been answered!
Compatibility with environment
-
Question (compat-i18n):
Is your module correctly internationalized?
Answer:
Yes.
Question (compat-standards):
Does the module implement or define any standards? Is the
implementation exact or does it deviate somehow?
Answer:
No.
Question (compat-version):
Can your module coexist with earlier and future
versions of itself? Can you correctly read all old settings? Will future
versions be able to read your current settings? Can you read
or politely ignore settings stored by a future version?
Answer:
Yes. It uses the settings API to store its settings.
Question (compat-deprecation):
How the introduction of your project influences functionality
provided by previous version of the product?
WARNING: Question with id="compat-deprecation" has not been answered!
Access to resources
-
Question (resources-file):
Does your module use
java.io.File
directly?
Answer:
Yes. It uses java.io.File representing items on classpath (NbClassPath).
Question (resources-layer):
Does your module provide own layer? Does it create any files or
folders in it? What it is trying to communicate by that and with which
components?
Answer:
Yes. It provides its own layer. It creates menu items, services, templates
and window system components.
Question (resources-read):
Does your module read any resources from layers? For what purpose?
Answer:
No answer
Question (resources-mask):
Does your module mask/hide/override any resources provided by other modules in
their layers?
Answer:
No.
Question (resources-preferences):
Does your module uses preferences via Preferences API? Does your module use NbPreferences or
or regular JDK Preferences ? Does it read, write or both ?
Does it share preferences with other modules ? If so, then why ?
WARNING: Question with id="resources-preferences" has not been answered!
Lookup of components
-
Question (lookup-lookup):
Does your module use
- ClassLoader.class
- ServiceType.Registry.class
- ExecutionEngine.class
- ScriptType.class
- java.net.URLStreamHandlerFactory
- org.openide.execution.ExecutionEngine
org.openide.util.Lookup
or any similar technology to find any components to communicate with? Which ones?
Answer:
Execution Environment
-
Question (exec-property):
Is execution of your code influenced by any environment or
Java system (
System.getProperty
) property?
On a similar note, is there something interesting that you
pass to java.util.logging.Logger
? Or do you observe
what others log?
Answer:
Following is the list of properties used by the Execution module
Env-foo
java.home
jdk.home
java.class.path
sun.boot.class.path
java.ext.dirs
line.separator
Question (exec-component):
Is execution of your code influenced by any (string) property
of any of your components?
Answer:
File attributes accessible via calls to
org.openide.filesystems.FileObject.getAttribute(name)
org.openide.filesystems.FileObject.setAttribute(name, value)
They can also be stored in the module layer. Please see filesystems
for more information about this.
NetBeansAttrExecutor
NetBeansAttrArguments
readOnlyAttrs
Question (exec-ant-tasks):
Do you define or register any ant tasks that other can use?
WARNING: Question with id="exec-ant-tasks" has not been answered!
Question (exec-classloader):
Does your code create its own class loader(s)?
Answer:
Yes --- this module creates its own class loader. NbClassLoader is in the
public API and it is a class loader which is capable of loading classes
from the Repository (a user defined dynamic class path).
Question (exec-reflection):
Does your code use Java Reflection to execute other code?
Answer:
Hack to close windows belonging to a thread group uses method
javax.swing.SwingUtilities.getSharedOwnerFrame.
The field
java.security.AccessControlContext.context is accessed due
to some JDK 1.2.1 hack in org.netbeans.core.execution.AccController.
When you want to execute some object it is first compiled.
Question (exec-privateaccess):
Are you aware of any other parts of the system calling some of
your methods by reflection?
Answer:
No.
Question (exec-process):
Do you execute an external process from your module? How do you ensure
that the result is the same on different platforms? Do you parse output?
Do you depend on result code?
WARNING: Question with id="exec-process" has not been answered!
Question (exec-introspection):
Does your module use any kind of runtime type information (instanceof
,
work with java.lang.Class
, etc.)?
WARNING: Question with id="exec-introspection" has not been answered!
Question (exec-threading):
What threading models, if any, does your module adhere to? How the
project behaves with respect to threading?
WARNING: Question with id="exec-threading" has not been answered!
Question (security-policy):
Does your functionality require modifications to the standard policy file?
WARNING: Question with id="security-policy" has not been answered!
Question (security-grant):
Does your code grant additional rights to some other code?
WARNING: Question with id="security-grant" has not been answered!
Format of files and protocols
-
Question (format-types):
Which protocols and file formats (if any) does your module read or write on disk,
or transmit or receive over the network? Do you generate an ant build script?
Can it be edited and modified?
Answer:
No answer
Question (format-dnd):
Which protocols (if any) does your code understand during Drag & Drop?
Answer:
None.
Question (format-clipboard):
Which data flavors (if any) does your code read from or insert to
the clipboard (by access to clipboard on means calling methods on
java.awt.datatransfer.Transferable
?
Answer:
None.
Performance and Scalability
-
Question (perf-startup):
Does your module run any code on startup?
Answer:
No.
Question (perf-exit):
Does your module run any code on exit?
Answer:
Yes. It runs a dialog prompting the user to shut down the external
processes.
Question (perf-scale):
Which external criteria influence the performance of your
program (size of file in editor, number of files in menu,
in source directory, etc.) and how well your code scales?
Answer:
The code should scale linarly with number of running processes.
Question (perf-limit):
Are there any hard-coded or practical limits in the number or size of
elements your code can handle?
Answer:
No.
Question (perf-mem):
How much memory does your component consume? Estimate
with a relation to the number of windows, etc.
Answer:
No answer
Question (perf-wakeup):
Does any piece of your code wake up periodically and do something
even when the system is otherwise idle (no user interaction)?
Answer:
No.
Question (perf-progress):
Does your module execute any long-running tasks?
Answer:
The module executes external processes. It does not block the AWT thread.
Question (perf-huge_dialogs):
Does your module contain any dialogs or wizards with a large number of
GUI controls such as combo boxes, lists, trees, or text areas?
Answer:
No.
Question (perf-menus):
Does your module use dynamically updated context menus, or
context-sensitive actions with complicated and slow enablement logic?
Answer:
No.
Question (perf-spi):
How the performance of the plugged in code will be enforced?
WARNING: Question with id="perf-spi" has not been answered!