Parsing the domain.xml during server startup takes about 420 ms for 271 elements using 88 config bean classes. On the system where this was measured, system startup takes about 3400 ms, so domain.xml parsing is about 8% of the startup time. Of this 420 ms, about 275 is spent in DomainXml.parseDomainXml.
Much of the DomainXml.parseDomainXml time is spent loading the classes. Just the parsing part (based on measuring MiniXmlParser) takes about 25 ms. The current parser is tightly coupled to the use of the model, which is derived from the config bean class. To make this parallel, this would need to be separated. The XML document would need to be parsed to determine the list of needed config bean models and the data to populate the Dom objects (stored in a form that is independent of the model). Then, using multiple threads, the config bean classes could be loaded and the Dom objects created. In addition to class loading, whenever a config bean is created, there is a call to the GlassFishConfigBean.initializationCompleted method which calls the AMX PendingConfigBeans class to add the config bean to a queue that is used by AMX if/when it initializes.
The time outside of parseDomainXml (about 145 ms) is spent in the decorate method which adds indices to the service locator for various config objects.
This issue is for exploring and implementing ways to reduce the time needed to parse the domain.xml with the goal of improving the server startup time.