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]
----
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]
----
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 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]
----
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 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]
----
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]
----
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]
----
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]
----
$ 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]
----
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-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 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]
----
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/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].


[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]
----
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
----
