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 Oracle
GlassFish Server 4.0. 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[GlassFish Server 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,oac_no_warn]
----
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 GlassFish Server
Open Source Edition 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,oac_no_warn]
----
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. +

[width="100%",cols="<100%",]
|=======================================================================
a|
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 GlassFish Server, 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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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).


[width="100%",cols="<100%",]
|=======================================================================
a|
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 GlassFish Server Open
Source Edition 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 GlassFish Server,
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 GlassFish Server 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,oac_no_warn]
----
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 GlassFish Server Open
Source Edition 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
^^^^^^^^

GlassFish Server 4.0 requires JDK 6, so check your system for that
dependency.

The minimum (and certified) version of the JDK software that is required
for GlassFish Server depends on the operating system:

* For supported operating systems except Mac OS, the minimum required
version is 1.6.0_17.
* For the Mac OS X operating system, the minimum required version is
1.6.0_15.

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
GlassFish Server on Microsoft Windows, a server port conflict has
occurred:

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

This error occurs when another application is running on the GlassFish
Server port (default `8080`), or because a previous instance of
GlassFish Server 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 GlassFish Server.

[[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 GlassFish Server.

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

GlassFish Server Fails to Start in an OpenSolaris Zone
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

Description
^^^^^^^^^^^

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

[source,oac_no_warn]
----
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 GlassFish Server requires.

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

Resolution: To Enable GlassFish Server to Run in an OpenSolaris Zone
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1.  Install the package that provides language and encoding support for
your locale. +
[source,oac_no_warn]
----
$ 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 GlassFish Server
software, and is due to a known Windows security flaw rather than a
problem with GlassFish Server itself.

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

[source,oac_no_warn]
----
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 GlassFish Server 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]]

To Obtain a Server Thread Dump
++++++++++++++++++++++++++++++

Type the following command:

[source,oac_no_warn]
----
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 GlassFish Server 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 6.0 `jmap` tool. Then you can use
the JDK 6.0 `jhat` tool to analyze the dump. 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.

If you're willing to modify the `jhat` code, you can perform more
refined queries. For example:

* Trace references to a classloader from all the instances of the
classes it loaded.
* Generate a list of all classloader instances that have loaded an
identical set of classes.
* Find classloader instances whose only strong-reference chains from the
root set go through instances of classes loaded by those classloaders.
These are called orphaned classloaders.

To override the original `jhat` code, put the JAR file of the modified
`jhat` code in the `lib/ext` directory of the JDK.

[[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,oac_no_warn]
----
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,oac_no_warn]
----
asadmin start-domain domain-name
----

For example:

[source,oac_no_warn]
----
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/toc.html#GSADG00701[Update Tool]" in GlassFish Server
Open Source Edition Administration Guide. For general information about
GlassFish Serverinstallation, see the link:../installation-guide/toc.html#GSING[GlassFish Server Open
Source Edition Installation Guide].


[width="100%",cols="<100%",]
|=======================================================================
a|
Note:

Update Tool differs from Upgrade Tool, which is used to migrate the
configuration and deployed applications from an earlier version of
GlassFish Server to the current version. For more information about
Upgrade Tool and upgrading, see the link:../upgrade-guide/toc.html#GSUPG[GlassFish Server Open
Source Edition Upgrade Guide].

|=======================================================================


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

GlassFish Server Components Not Removed During Uninstallation
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

Description
+++++++++++

Not all GlassFish Server 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 Server 3.1]" in GlassFish
Server Open Source Edition 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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
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,oac_no_warn]
----
-Djavax.net.ssl.keyStore=${admin.domain.dir}/${admin.domain}/config/keystore.jks
-Djavax.net.ssl.trustStore=${admin.domain.dir}/${admin.domain}/config/cacerts.jks
----
