type=page
status=published
title=GlassFish Server Upgrade Compatibility Issues
next=upgrading-legacy-installation.html
prev=preface.html
~~~~~~

GlassFish Server Upgrade Compatibility Issues
=============================================

[[GSUPG00002]][[abmaq]]


[[glassfish-server-upgrade-compatibility-issues]]
1 GlassFish Server Upgrade Compatibility Issues
-----------------------------------------------

This section describes some compatibility issues between GlassFish
Server 4.0 and earlier product releases. This section also describes
some compatibility issues that affect Java applications that run on
earlier product releases with which Oracle GlassFish Server 4.0 is
binary-compatible. When you upgrade to GlassFish Server 4.0, you must
address these issues.

The following topics are addressed here:

* link:#gjwpd[Binary-Compatible Releases For GlassFish Server 4.0]
* link:#gkric[New Default Installation Directory]
* link:#gklhr[Changes to Group Management Service Settings]
* link:#geyyk[Application Client Interoperability]
* link:#gktad[Node Agent Support]
* link:#gkrjm[HADB and `hadbm` Command Support]
* link:#abmbc[Command Line Interface: The `asadmin` Command]
* link:#gflnv[Applications That Use Java DB]
* link:#gjizi[Applications That Use Persistence]
* link:#gjiqj[HTTP Service to Network Service Changes]
* link:#gktkt[NSS Cryptographic Token Support]

[[gjwpd]][[GSUPG00028]][[binary-compatible-releases-for-glassfish-server-4.0]]

Binary-Compatible Releases For GlassFish Server 4.0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GlassFish Server Open Source Edition 4.0 is binary-compatible with the
following earlier releases of the software:

* Sun GlassFish Enterprise Server v2.1.1 (Enterprise and Developer Profiles)
* Sun GlassFish Enterprise Server v3
* GlassFish Server Open Source Edition 3.0.1
* GlassFish Server Open Source Edition 3.1
* GlassFish Server Open Source Edition 3.1.1

Java applications that run on these releases also work on GlassFish
Server Open Source Edition 4.0 except for the compatibility issues that
are listed in the remainder of this chapter.


[NOTE]
====
The compatibility issues that are listed in the remainder of this
chapter do not affect Java applications that run on Sun GlassFish
Enterprise Server v3 and GlassFish Server 3.0.1. The differences between
GlassFish Server 4.0 and the Enterprise Server v3 releases do not affect
applications and data.
====


[[gkric]][[GSUPG00029]][[new-default-installation-directory]]

New Default Installation Directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The default GlassFish Server 4.0 installation directories are as follows:

Solaris, Linux, and Mac OS X systems::
[source]
----
user-home-directory/glassfish7
----
Windows systems::
[source]
----
SystemDrive\glassfish7
----

In GlassFish Server 3.0.1 and Enterprise Server v3, the default
installation root directory was `glassfishv3`.

[[gklhr]][[GSUPG00030]][[changes-to-group-management-service-settings]]

Changes to Group Management Service Settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The functionality of the Group Management Service (GMS) has not changed
since Sun GlassFish Enterprise Server v2.1.1, but the names of GMS
settings have been changed in the Administration Console to make them
more understandable. These changes are made automatically during the
upgrade process.

Changes to settings on the Edit Group Management Service page in the
Administration Console are summarized in the following table.

[[sthref3]][[gklho]]

Table 1-1 GMS Administration Console Settings Changes from 2.1.1 to 4.0

[width="100%",cols="<50%,<50%",options="header",]
|===
|Old Setting Name |New Setting Name
|Protocol Maximum Trial |Maximum Missed Heartbeats
|Protocol Timeout |Heartbeat Frequency
|Ping Timeout |Group Discovery Timeout
|Verified Timeout |Failure Verification Wait Time
|===


The Merge Protocol settings from Sun GlassFish Enterprise Server v2.1.1
are not supported and have been removed.

[[geyyk]][[GSUPG00031]][[application-client-interoperability]]

Application Client Interoperability
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The Java EE 6 platform specification imposes stricter requirements than
Java EE 5 did on which JAR files can be visible to various modules
within an EAR file. In particular, application clients must not have
access to EJB JAR files or other JAR files in the EAR file unless they
use a `Class-Path` header in the manifest file, or unless references use
the standard Java SE mechanisms (extensions, for example), or use the
Java EE `library-directory` mechanism. Deployed Java EE 5 applications
that are upgraded to GlassFish Server 4.0 will have the `compatibility`
property set to `v2` and will run without change on GlassFish Server
4.0. You may, however, want to consider modifying the applications to
conform to Java EE 6 requirements.

If your upgrade includes a deployed application with an application
client, you will need to retrieve the client stubs using GlassFish
Server 4.0 in order to run the client. Use the
`asadmin get-client-stubs` command.

If you try to run the application client before retrieving the client
stubs, you will see the following error message:

[source]
----
Invalid or corrupt jarfile jar-file-name
----

If you commonly distribute application clients to remote systems from
which users will run them, you must not only retrieve the client stubs,
but you must also run the `package-appclient` utility for GlassFish
Server 4.0 to upgrade the GlassFish Server system files. This utility
creates a JAR file, which you can then expand on the remote systems.

Application clients use EJBs, web services, or other enterprise
components that are in the application server (on the server side). The
application client and the application server must use the same version
and implementation of the RMI-IIOP protocol. GlassFish Server 4.0 does
not support communication between different versions of the protocol
implementation. You cannot run application clients with one version of
the application server runtime with a server that has a different
version. Most often, this would happen if you upgraded the server but
had not upgraded all the application client installations. If you run
the `package-appclient` utility, this issue will not arise.

You can use the Java Web Start support to distribute and launch the
application client. If the runtime on the server has changed since the
end-user last used the application client, Java Web Start automatically
retrieves the updated runtime. Java Web Start enables you to keep the
clients and servers synchronized and using the same runtime.

[[gktad]][[GSUPG00032]][[node-agent-support]]

Node Agent Support
~~~~~~~~~~~~~~~~~~

GlassFish Server 4.0 does not support node agents. When updating from
installations of earlier product versions in which node agents were
configured, the cluster definitions will be migrated, but the clustered
instances themselves must be manually re-created. See
link:upgrading-legacy-installation.html#gfybw[Upgrading Clusters and Node
Agent Configurations] for more information.

[[gkrjm]][[GSUPG00033]][[hadb-and-hadbm-command-support]]

HADB and `hadbm` Command Support
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GlassFish Server 4.0 does not support HADB or the `hadbm` management command.

Instead of HADB, GlassFish Server 4.0 supports high availability
clustering by means of in-memory session state replication and
ActiveCache for GlassFish.
See "link:../ha-administration-guide/overview.html#GSHAG00002[
High Availability in GlassFish Server]" in
GlassFish Server Open Source Edition High Availability Administration Guide
for more information.

[[abmbc]][[GSUPG00034]][[command-line-interface-the-asadmin-command]]

Command Line Interface: The `asadmin` Command
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The following sections describe changes to the command line utility `asadmin`:

* link:#abmbd[Deprecated `asadmin` Subcommands]
* link:#abmbf[Deprecated, Unsupported, and Obsolete Options]

For more information about `asadmin` and its subcommands, see the
link:../reference-manual/toc.html#GSRFM[GlassFish Server Open Source Edition Reference Manual].

[[abmbd]][[GSUPG00053]][[deprecated-asadmin-subcommands]]

Deprecated `asadmin` Subcommands
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

In GlassFish Server 4.0, it is recommended that utility options of the
`asadmin` command precede the subcommand. Utility options are options
that control the behavior of the `asadmin` utility, as distinguished
from subcommand options. Use of the following options after the
subcommand is deprecated.

* `--host`
* `--port`
* `--user`
* `--passwordfile`
* `--terse`
* `--secure`
* `--echo`
* `--interactive`

[[abmbf]][[GSUPG00054]][[deprecated-unsupported-and-obsolete-options]]

Deprecated, Unsupported, and Obsolete Options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Options in link:#gaeki[Table 1-2] are deprecated or no longer supported,
or are obsolete and are ignored.

[[sthref4]][[gaeki]]

Table 1-2 Deprecated, Unsupported, and Obsolete Options for `asadmin`
and Subcommands

[width="100%",cols="<33%,<67%",options="header",]
|===
|Option |Affected Subcommands

|`--acceptlang`
|Unsupported for the `create-virtual-server` subcommand.

|`--acls`
|Unsupported for the `create-virtual-server` subcommand.

|`--adminpassword`
|Unsupported for all relevant subcommands. Use `--passwordfile` instead.

|`--autoapplyenabled`
|Obsolete for the `create-http-lb` subcommand.

|`--autohadb`
|Obsolete for the `create-cluster` subcommand.

|`--autohadboverride`
|Obsolete for the `start-cluster` subcommand and the `stop-cluster` subcommand

|`--blockingenabled`
|Unsupported for the `create-http-listener` subcommand.

|`--configfile`
|Unsupported for the `create-virtual-server` subcommand.

|`--defaultobj`
|Unsupported for the `create-virtual-server` subcommand.

|`--defaultvs`
|Deprecated for the `create-http-listener` subcommand. Use `--default-virtual-server` instead.

|`--description`
|Obsolete for the `restore-domain` subcommand.

|`--devicesize`
|Obsolete for the `create-cluster` subcommand.

|`--haadminpassword`
|Obsolete for the `create-cluster` subcommand.

|`--haadminpasswordfile`
|Obsolete for the `create-cluster` subcommand.

|`--haagentport`
|Obsolete for the `create-cluster` subcommand.

|`--haproperty`
|Obsolete for the `create-cluster` subcommand.

|`--heartbeataddress`
|Deprecated for the `create-cluster` subcommand. Use `--multicastaddress` instead.

|`--heartbeatport`
|Deprecated for the `create-cluster` subcommand. Use `--multicastport` instead.

|`--hosts`
|Obsolete for the `create-cluster` subcommand.

|`--ignoreDescriptorItem`
|Replaced by the all lowercase option `--ignoredescriptoritem`
in the `set-web-context-param` subcommand and the `set-web-env-entry` subcommand.

|`--mime`
|Unsupported for the `create-virtual-server` subcommand.

|`--password`
|Unsupported for all remote subcommands. Use `--passwordfile` instead.

|`--path`
|Unsupported for the `create-domain` subcommand. Use `--domaindir` instead.

|`--portbase`
|Obsolete only for the `create-cluster` subcommand.
This option is still valid in other subcommands such as `create-domain`,
`create-instance`, and `create-local-instance`.

|`--resourcetype`
|Unsupported for all relevant subcommands. Use `--restype` instead.

|`--retrievefile`
|Obsolete for the `export-http-lb-config` subcommand.

|`--setenv`
|Obsolete for the `start-instance` subcommand.

|`--target`
a|Obsolete only for the following subcommands:

* `create-connector-connection-pool`
* `create-resource-adapter-config`
* `delete-connector-connection-pool`
* `delete-connector-security-map`
* `delete-jdbc-connection-pool`
* `delete-resource-ref`

Replaced by an operand in the `list-custom-resources` subcommand and the
`list-jndi-entries` subcommand.
|===


[[gflnv]][[GSUPG00035]][[applications-that-use-java-db]]

Applications That Use Java DB
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The directory location of Java DB in GlassFish Server 4.0 has changed
from its location in previous installations. Suppose that you have
deployed applications that use Java DB databases in your previous server
installation, and you upgrade your existing installation to GlassFish
Server 4.0. If you run the `asadmin start-database` command and
successfully start Java DB, you could run into problems while trying to
run applications that were deployed on your previous server
installation.

To solve this problem, you can copy the `databases` directory from your
previous installation to as-install`/databases`. Make sure the database
is not running when you do this.

Alternatively, you can perform these steps:

1. Use the `asadmin start-database` command with the `--dbhome` option
pointing to the `databases` directory in the older version of Java DB.
For example:
+
[source]
----
asadmin start-database --dbhome c:\glassfish\databases
----
2. After upgrade, start GlassFish Server 4.0.

[[gjizi]][[GSUPG00036]][[applications-that-use-persistence]]

Applications That Use Persistence
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GlassFish Server 4.0 and 3.0.1, and Sun GlassFish Enterprise Server v3
use the persistence provider EclipseLink, while earlier versions used
TopLink Essentials.

An application that uses the container to create an `EntityManager` or
`EntityManagerFactory` and that used Toplink Essentials as its provider
will work in GlassFish Server 4.0. The container creates an
`EntityManager` if the application uses the `@PersistenceContext`
annotation to inject an `EntityManager`, as in the following example:

[source,java]
----
@PersistenceContext
EntityManager em;
----

The container creates an `EntityManagerFactory` if the application uses
the `@PersistenceUnit` annotation to inject an `EntityManagerFactory`,
as in the following example:

[source,java]
----
@PersistenceUnit
EntityManagerFactory emf;

EntityManager em = emf.createEntityManager();
----

When the application is loaded, GlassFish Server 4.0 will translate the
provider to EclipseLink and will also translate `toplink.*` properties
in the `persistence.xml` to corresponding EclipseLink properties. (The
actual `persistence.xml` file remains unchanged.)

Under certain circumstances, however, you may have to modify the
`persistence.xml` file or your code:

* If your application uses Java SE code to create the
`EntityManagerFactory`, you will need to change your `persistence.xml`
file for both the `provider` element and for any `toplink.*` properties
to use the EclipseLink equivalents. An application uses Java SE code if
it uses the `javax.persistence.Persistence` class to create the
`EntityManagerFactory`, as in the following example:
+
[source,java]
----
EntityManagerFactory emf =
    javax.persistence.Persistence.createEntityManagerFactory("Order");
EntityManager em = emf.createEntityManager();
----
In this case, change the `provider` element to specify the following:
+
[source,xml]
----
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
----
* If the application itself contains any TopLink Essentials-specific
code and therefore contains casts to `oracle.toplink.\*`, you must change
the code to cast to `org.eclipse.persistence.*`. You can use the package
renamer tool described on the
http://wiki.eclipse.org/EclipseLink/Examples/MigratingFromOracleTopLink#Rename_Packages[
Eclipse wiki]
to do this. This tool is not provided with GlassFish Server 4.0,
however, so you must obtain it from the EclipseLink project download site.

[[gjiqj]][[GSUPG00037]][[http-service-to-network-service-changes]]

HTTP Service to Network Service Changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In GlassFish Server 4.0, most HTTP Service settings are defined in the
Network Service configuration that was introduced in Sun GlassFish
Enterprise Server v3.

The changes are described in the following sections.

* link:#gipsa[Changes to Dotted Names]
* link:#giprg[Changes to `asadmin` Subcommands]
* link:#gipfo[Remapping of HTTP Service Attributes and Properties]
* link:#gipcg[New Network Service Elements and Attributes]

[[gipsa]][[GSUPG00055]][[changes-to-dotted-names]]

Changes to Dotted Names
^^^^^^^^^^^^^^^^^^^^^^^

The dotted name hierarchy for the HTTP Service configuration in
GlassFish Server 4.0 is shown below. Elements that are no longer
supported are `request-processing`, `keep-alive`, `connection-pool`,
`http-protocol`, `http-file-cache`, and `http-listener`. During the
upgrade process, these discontinued elements are remapped to the new
configuration automatically and then deleted.

[source]
----
config
    http-service
        access-log
        request-processing
        keep-alive
        connection-pool
        http-protocol
        http-file-cache
        http-listener
            ssl
            property
        virtual-server
            http-access-log
            property
        property
    thread-pools
        thread-pool
----

The dotted name hierarchy for the GlassFish Server 4.0 Network Service
and HTTP Service configurations is shown below. The `network-config`
element and all its children are new except for `ssl`.

[source]
----
config
    network-config
        transports
            selection-key-handler
            transport
        protocols
            protocol
                http
                    file-cache
                port-unification
                    protocol-finder
                protocol-chain-instance-handler
                    protocol-chain
                protocol-filter
                ssl
        network-listeners
            network-listener
    http-service
        access-log
        virtual-server
            http-access-log
            property
        property
    thread-pools
        thread-pool
----

The following example compares the commands for setting a listener port
for Sun GlassFish Enterprise Server v3 and GlassFish Server 4.0. Note
that the configuration for Enterprise Server v3 also applies to all
earlier Enterprise Server 2.x releases.

* Command for Sun GlassFish Enterprise Server v3 and earlier:
+
[source]
----
asadmin set server-config.http-service.http-listener.http-1.listenerport=4321
----
* Command for GlassFish Server 4.0:
+
[source]
----
asadmin set server-config.network-config.network-listeners.network-\
listener.http-1.listenerport=4321
----

[[giprg]][[GSUPG00056]][[changes-to-asadmin-subcommands]]

Changes to `asadmin` Subcommands
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

To accommodate the move of HTTP Service into the new Network Service
configuration, link:../reference-manual/asadmin.html#GSRFM00263[`asadmin`] subcommands are changed as
follows:

* The link:../reference-manual/create-ssl.html#GSRFM00058[`create-ssl`] subcommand has a new `--type`
parameter value, `network-listener`.
* The link:../reference-manual/create-virtual-server.html#GSRFM00062[`create-virtual-server`] SUBcommand has a new
parameter, `--networklisteners`.
* The link:../reference-manual/create-http-listener.html#GSRFM00030[`create-http-listener`] subcommand adds a
`network-listener` element to the domain configuration. The syntax and
options of this commands are unchanged.

[[gipfo]][[GSUPG00057]][[remapping-of-http-service-attributes-and-properties]]

Remapping of HTTP Service Attributes and Properties
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The following tables describe how attributes and properties in the HTTP
Service configuration for GlassFish Server 4.0 are remapped to
attributes in the Network Service configuration for older product
releases. If you use a configuration from a Sun GlassFish Enterprise
Server v2 or v3 release, this remapping happens automatically and then
discontinued elements are deleted.

[[sthref5]][[gipfy]]

Table 1-3 `com.sun.grizzly` Property Remapping

[width="100%",cols="<33%,<26%,<41%",options="header",]
|===
|`com.sun.grizzly` Property |New Owning Element |New Attribute Name
|`selector.timeout` |`transport` |`selector-poll-timeout-millis`
|`displayConfiguration` |`transport` |`display-configuration`
|`enableSnoop` |`transport` |`snoop-enabled`
|`readTimeout` |`transport` |`read-timeout-millis`
|`writeTimeout` |`transport` |`write-timeout-millis`
|===


[[sthref6]][[gipfn]]

Table 1-4 `connection-pool` Attribute Remapping

[width="100%",cols="<41%,<19%,<40%",options="header",]
|===
|`connection-pool` Attribute |New Owning Element |New Attribute Name
|`queue-size-in-bytes` |`thread-pool` |`max-queue-size`

|`max-pending-count` |`transport` |`max-connections-count`

|`receive-buffer-size-in-` `bytes` |`http` |`request-body-buffer-size-`
`bytes`

|`send-buffer-size-in-bytes` |`http` |`send-buffer-size-bytes`
|===


[[sthref7]][[gipcv]]

Table 1-5 `http-file-cache` Attribute Remapping

[width="100%",cols="<50%,<17%,<33%",options="header",]
|===
|`http-file-cache` Attribute |New Owning Element |New Attribute Name
|`file-caching-enabled` |`file-cache` |`enabled`
|`max-age-in-seconds` |`file-cache` |`max-age-seconds`
|`medium-file-space-in-bytes` |`file-cache` |`max-cache-size-bytes`
|`max-files-count` |`file-cache` |`max-files-count`
|`globally-enabled` |none |not supported
|`medium-file-size-limit-in-bytes` |none |not supported
|`small-file-size-limit-in-bytes` |none |not supported
|`small-file-space-in-bytes` |none |not supported
|`file-transmission-enabled` |none |not supported
|`hash-init-size` |none |not supported
|===


[[sthref8]][[gipev]]

Table 1-6 `http-listener` Attribute Remapping

[width="100%",cols="<37%,<27%,<36%",options="header",]
|===
|`http-listener` Attribute |New Owning Element |New Attribute Name
|`id` |`network-listener` |`name`
|`address` |`network-listener` |`address`
|`port` |`network-listener` |`port`
|`enabled` |`network-listener` |`enabled`
|`acceptor-threads` |`transport` |`acceptor-threads`
|`security-enabled` |`protocol` |`security-enabled`
|`default-virtual-server` |`http` |`default-virtual-server`
|`server-name` |`http` |`server-name`
|`redirect-port` |`http` |`redirect-port`
|`xpowered-by` |`http` |`xpowered-by`
|`external-port` |none |not supported
|`family` |none |not supported
|`blocking-enabled` |none |not supported
|===


[[sthref9]][[gipdo]]

Table 1-7 `http-listener` Property Remapping

[width="100%",cols="<43%,<15%,<42%",options="header",]
|===
|`http-listener` Property |New Owning Element |New Attribute Name
|`maxKeepAliveRequests` |`http` |`max-connections`

|`authPassthroughEnabled` |`http` |`auth-pass-through-enabled`

|`compression` |`http` |`compression`

|`compressableMimeType` |`http` |`compressable-mime-type`

|`noCompressionUserAgents` |`http` |`no-compression-user-agents`

|`compressionMinSize` |`http` |`compression-min-size-bytes`

|`restrictedUserAgents` |`http` |`restricted-user-agents`

|`cometSupport` |`http` |`comet-support-enabled`

|`connectionUploadTimeout` |`http` |`connection-upload-timeout-`
`millis`

|`disableUploadTimeout` |`http` |`upload-timeout-enabled`

|`chunkingDisabled` |`http` |`chunking-enabled`

|`uriEncoding` |`http` |`uri-encoding`

|`traceEnabled` |`http` |`trace-enabled`

|`rcmSupport` |`http` |`rcm-support-enabled`

|`jkEnabled` |`network-` `listener` |`jk-enabled`

|`crlFile` |`ssl` |`crl-file`

|`trustAlgorithm` |`ssl` |`trust-algorithm`

|`trustMaxCertLength` |`ssl` |`trust-max-cert-length-bytes`

|`tcpNoDelay` |`transport` |`tcp-no-delay`

|`bufferSize` |`transport` |`buffer-size-bytes`

|`use-nio-direct-bytebuffer` |`transport` |`byte-buffer-type`

|`proxyHandler` |none |not supported

|`proxiedProtocols` |none |not supported

|`recycle-objects` |none |not supported

|`reader-threads` |none |not supported

|`acceptor-queue-length` |none |not supported

|`reader-queue-length` |none |not supported

|`connectionTimeout` |none |not supported

|`monitoring-cache-enabled` |none |not supported

|`monitoring-cache-refresh-in-` `millis` |none |not supported

|`ssl-cache-entries` |none |not supported

|`ssl3-session-timeout` |none |not supported

|`ssl-session-timeout` |none |not supported
|===


[[sthref10]][[gipel]]

Table 1-8 `http-protocol` Attribute Remapping

[width="100%",cols="<34%,<33%,<33%",options="header",]
|===
|`http-protocol` Attribute |New Owning Element |New Attribute Name
|`version` |`http` |`version`
|`forced-response-type` |`http` |`forced-response-type`
|`default-response-type` |`http` |`default-response-type`
|`dns-lookup-enabled` |none |not supported
|`ssl-enabled` |none |not supported
|===


[[sthref11]][[gipfa]]

Table 1-9 `http-service` Property Remapping

[width="100%",cols="<34%,<33%,<33%",options="header",]
|===
|`http-service` Property |New Owning Element |New Attribute or Property
Name
|`accessLoggingEnabled` |`http-service`, `virtual-server`
|`access-logging-enabled` attribute

|`ssl-cache-entries` |`http-service` |unchanged property

|`ssl3-session-timeout` |`http-service` |unchanged property

|`ssl-session-timeout` |`http-service` |unchanged property

|`proxyHandler` |`http-service` |unchanged property

|`connectionTimeout` |`http-service` |unchanged property

|all other properties |none |not supported
|===


[[sthref12]][[gipea]]

Table 1-10 `keep-alive` Attribute Remapping

[width="100%",cols="<34%,<33%,<33%",options="header",]
|===
|`keep-alive` Attribute |New Owning Element |New Attribute Name
|`max-connections` |`http` |`max-connections`
|`timeout-in-seconds` |`http` |`timeout-seconds`
|`thread-count` |none |not supported
|===


[[sthref13]][[gipdh]]

Table 1-11 `request-processing` Attribute Remapping

[width="100%",cols="<43%,<18%,<39%",options="header",]
|===
|`request-processing` Attribute |New Owning Element |New Attribute Name
|`thread-count` |`thread-pool` |`max-thread-pool-size`
|`initial-thread-count` |`thread-pool` |`min-thread-pool-size`
|`header-buffer-length-in-bytes` |`http` |`header-buffer-length-bytes`
|`request-timeout-in-seconds` |`http` |`request-timeout-seconds`
|`thread-increment` |none |not supported
|===


[[sthref14]][[gipdv]]

Table 1-12 `ssl` Attribute Changes

[width="100%",cols="<34%,<22%,<44%",options="header",]
|===
|Previous Attribute or Property |Previous Owning Element |New `ssl`
Attribute
|none |none |`key-store`

|none |none |`trust-store`

|`crlFile` property |`http-listener` |`crl-file`

|`trustAlgorithm` property |`http-listener` |`trust-algorithm`

|`trustMaxCertLength` property |`http-listener`
|`trust-max-cert-length-bytes`

|all other `ssl` attributes |`ssl` |unchanged
|===


[[sthref15]][[gipcj]]

Table 1-13 `thread-pool` Attribute Changes

[width="100%",cols="<44%,<17%,<39%",options="header",]
|===
|Previous Attribute |Previous Owning Element |New `thread-pool`
Attribute
|none |none |`classname`

|none |none |`max-queue-size`

|`thread-pool-id` |`thread-pool` |`name`

|`idle-thread-timeout-in-seconds` |`thread-pool`
|`idle-thread-timeout-seconds`

|`num-work-queues` |`thread-pool` |not supported

|all other `thread-pool` attributes |`thread-pool` |unchanged
|===


[[sthref16]][[gipep]]

Table 1-14 `virtual-server` Attribute Changes

[width="100%",cols="<39%,<24%,<37%",options="header",]
|===
|Previous Attribute or Property |Previous Owning Element |New
`virtual-server` Attribute
|`http-listeners` attribute |`virtual-server` |`network-listeners`

|`accessLoggingEnabled` property |`http-service`
|`access-logging-enabled`

|`sso-enabled` property |`virtual-server` |`sso-enabled`

|`ssoCookieSecure` property |`virtual-server` |`sso-cookie-secure`

|all other `virtual-server` attributes |`virtual-server` |unchanged

|all other `virtual-server` properties |`virtual-server` |unchanged,
still properties
|===


[[gipcg]][[GSUPG00058]][[new-network-service-elements-and-attributes]]

New Network Service Elements and Attributes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The following tables describe the Network Service elements and
attributes that were introduced in Sun GlassFish Enterprise Server v3.
For attributes and properties remapped from discontinued elements to new
elements, see link:#gipfo[Remapping of HTTP Service Attributes and
Properties].

The new `file-cache` element has no new attributes. All of its
attributes are remapped from the `http-file-cache` element. For details,
see link:#gipcv[Table 1-5].

[[sthref17]][[gipds]]

Table 1-15 New `http` Attributes

[width="100%",cols="<28%,<32%,<40%",options="header",]
|===
|Attribute |Default |Description
|`adapter` |`com.sun.grizzly.tcp. StaticResourcesAdapter` |(Optional)
Specifies the class name of the static resources adapter.

|`max-post-size-bytes` |`2097152` |(Optional) Specifies the maximum size
of `POST` actions.
|===


For remapped `http` attributes, see link:#gipfn[Table 1-4],
link:#gipev[Table 1-6], link:#gipdo[Table 1-7], link:#gipel[Table 1-8],
link:#gipea[Table 1-10], and link:#gipdh[Table 1-11].

[[sthref18]][[gipey]]

Table 1-16 New `network-listener` Attributes

[width="100%",cols="<18%,<11%,<71%",options="header",]
|===
|Attribute |Default |Description
|`protocol` |none |Specifies the `name` of the `protocol` associated
with this `network-listener`. Although this attribute is required, a
`protocol` is automatically created with the same `name` as the
`network-listener` when you use `asadmin create-http-listener` to create
a `network-listener`.

|`thread-pool` |none |(Optional) Specifies the `name` of the
`thread-pool` associated with this `network-listener`.

|`transport` |none |Specifies the `name` of the `transport` associated
with this `network-listener`. Although this attribute is required, the
default `transport` is used when you use `asadmin create-http-listener`
to create a `network-listener`.
|===


For remapped `network-listener` attributes, see link:#gipev[Table 1-6].

[[sthref19]][[gipfg]]

Table 1-17 New `port-unification` Attributes

[width="100%",cols="<19%,<16%,<65%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the `port-unification`.

|`classname` |none |Specifies the class name of the `port-unification`
implementation.
|===


[[sthref20]][[gipdj]]

Table 1-18 New `protocol` Attributes

[width="100%",cols="<18%,<17%,<65%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the `protocol`.
|===


For remapped `protocol` attributes, see link:#gipev[Table 1-6].

[[sthref21]][[gipcr]]

Table 1-19 New `protocol-chain` Attributes

[width="100%",cols="<19%,<17%,<64%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the `protocol-chain`.

|`classname` |none |Specifies the class name of the `protocol-chain`
implementation.

|`type` |`STATELESS` |Specifies the type of protocol chain.
|===


[[sthref22]][[gipfq]]

Table 1-20 New `protocol-chain-instance-handler` Attributes

[width="100%",cols="<19%,<17%,<64%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the
`protocol-chain-instance-handler`.

|`classname` |none |Specifies the class name of the
`protocol-chain-instance-handler` implementation.
|===


[[sthref23]][[gipeq]]

Table 1-21 New `protocol-filter` Attributes

[width="100%",cols="<19%,<17%,<64%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the `protocol-filter`.

|`classname` |none |Specifies the class name of the `protocol-filter`
implementation.
|===


[[sthref24]][[gipfd]]

Table 1-22 New `protocol-finder` Attributes

[width="100%",cols="<19%,<17%,<64%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the `protocol-finder`.

|`classname` |none |Specifies the class name of the `protocol-finder`
implementation.

|`protocol` |none |Specifies the `name` of the `protocol` associated
with this `protocol-finder`.
|===


[[sthref25]][[gipft]]

Table 1-23 New `selection-key-handler` Attributes

[width="100%",cols="<19%,<16%,<65%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the `selection-key-handler`.

|`classname` |none |Specifies the class name of the
`selection-key-handler` implementation.
|===


[[sthref26]][[gipfi]]

Table 1-24 New `ssl` Attributes

[width="100%",cols="<19%,<17%,<64%",options="header",]
|===
|Attribute |Default |Description
|`key-store` |none |(Optional) Specifies a key store.
|`trust-store` |none |(Optional) Specifies a trust store.
|===


For remapped `ssl` attributes, see link:#gipdv[Table 1-12].

[[sthref27]][[gipcc]]

Table 1-25 New `thread-pool` Attributes

[width="100%",cols="<21%,<32%,<47%",options="header",]
|===
|Attribute |Default |Description
|`classname` |`com.sun.grizzly.http.StatsThreadPool` |(Optional)
Specifies the class name of the `thread-pool` implementation.

|`max-queue-size` |`-1` |(Optional) Specifies the maximum number of
messages that can be queued until threads are available to process them.
A value of `-1` specifies no limit.
|===


For remapped `thread-pool` attributes, see link:#gipfn[Table 1-4],
link:#gipdh[Table 1-11], and link:#gipcj[Table 1-13].

[[sthref28]][[gipem]]

Table 1-26 New `transport` Attributes

[width="100%",cols="<35%,<27%,<38%",options="header",]
|===
|Attribute |Default |Description
|`name` |none |Specifies a unique name for the `transport`.

|`classname` |`com.sun.grizzly. TCPSelectorHandler` |(Optional)
Specifies the class name of the `transport` implementation.

|`selection-key-handler` |none |(Optional) Specifies the `name` of the
`selection-key-handler` associated with this `transport`.

|`idle-key-timeout-seconds` |`30` |(Optional) Specifies the idle key
timeout.
|===


For remapped `transport` attributes, see link:#gipfy[Table 1-3],
link:#gipfn[Table 1-4], link:#gipev[Table 1-6], and link:#gipdo[Table
1-7].

[[gktkt]][[GSUPG00038]][[nss-cryptographic-token-support]]

NSS Cryptographic Token Support
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

GlassFish Server 4.0 does not support Network Security Services (NSS)
cryptographic tokens. When upgrading to GlassFish Server 4.0 from
Enterprise Server v2.x, additional manual configuration steps must be
performed. These steps are explained later in this guide, in
link:upgrading-legacy-installation.html#gktnh[Upgrading Installations
That Use NSS Cryptographic Tokens].
