dev@glassfish.java.net

Habitat.getAllByType(NetworkListener.class) returns empty after asadmin create-domain

From: Amy Roh <Amelia.Roh_at_Sun.COM>
Date: Tue, 14 Apr 2009 16:07:32 -0700

Hi,

When you delete the default domain1 and create a new one,
Habitat.getAllByType(NetworkListener.class) is returning an empty array
when WebContainer is starting up for the first time and fails to
configure its network listeners for virtual servers.

This can be reproduced by (Hudson webtier devtest uses create-domain to
avoid port conflicts)

1. Remove domain1
bash-3.2$ rm -rf glassfish/domains/domain1/

2. Create new domain1
bash-3.2$ glassfish/bin/asadmin create-domain --adminport 4848 --user
anonymous --instanceport=8080 domain1
Using port 4848 for Admin.
Using port 8080 for HTTP Instance.
Using default port 7676 for JMS.
Using default port 3700 for IIOP.
Using default port 8181 for HTTP_SSL.
Using default port 3820 for IIOP_SSL.
Using default port 3920 for IIOP_MUTUALAUTH.
Using default port 8686 for JMX_ADMIN.
Distinguished Name of the self-signed X.509 Server Certificate is:
[CN=cpe-76-174-87-171.socal.res.rr.com,OU=GlassFish,O=Sun
Microsystems,L=Santa Clara,ST=California,C=US]
Domain domain1 created.
Command create-domain executed successfully.

3. Start domain
bash-3.2$ glassfish/bin/asadmin start-domain

Launching Watchdog in a separate JVM. The Domain is now remote-restart
enabled.

Name of the domain started: [domain1] and
its location:
[/Users/Amy/v3-4-15/v3/distributions/glassfish/target/glassfish/domains/domain1].
Admin port for the domain: [4848].

4. Deploy webapp to start web container
bash-3.2$ glassfish/bin/asadmin deploy /Users/Amy/sample.war

Command deploy executed successfully.

And you'll see these logging info -

[#|2009-04-14T15:54:54.076-0700|SEVERE|glassfish|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=15;_ThreadName=Thread-1;|*Listener
http-listener-1 referenced by virtual server server does not exist*|#]

[#|2009-04-14T15:54:54.076-0700|SEVERE|glassfish|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=15;_ThreadName=Thread-1;|*Listener
http-listener-2 referenced by virtual server server does not exist*|#]

[#|2009-04-14T15:54:54.079-0700|INFO|glassfish|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=15;_ThreadName=Thread-1;|Created
virtual server server|#]

[#|2009-04-14T15:54:54.081-0700|SEVERE|glassfish|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=15;_ThreadName=Thread-1;|*Listener
admin-listener referenced by virtual server __asadmin does not exist*|#]

So apparently after create-domain,
Habitat.getAllByType(NetworkListener.class) in WebContainer is returning
an empty array.

I tried changing the code (in WebContainer.configureHost) to use
habitat.*getAllByContract*(NetworkListener.class) instead and only
http-listener-2 and admin-listener are returned. The http-listener-1 is
still not found by the time web container is first started.

Any idea why the NetworkListeners are not available using Habitat after
create-domain?

Thanks,
Amy