type=page
status=published
title=Specific Issues
next=faqs.html
prev=overview.html
~~~~~~

= Specific Issues

[[GSTSG00003]][[abgbj]]


[[specific-issues]]
== 2 Specific Issues

This chapter lists problems that you might encounter when using {productName} 7. The following topics are addressed:

* link:#abgca[Cannot Access Local Server (`http://localhost:8080`)]
* link:#abgcf[Cannot Access Remote Server]
* link:#abgcm[Cannot Access the Administration Console]
* link:#abgcw[Cannot Access a Server Application]
* link:#gjjoz[Administrator User Name or Password Not Known]
* link:#gjjpj[Experience Issues Related to the JDK]
* link:#abgdi[Server Will Not Start on Windows (Port Conflict)]
* link:#gkvcs[{productName} Fails to Start in an OpenSolaris Zone]
* link:#abgdr[Two Server Instances Bind to Same Port on Windows]
* link:#abgel[Cannot Produce a JVM Thread Dump After Server Crash]
* link:#ghvgk[Issues Related to Applications]
* link:#ghvhy[Issues Related to `asadmin`]
* link:#ghvgu[Issues Related to Installation]
* link:#ghvrh[Issues Related to Security]

[[abgca]][[GSTSG00043]][[cannot-access-local-server-httplocalhost8080]]

=== Cannot Access Local Server (`http://localhost:8080`)

When this error occurs, check the following:

* link:#abgcb[Did the Server Start?]
* link:#abgcd[Was the Server Started at the Expected Port?]
* link:#gjjpn[Is a Personal Firewall Enabled?]

[[abgcb]][[GSTSG00179]][[did-the-server-start]]

==== Did the Server Start?

[[abgcc]][[GSTSG00085]][[description]]

===== Description

If the console window is still open, the expected message indicates that
the default domain was started successfully.

If the console window is already closed, check for messages in the log
file. This is the default location:

[source]
----
domain-dir/logs/server.log
----

If startup was successful, the expected message is similar to that on
the console, and appears at the end of the log file.

For more information about starting a domain, see
"link:administration-guide/domains.html#GSADG00537[
Starting and Stopping a Domain]"
in {productName} Administration Guide.
To easily determine if a domain is running, use the `asadmin list-domains` command.

[[abgcd]][[GSTSG00180]][[was-the-server-started-at-the-expected-port]]

==== Was the Server Started at the Expected Port?

[[abgce]][[GSTSG00086]][[description-1]]

===== Description

The server might be running at a different port number than expected,
either because it was intentionally installed there, or because another
server was already running on the default port when the server was
installed.

[[fxxov]][[GSTSG00024]][[to-determine-which-port-number-the-server-is-using]]

To Determine Which Port Number the Server Is Using

Follow this procedure.

1. Examine the server's configuration file:
+
[source]
----
domain-dir/config/domain.xml
----
2. Find the `network-listener` element.
3. Inspect the value of the `port` attribute.
+
Be sure to enter the correct port number when invoking the server.
+
[NOTE]
====
The server's default port number is `8080`, however, there are a number
of ways in which the expected value can change:

* A different port number was specified during installation.
* A previous installation exists.
====


[[gjjpn]][[GSTSG00181]][[is-a-personal-firewall-enabled]]

==== Is a Personal Firewall Enabled?

Issues might result when personal firewalls are enabled. Disable your
personal firewall and see if the server access problem still exists.

[[abgcf]][[GSTSG00044]][[cannot-access-remote-server]]

=== Cannot Access Remote Server

When attempting to open the start page of {productName}, the initial
screen does not appear.

When this error occurs, check the following:

* link:#abgcg[Is the Server Available Locally?]
* link:#abgcj[Is the Proxy Setting Causing a Problem?]

[[abgcg]][[GSTSG00182]][[is-the-server-available-locally]]

==== Is the Server Available Locally?

[[abgch]][[GSTSG00087]][[description-2]]

===== Description

If the server cannot be accessed from the web, but it is running
locally, then the server is actually running.

[[abgci]][[GSTSG00088]][[solution]]

===== Solution

Verify that the server is running locally.

[[fxxod]][[GSTSG00025]][[to-verify-that-the-server-is-running-locally]]

To Verify That the Server Is Running Locally

Follow this procedure.

1. Log on to the host where the server is running.
2. Go to the local web page. For example, if `8080` is the default port, go to:
+
[source]
----
http://localhost:8080/
----
If the start page does appear, the web connection is encountering a
problem that prevents accessing the server remotely. If the start page
does not appear, see link:#abgcb[Did the Server Start?].

[[abgcj]][[GSTSG00183]][[is-the-proxy-setting-causing-a-problem]]

==== Is the Proxy Setting Causing a Problem?

[[abgck]][[GSTSG00089]][[description-3]]

===== Description

The server should be accessible directly from the host on which it is
running (`localhost`); for example, using the default port `8080`:

[source]
----
http://localhost:8080/
----

[[abgcl]][[GSTSG00090]][[solution-1]]

===== Solution

A server instance running on `localhost` might not be accessible if the
server host machine is connected to the web through a proxy. To solve
this problem, do one of the following:

* Set the browser to bypass the proxy server when accessing `localhost`.
Refer to the browser's help system for information about how to do this.
* Use the fully-qualified host name or IP address of your system; for example:
+
[source]
----
http://myhost.mydomain.com:8080/
----
* Create an entry in the system's hosts file (for example, pointing
`127.0.0.1` to `localhost`; `127.0.0.1` is not proxied).


[NOTE]
====
To determine the host name for the `localhost` machine, type `hostname` at the command prompt.
====


[[abgcm]][[GSTSG00045]][[cannot-access-the-administration-console]]

=== Cannot Access the Administration Console

The Administration Console provides a graphical interface for
administrative functions. If the Administration Console is not
accessible, check the following:

* link:#abgcn[Is the Application Server Running?]
* link:#abgcq[Is the Administration Console Running on the Expected
Port?]

For more information about the Administration Console, see
"link:administration-guide/overview.html#GSADG00698[Administration Console]" in {productName} Administration Guide.

[[abgcn]][[GSTSG00184]][[is-the-application-server-running]]

==== Is the Application Server Running?

[[abgco]][[GSTSG00091]][[description-4]]

===== Description

The server must be running before the Administration Console can be
accessed.

[[abgcp]][[GSTSG00092]][[solution-2]]

===== Solution

Review the information in link:#abgcb[Did the Server Start?] to
determine if the server is running.

[[abgcq]][[GSTSG00185]][[is-the-administration-console-running-on-the-expected-port]]

==== Is the Administration Console Running on the Expected Port?

[[abgcr]][[GSTSG00093]][[description-5]]

===== Description

The default port number for the Administration Console is `4848`.
However, it could be running on a different port number than expected,
either because it was intentionally installed there, or because that
port was in use when the server was started.

[[abgcs]][[GSTSG00094]][[solution-3]]

===== Solution

Refer to link:#abgcd[Was the Server Started at the Expected Port?] for
guidelines on verifying the port on which the Administration Console is
running. Be sure to enter the correct port number and HTTP protocol when
invoking the Administration Console.

[[abgcw]][[GSTSG00046]][[cannot-access-a-server-application]]

=== Cannot Access a Server Application

If a particular application cannot be accessed through {productName},
check the following:

* link:#abgcx[Is the Application Server Running?]
* link:#abgda[Was Application Deployment Successful?]

[[abgcx]][[GSTSG00186]][[is-the-application-server-running-1]]

==== Is the Application Server Running?

[[abgcy]][[GSTSG00095]][[description-6]]

===== Description

If {productName} is not running, applications are not accessible.

[[abgcz]][[GSTSG00096]][[solution-4]]

===== Solution

Review the information in link:#abgcb[Did the Server Start?] to
determine if the server is running. The server must be running before a
server application can be accessed.

[[abgda]][[GSTSG00187]][[was-application-deployment-successful]]

==== Was Application Deployment Successful?

[[abgdb]][[GSTSG00097]][[description-7]]

===== Description

An application must be successfully deployed before it can be accessed.

[[abgdc]][[GSTSG00098]][[solution-5]]

===== Solution

Verify that the application was successfully deployed. There are several
ways to do this:

* Check the server's log file for related entries:
+
[source]
----
domain-dir/server.log
----
* Use the `asadmin list-applications` command to determine which
applications are deployed.
* View the Applications page in the Administration Console, accessed by
clicking the Applications node.

For more information about deploying applications, see
"link:application-deployment-guide/deploying-applications.html#GSDPG00004[Deploying Applications]" in {productName} Application Deployment Guide. Also see the Administration
Console online help.

[[gjjoz]][[GSTSG00047]][[administrator-user-name-or-password-not-known]]

=== Administrator User Name or Password Not Known

If you have forgotten the administrator user name, you can find it by
inspecting the domain-dir`/config/admin-keyfile` file, where domain-dir
is the directory for the domain. In the default domain, `domain1`, the
file to inspect is domain-dir`/config/admin-keyfile`. For a different
domain, substitute its name in the path.

If you have forgotten the administrator password, one solution is to
create a new domain with the admin username and password that you want,
then copy the entry from the `config/admin-keyfile` file in that new
domain to the other domain.

[[gjjpj]][[GSTSG00048]][[experience-issues-related-to-the-jdk]]

=== Experience Issues Related to the JDK

[[gjjpl]][[GSTSG00188]][[description-8]]

==== Description

You experience JDK-related issues in a variety of circumstances.

[[gjjop]][[GSTSG00189]][[solution-6]]

==== Solution

{productName} 7 requires JDK 11, so check your system for that dependency.

Ensure that the required JDK software is installed and that the
`JAVA_HOME` environment variable points to the JDK installation
directory, not the Java Runtime Environment (JRE) software.

Set `JAVA_HOME` and `$JAVA_HOME/bin` in the `PATH` to point to the
supported JDK version.

[[abgdi]][[GSTSG00049]][[server-will-not-start-on-windows-port-conflict]]

=== Server Will Not Start on Windows (Port Conflict)

If a message similar to the following is displayed when starting
{productName} on Microsoft Windows, a server port conflict has
occurred:

[source]
----
Address already in use
----

This error occurs when another application is running on the {productName} port (default `8080`), or because a previous instance of
{productName} did not shut down cleanly.

You might also check the following:

* link:#abgdj[Is Another Application Running on the Server's Port?]
* link:#abgdk[Has an Ungraceful Shutdown Occurred on a Previously Running Server?]

[[abgdj]][[GSTSG00190]][[is-another-application-running-on-the-servers-port]]

==== Is Another Application Running on the Server's Port?

If another application is using the server's port, stop the other
application, then restart {productName}.

[[abgdk]][[GSTSG00191]][[has-an-ungraceful-shutdown-occurred-on-a-previously-running-server]]

==== Has an Ungraceful Shutdown Occurred on a Previously Running Server?

Use the `asadmin stop-domain` command to stop the server, or explicitly
kill the Java process and then restart {productName}.

[[gkvcs]][[GSTSG00050]][[glassfish-server-fails-to-start-in-an-opensolaris-zone]]

=== {productName} Fails to Start in an OpenSolaris Zone

[[gkvcx]][[GSTSG00192]][[description-9]]

==== Description

If {productName} is installed in an OpenSolaris zone, an attempt to
start a domain might fail with the following error message:

[source]
----
Waiting for DAS to start ..Error starting domain: domain.
The server exited prematurely with exit code 6.
Before it died, it produced the following output:

UTF ERROR ["../../../src/solaris/instrument/EncodingSupport_md.c":66]:
Failed to complete iconv_open() setup
----

The failure occurs because, by default, an OpenSolaris zone is installed
without language and encoding support, which {productName} requires.

[[gkvdf]][[GSTSG00026]][[resolution-to-enable-glassfish-server-to-run-in-an-opensolaris-zone]]

==== Resolution: To Enable {productName} to Run in an OpenSolaris Zone

1. Install the package that provides language and encoding support for
your locale.
+
[source]
----
$ pkg install package-name
----
package-name::
  The name of the package that provides language and encoding support
  for your locale. For example, the name of the package that provides
  language and encoding support for the US English locale is
  `SUNWlang-enUS`.
2. Set the `LANG` environment variable to the code for your locale.
+
For example, if your locale is US English, set the `LANG` environment
variable to `en_US.UTF-8`.

[[abgdr]][[GSTSG00051]][[two-server-instances-bind-to-same-port-on-windows]]

=== Two Server Instances Bind to Same Port on Windows

[[abgds]][[GSTSG00193]][[description-10]]

==== Description

This problem occurs on Windows XP systems with {productName}
software, and is due to a known Windows security flaw rather than a
problem with {productName} itself.

The problem occurs when two or more instances of {productName} are
created using the same port number for the `instanceport` option; for
example:

[source]
----
asadmin create-domain -adminport 5001 options -instanceport 6001 domain
asadmin create-domain -adminport 5002 options -instanceport 6001 domain
----

When the two domains are started on a UNIX or Linux system, a port
conflict error is thrown and the second instance fails to start.
However, when the two domains are started on Windows XP, no error is
thrown, both server instances start, but only the first instance is
accessible at the specified port. When that first server instance is
subsequently shut down, the second instance then becomes accessible.
Moreover, when both instances are running, the Windows `netstat` command
only reports the first instance.

[[fxxyd]][[GSTSG00194]][[solution-7]]

==== Solution

Be sure to use unique port numbers for all server instances on Windows
systems.

[[abgel]][[GSTSG00052]][[cannot-produce-a-jvm-thread-dump-after-server-crash]]

=== Cannot Produce a JVM Thread Dump After Server Crash

[[abgem]][[GSTSG00195]][[description-11]]

==== Description

If {productName} crashes, the server dumps a core file and, by
default, restarts with the `-Xrs` flag, which prevents the dump of a JVM
thread dump.

[[fxxyw]][[GSTSG00196]][[solution-8]]

==== Solution

[[ghylc]][[GSTSG00027]][[to-obtain-a-server-thread-dump-specific-issues]]

===== To Obtain a Server Thread Dump

Type the following command:

[source]
----
asadmin generate-jvm-report --type=thread
----

[[sthref4]]

See Also

link:reference-manual/generate-jvm-report.html#GSRFM00138[`generate-jvm-report`(1)]

[[ghvgk]][[GSTSG00053]][[issues-related-to-applications]]

=== Issues Related to Applications

[[abgee]][[GSTSG00197]][[cannot-undeploy-or-redeploy-application-with-open-streams-to-jar-files-windows]]

==== Cannot Undeploy or Redeploy Application With Open Streams to `jar` Files (Windows)

[[abgef]][[GSTSG00099]][[description-12]]

===== Description

On Windows systems, after running an application, subsequent attempts to
undeploy it or redeploy it throw exceptions about the server being
unable to delete a file or rename a directory.

On Windows systems, an application may use `getClass().getResource` or
`getResourceAsStream` methods to locate a resource inside the
application, particularly in `jar` files that are in the application or
accessible to it. If the streams remain open, subsequent attempts to
redeploy or undeploy the application can fail. In addition, the Java
runtime by default caches streams to `jar` files for performance
reasons.

[[fxxyr]][[GSTSG00100]][[solution-9]]

===== Solution

Be sure to close streams opened by your applications. Also, if an
application needs to be redeployed or undeployed repeatedly, and also
needs to obtain a resource from a `jar` file using `getResource` or
`getResourceAsStream`, consider using `getClass().getResource`, which
returns a URL object, then invoke the `url.setUseCaches` method to turn
off caching for that `jar` file, and use `url.getInputStream()` to
obtain the stream.

Although turning off caching for access to the `jar` file can slow
performance, this approach does allow the application to be undeployed
or redeployed. Note also that if the `getClass().getResourceAsStream`
method is used instead, then the `jar` file in which the resource is
located is cached (this is the default Java runtime setting) and remains
open until the server is stopped.

[[gldbk]][[GSTSG00198]][[maxpermgen-exception]]

==== `MaxPermGen` Exception

[[gldbn]][[GSTSG00101]][[description-13]]

===== Description

Application servers such as {productName} allow you to redeploy an
application without restarting the server. Simply make the change in
your source code, compile the source, and redeploy the application.

Each application is loaded using its own classloader. When you undeploy
an application, its classloader is discarded with all the classes it
loaded and is garbage collected sooner or later. However, if there's a
reference from outside an application to an object in the application
loaded by the application's classloader, that object can't be garbage
collected. The reference holds the object in memory.

The memory in the Virtual Machine is divided into a number of regions.
One of these regions is `PermGen`. It's an area of memory used to (among
other things) load class files. The size of this memory region is fixed;
it does not change when the VM is running. You can specify the size of
this region with a command line switch: `-XX:MaxPermSize`. Setting the
`-Xmx` parameter does not help: this parameter only specifies the total
heap size and does not affect the size of the `PermGen` region.

If you keep loading new classes that can't be garbage collected because
of references to them from outside the application, the VM runs out of
space in the `PermGen` region, even if there's plenty of memory
available. This is called a classloader leak. The resulting exception is
`java.lang.OutOfMemoryError: PermGen space`.

The `java.lang.String.intern()` method also allocates memory in the
`PermGen` region. If your application uses this method with strings and
holds references to these strings, thereby making garbage collection
impossible, your application may cause the same `PermGen space`
exception.

[[gldbw]][[GSTSG00102]][[solution-10]]

===== Solution

Classloader leaks are difficult to diagnose. Most profilers list leaked
objects but don't highlight the ones causing classloader leaks. Most
profilers also stop tracing as soon as they reach a class object or
classloader.

One diagnostic approach involves undeploying the application and
triggering a memory dump using the JDK 11 `jcmd` tool.
The simplest analysis is to list all instances of `java.lang.Class`
and look for class objects that have many instances.
This is a sign that the class has been loaded
multiple times without being garbage collected.

See https://www.eclipse.org/openj9/docs/tool_jcmd/ for more information.


[[ghvhy]][[GSTSG00054]][[issues-related-to-asadmin]]

=== Issues Related to `asadmin`

[[ghvhi]][[GSTSG00199]][[asadmin-start-domain-command-fails]]

==== `asadmin` `start-domain` Command Fails

The command `asadmin start-domain` fails with the following error:

[source]
----
There is more than one domain...
----

[[gjkph]][[GSTSG00103]][[description-14]]

===== Description

When issued with no arguments, the command `asadmin start-domain` fails.

This error occurs when there is more than one domain in the domains
directory, none of them is named `domain1,` and no domain is specified
with the `start-domain` command.

[[gjkoy]][[GSTSG00104]][[solution-11]]

===== Solution

Specify the domain when issuing the `start-domain` command:

[source]
----
asadmin start-domain domain-name
----

For example:

[source]
----
asadmin start-domain mycustomdomain
----

[[ghvhx]][[GSTSG00200]][[cannot-stop-domain-using-asadmin-stop-domain]]

==== Cannot Stop Domain Using `asadmin` `stop-domain`

[[ghvhl]][[GSTSG00105]][[description-15]]

===== Description

You cannot stop the domain using the `asadmin` `stop-domain` command.

[[ghvha]][[GSTSG00106]][[solution-12]]

===== Solution

Look for error messages that display in the console when you issue the command.

Search the `server.log` file for error messages related to your
inability to stop the domain.

[[ghvgu]][[GSTSG00055]][[issues-related-to-installation]]

=== Issues Related to Installation

[[gjjnu]][[GSTSG00201]][[installation-hangs-during-update-tool-configuration]]

==== Installation Hangs During Update Tool Configuration

[[giqjt]][[GSTSG00107]][[description-16]]

===== Description

Installation hangs more than five minutes during Update Tool configuration.

[[giqle]][[GSTSG00108]][[solution-13]]

===== Solution

Cancel the installation and run the installation program again, but this
time deselect the Install Update Tool check box. Update Tool can be
installed later from as-install``/bin/``. For more information about
Update Tool, see "link:administration-guide.html#GSADG00701[Update Tool]"
in {productName} Administration Guide. For general information about
{productName}installation, see the link:installation-guide.html#GSING[
{productName} Installation Guide].


[NOTE]
====
Update Tool differs from Upgrade Tool, which is used to migrate the
configuration and deployed applications from an earlier version of
{productName} to the current version.
For more information about Upgrade Tool and upgrading, see the
link:upgrade-guide.html#GSUPG[{productName} Upgrade Guide].
====


[[gjjob]][[GSTSG00202]][[glassfish-server-components-not-removed-during-uninstallation]]

==== {productName} Components Not Removed During Uninstallation

[[gjjoh]][[GSTSG00109]][[description-17]]

===== Description

Not all {productName} directories are automatically removed by the
uninstallation program. Some directories and files remain after
uninstalling.

[[gjjnk]][[GSTSG00110]][[solution-14]]

===== Solution

Examine the remaining directories and remove any files or directories
that you do not want, including hidden directories prefixed with a dot.
It is safe to remove uninstallation and installation log files after you
have examined them.

For information related to uninstallation, see
"link:installation-guide/uninstalling.html#GSING00003[Uninstalling GlassFish]"
in {productName} Installation Guide.

[[ghvrh]][[GSTSG00056]][[issues-related-to-security]]

=== Issues Related to Security

[[abgjt]][[GSTSG00203]][[java.security.accesscontrolexception-access-denied-error]]

==== `java.security.AccessControlException`: Access Denied Error

[[abgju]][[GSTSG00111]][[description-18]]

===== Description

The following error occurs from an application client, or appears in the
`server.log` file:

[source]
----
java.security.AccessControlException: access denied
(java.util.PropertyPermission name write...)
----

There is a permissions issue in the policy files. Either the
`client.policy` file for the application client or the `server.policy`
file for server side components does not have permission to set the
property.

[[fxxzk]][[GSTSG00112]][[solution-15]]

===== Solution

Add the permission in `client.policy` (for the application client), or
in `server.policy` (for web modules) for the application that needs to
set the property. By default, applications only have read permission for
properties.

For example, to grant read/write permission for all files in the
codebase directory, add or append the following to `client.policy` or
`server.policy`:

[source]
----
grant codeBase "file:/.../build/sparc_SunOS/sec/-" {
   permission java.util.PropertyPermission "*", "read,write";
 };
----

[[abgka]][[GSTSG00204]][[mutual-authentication-not-working-with-the-application-client]]

==== Mutual Authentication Not Working With the Application Client

[[abgkb]][[GSTSG00113]][[description-19]]

===== Description

This failure can occur when the keystore and truststore properties are
not set properly.

[[fxxzu]][[GSTSG00114]][[solution-16]]

===== Solution

Set the following properties on the JVM:

[source]
----
javax.net.ssl.keyStore=
<keystore-file-path>;javax.net.ssl.trustStore=<truststore-file-path>
----

To use the application client, set the environment variable `VMARGS` to
the following value:

[source]
----
-Djavax.net.ssl.keyStore=${admin.domain.dir}/${admin.domain}/config/keystore.jks
-Djavax.net.ssl.trustStore=${admin.domain.dir}/${admin.domain}/config/cacerts.jks
----
