GlassFish 3.1 - Start Instance Blog

This is a breezy, informal, working, temporary document with Development NEWS

April 19, 2010

Hurray. An instance is running on my machine with both REST and the regular HTTP port (8080) working! This is a first!

Before we could run a crippled instance but it had to have bogus server and config elements. Namely "server" and "server-config" respectively. Now I can run an instance with one and only one server element named "i1" and one config element named "i1-config". There was quite a bit of V3 code that would flame out when the previously mentioned config elements were missing.

Here is how you can try it out(Windows Version):

  1. cd /glassfishv3/glassfish
  2. md nodeagents/yourhostname/i1
  3. xcopy domains/domain1/* nodeagents/yourhostname/i1 /s/h
  4. rm -rf nodeagents/yourhostname/i1/osgi-cache
  5. edit domain.xml and change most of the "server" to "i1" and all of the "server-config" to "i1-config"
  6. I attached my domain.xml here
  7. asadmin start-local-instance i1
  8. curl http://localhost:4848/management/domain/configs/config/i1-config (or use a browser)
  9. curl http://localhost:8080/index.html

Note: There are still many classes that have "server" and "server-config" hard-coded. They will all have to be dealt with soon.


Immediate Next Steps as of April 19, 2010

  1. Go back and continue the development of the local-start-instance command:
    • Percolate common code with start-domain to a new super-class
    • get --debug, --verbose, restart, etc. working for start-local-instance
    • Trick QuickLook into running an instance instead of a domain


We start the development with a new command, start-local-instance. The idea was to start very slowly. the CLI command does plenty but on the server side it is EXACTLY the same as starting a domain with one important exception: the name of the server is not "server". Results – total failure. V3 hangs.
(xcopy a domain, rename directories and then replace "server" with "i1" inside domain.xml)

[#|2010-04-11T12:54:01.400-0700|SEVERE|glassfishv3.0|null|_ThreadID=11;_ThreadName=Thread-1;|Unable to start v3. Closing all ports
java.lang.NullPointerException
	at java.lang.reflect.Proxy.getInvocationHandler(Proxy.java:636)
	at org.jvnet.hk2.config.ConfigSupport.getImpl(ConfigSupport.java:229)
	at com.sun.enterprise.v3.admin.AdminAdapter.registerSystemPropertyListener(AdminAdapter.java:482)
	at com.sun.enterprise.v3.admin.AdminAdapter.registerDynamicReconfigListeners(AdminAdapter.java:486)
	at com.sun.enterprise.v3.admin.AdminAdapter.postConstruct(AdminAdapter.java:151)
	at com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:174)
	at com.sun.hk2.component.ConstructorWomb$1.run(ConstructorWomb.java:87)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:84)
	at com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:77)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:58)
	at com.sun.hk2.component.LazyInhabitant.get(LazyInhabitant.java:107)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:60)
	at org.jvnet.hk2.component.Habitat$1.get(Habitat.java:276)
	at java.util.AbstractList$Itr.next(AbstractList.java:345)
	at com.sun.enterprise.v3.services.impl.GrizzlyService.registerNetworkProxy(GrizzlyService.java:419)
	at com.sun.enterprise.v3.services.impl.GrizzlyService.registerNetworkProxy(GrizzlyService.java:411)
	at com.sun.enterprise.v3.services.impl.GrizzlyService.postConstruct(GrizzlyService.java:329)
	at com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:174)
	at com.sun.hk2.component.ConstructorWomb$1.run(ConstructorWomb.java:87)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:84)
	at com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:77)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:58)
	at com.sun.hk2.component.LazyInhabitant.get(LazyInhabitant.java:107)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:60)
	at com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:236)
	at com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:128)
	at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:456)
	at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:400)
	at org.jvnet.hk2.osgiadapter.HK2Main$StartupContextService.updated(HK2Main.java:102)
	at org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1389)
	at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
|#]

My next experiment was to run start-local-instance against an actual domain (the default domain1). All I did was change the name of the directory named "domain1" to "server" so that the server's name matches the directory name. Then I ran the command like so:

asadmin start-local-instance --agentdir c:/glassfishv3/glassfish --nodeagent domains server
Note that I typed the command in from memory it might not be perfect. The idea is to trick the instance into running so that we get a super ultra simple instance going.

Result: catastrophe in Grizzly. V3 hangs!!

[#|2010-04-11T12:54:01.400-0700|SEVERE|glassfishv3.0|null|_ThreadID=11;_ThreadName=Thread-1;|Unable to start v3. Closing all ports
java.lang.NullPointerException
	at java.lang.reflect.Proxy.getInvocationHandler(Proxy.java:636)
	at org.jvnet.hk2.config.ConfigSupport.getImpl(ConfigSupport.java:229)
	at com.sun.enterprise.v3.admin.AdminAdapter.registerSystemPropertyListener(AdminAdapter.java:482)
	at com.sun.enterprise.v3.admin.AdminAdapter.registerDynamicReconfigListeners(AdminAdapter.java:486)
	at com.sun.enterprise.v3.admin.AdminAdapter.postConstruct(AdminAdapter.java:151)
	at com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:174)
	at com.sun.hk2.component.ConstructorWomb$1.run(ConstructorWomb.java:87)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:84)
	at com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:77)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:58)
	at com.sun.hk2.component.LazyInhabitant.get(LazyInhabitant.java:107)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:60)
	at org.jvnet.hk2.component.Habitat$1.get(Habitat.java:276)
	at java.util.AbstractList$Itr.next(AbstractList.java:345)
	at com.sun.enterprise.v3.services.impl.GrizzlyService.registerNetworkProxy(GrizzlyService.java:419)
	at com.sun.enterprise.v3.services.impl.GrizzlyService.registerNetworkProxy(GrizzlyService.java:411)
	at com.sun.enterprise.v3.services.impl.GrizzlyService.postConstruct(GrizzlyService.java:329)
	at com.sun.hk2.component.AbstractWombImpl.inject(AbstractWombImpl.java:174)
	at com.sun.hk2.component.ConstructorWomb$1.run(ConstructorWomb.java:87)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.hk2.component.ConstructorWomb.initialize(ConstructorWomb.java:84)
	at com.sun.hk2.component.AbstractWombImpl.get(AbstractWombImpl.java:77)
	at com.sun.hk2.component.SingletonInhabitant.get(SingletonInhabitant.java:58)
	at com.sun.hk2.component.LazyInhabitant.get(LazyInhabitant.java:107)
	at com.sun.hk2.component.AbstractInhabitantImpl.get(AbstractInhabitantImpl.java:60)
	at com.sun.enterprise.v3.server.AppServerStartup.run(AppServerStartup.java:236)
	at com.sun.enterprise.v3.server.AppServerStartup.start(AppServerStartup.java:128)
	at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:456)
	at com.sun.enterprise.module.bootstrap.Main.launch(Main.java:400)
	at org.jvnet.hk2.osgiadapter.HK2Main$StartupContextService.updated(HK2Main.java:102)
	at org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1389)
	at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:88)
|#]
  • The 2 stack traces are probably from the same exact problem
  • I see this message: "Unable to start V3" and "Closing all ports"

Problem Located

AdminAdapter.registerSytemPropertyListener() makes this call which results in NPE
domain.getServerNamed(DEFAULT_SERVER_INSTANCE_NAME)

– i.e. it is hard-coded in that the name of the server is "server". Period. The above call returns null which is not checked and an NPE results. Finally an UNDEAD server is the result – you can't stop it yet it does not exist.

Below are all the java files I could find with TreeGrep that use that hard-coded value. This is going to be some work!

C:\gf\v3>java com.elf.io.TreeGrep -f DEFAULT_SERVER_INSTANCE_NAME 
C:\gf\v3\admin\cli\src\main\java\org\glassfish\admin\cli\resources\AddResources.java
C:\gf\v3\admin\cli\src\main\java\org\glassfish\admin\cli\resources\CreateResourceRef.java
C:\gf\v3\admin\cli\src\main\java\org\glassfish\admin\cli\resources\DeleteResourceRef.java
C:\gf\v3\admin\cli\src\main\java\org\glassfish\admin\cli\resources\ListResourceRefs.java
C:\gf\v3\admin\monitor\src\main\java\org\glassfish\admin\monitor\cli\ListJndiEntries.java
C:\gf\v3\admin\server-mgmt\src\main\java\com\sun\enterprise\admin\servermgmt\pe\PEFileLayout.java
C:\gf\v3\admin\server-mgmt\src\main\java\com\sun\enterprise\admin\servermgmt\RepositoryManager.java
C:\gf\v3\common\common-util\src\main\java\com\sun\enterprise\util\SystemPropertyConstants.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateAdminObject.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateConnectorConnectionPool.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateConnectorResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateConnectorSecurityMap.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateCustomResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateJavaMailResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateJndiResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\CreateResourceAdapterConfig.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteAdminObject.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteConnectorConnectionPool.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteConnectorResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteConnectorSecurityMap.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteCustomResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteJavaMailResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteJndiResource.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\DeleteResourceAdapterConfig.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\ListCustomResources.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\ListJavaMailResources.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\ListJndiResources.java
C:\gf\v3\connectors\admin\src\main\java\org\glassfish\connectors\admin\cli\UpdateConnectorSecurityMap.java
C:\gf\v3\connectors\admin\src\test\java\org\glassfish\connectors\admin\cli\CreateCustomResourceTest.java
C:\gf\v3\connectors\admin\src\test\java\org\glassfish\connectors\admin\cli\CreateJavaMailResourceTest.java
C:\gf\v3\connectors\admin\src\test\java\org\glassfish\connectors\admin\cli\CreateJndiResourceTest.java
C:\gf\v3\connectors\admin\src\test\java\org\glassfish\connectors\admin\cli\DeleteCustomResourceTest.java
C:\gf\v3\connectors\admin\src\test\java\org\glassfish\connectors\admin\cli\DeleteJavaMailResourceTest.java
C:\gf\v3\connectors\admin\src\test\java\org\glassfish\connectors\admin\cli\DeleteJndiResourceTest.java
C:\gf\v3\core\kernel\src\main\java\com\sun\enterprise\v3\admin\AdminAdapter.java
C:\gf\v3\core\kernel\src\main\java\com\sun\enterprise\v3\admin\commands\CreateThreadpool.java
C:\gf\v3\core\kernel\src\main\java\com\sun\enterprise\v3\admin\commands\DeleteThreadpool.java
C:\gf\v3\core\kernel\src\main\java\com\sun\enterprise\v3\admin\CreateSystemProperties.java
C:\gf\v3\core\kernel\src\main\java\com\sun\enterprise\v3\admin\DeleteSystemProperty.java
C:\gf\v3\core\kernel\src\main\java\com\sun\enterprise\v3\admin\listener\SystemPropertyListener.java
C:\gf\v3\core\kernel\src\main\java\com\sun\enterprise\v3\admin\ListSystemProperties.java
C:\gf\v3\ejb\ejb-container\src\main\java\org\glassfish\ejb\admin\cli\ListTimers.java
C:\gf\v3\jdbc\admin\src\main\java\org\glassfish\jdbc\admin\cli\CreateJdbcConnectionPool.java
C:\gf\v3\jdbc\admin\src\main\java\org\glassfish\jdbc\admin\cli\CreateJdbcResource.java
C:\gf\v3\jdbc\admin\src\main\java\org\glassfish\jdbc\admin\cli\DeleteJdbcResource.java
C:\gf\v3\jdbc\admin\src\test\java\org\glassfish\jdbc\admin\cli\CreateJdbcResourceTest.java
C:\gf\v3\jdbc\admin\src\test\java\org\glassfish\jdbc\admin\cli\DeleteJdbcResourceTest.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\CreateJMSDestination.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\CreateJMSHost.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\CreateJMSResource.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\DeleteJMSDestination.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\DeleteJMSHost.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\DeleteJMSResource.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\FlushJMSDestination.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\JMSPing.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\ListJMSDestinations.java
C:\gf\v3\jms\admin\src\main\java\org\glassfish\jms\admin\cli\ListJMSHosts.java
C:\gf\v3\orb\orb-connector\src\main\java\org\glassfish\orb\admin\cli\CreateIiopListener.java
C:\gf\v3\orb\orb-connector\src\main\java\org\glassfish\orb\admin\cli\DeleteIiopListener.java
C:\gf\v3\transaction\jta\src\main\java\org\glassfish\jta\admin\cli\FreezeTransactionService.java
C:\gf\v3\transaction\jta\src\main\java\org\glassfish\jta\admin\cli\RollbackTransaction.java
C:\gf\v3\transaction\jta\src\main\java\org\glassfish\jta\admin\cli\UnFreezeTransactionService.java
C:\gf\v3\webservices\jsr109-impl\src\main\java\com\sun\enterprise\webservice\WsTxUtils.java
Time: 263797 msec

April 29, 2010

start-local-instance is 95% done.

Current instructions on running start-local-instance (i.e. this is one way to do it with no working create-instance command)

Windows:

  • cd \glassfishv3\glassfish
  • md nodeagents\hostname\instance1
  • xcopy domains\domain1\. nodeagents\hostname\instance1 /s
  • rd nodeagents\hostname\instance1\osgi-cache /s/q // VERY important step!
  • edit instance1's domain.xml `:
    • change the name of the server from "server" to "instance1"
    • You can leave the config-ref or change it to instance1-config
  • asadmin start-local-instance instance1

Not-Windows:

  • cd ~/glassfishv3/glassfish
  • mkdir nodeagents
  • mkdir nodeagents/hostname
  • mkdir nodeagents/hostname\instance1
  • cp -r domains/domain1/* nodeagents/hostname/instance1
  • rm -rf nodeagents/hostname/instance1/osgi-cache
  • edit instance1's domain.xml `:
    • change the name of the server from "server" to "instance1"
    • You can leave the config-ref or change it to instance1-config
  • asadmin start-local-instance instance1