type=page
status=published
title=Administering EIS Connectivity
next=http_https.html
prev=jdbc.html
~~~~~~
Administering EIS Connectivity
==============================

[[GSADG00016]][[abllp]]


[[administering-eis-connectivity]]
12 Administering EIS Connectivity
---------------------------------

This chapter provides information and procedures for administering
connections to enterprise information system (EIS) data in the Oracle
GlassFish Server 5.0 environment by using the `asadmin` command-line
utility.


[NOTE]
=======================================================================

If you installed the Web Profile, connector modules that use only
outbound communication features and work-management that does not
involve inbound communication features are supported. Other connector
features are supported only in the Full Platform Profile.

=======================================================================


The following topics are addressed here:

* link:#abllq[About EIS Connectivity]
* link:#ablls[Administering Connector Connection Pools]
* link:#abllx[Administering Connector Resources]
* link:#giope[Administering the Resource Adapter Configuration]
* link:#gitxy[Administering Connector Security Maps]
* link:#giohl[Administering Connector Work Security Maps]
* link:#ablmc[Administering Administered Objects]

Instructions for accomplishing the tasks in this chapter by using the
Administration Console are contained in the Administration Console
online help.

For information about database connectivity, see
link:jdbc.html#ablih[Administering Database Connectivity].

[[abllq]][[GSADG00580]][[about-eis-connectivity]]

About EIS Connectivity
~~~~~~~~~~~~~~~~~~~~~~

Enterprise information system (EIS) refers to any system that holds the
data of an organization. It can be a mainframe, a messaging system, a
database system, or an application. Connection resources are used by
applications and modules to access EIS software.)

The key elements of EIS connectivity are the following:

* Connector Module. A connector module, also called a resource adapter,
is a Java EE component that enables applications to interact with EIS
software. A connector module is used by GlassFish Server to implement
Java Message Service (JMS). Like other Java EE modules, a connector
module is installed when it is deployed. For instructions on creating a
connector module, see "link:../application-development-guide/connectors.html#GSDVG00013[Developing Connectors]" in
GlassFish Server Open Source Edition Application Development Guide.
* Connector Connection Pool. A connector connection pool is a group of
reusable connections for a particular EIS. A connector connection pool
is created when you specify the connector module that is associated with
the pool. For administration procedures, see link:#ablls[Administering
Connector Connection Pools].
* Connector Resource. A connector resource is a program object that
provides an application with a connection to an EIS. A connector
resource is created when you specify its JNDI name and its associated
connection pool. The JNDI name of a connector resource for an EIS is
usually in the `java:comp/env/`eis-specific subcontext. For
administration procedures, see link:#abllx[Administering Connector
Resources].
* Connector Module Configuration. A connector module configuration is
the information that resides in the domain configuration file
(`domain.xml`) for the particular connector module (resource adapter).
For administration procedures, see link:#giope[Administering the
Resource Adapter Configuration].
* Connector Security Map. A connector security map associates the caller
identity of the application (principal or user group) to a suitable EIS
principal or group. For administration procedures, see
link:#gitxy[Administering Connector Security Maps].
* Connector Work Security Map. A connector work security map associates
the caller identity of the work submitted by the connector module
(resource adapter) EIS principal or EIS user group to a suitable
principal or user group in the GlassFish Server security domain. For
administration procedures, see link:#giohl[Administering Connector Work
Security Maps].
* Administered Object. An administered object provides specialized
functionality for an application, such as providing access to a parser
that is specific to the connector module and its associated EIS. For
administration procedures, see link:#ablmc[Administering Administered
Objects].

At runtime, the following sequence occurs when an application connects
to an EIS:

1.  The application gets the connector resource (data source) associated
with the EIS by making a call through the JNDI API. +
Using the JNDI name of the connector resource, the naming and directory
service locates the resource. Each EIS resource specifies a connector
connection pool.
2.  Using the connector resource, the application gets an EIS
connection. +
GlassFish Server retrieves a physical connection from the connection
pool that corresponds to the EIS resource. The pool defines connection
attributes such as the EIS name, user name, and password.
3.  After the EIS connection is established, the application can read,
modify, and add data to the EIS. +
The application accesses the EIS information by making calls to the JMS
API.
4.  When the application is finished accessing the EIS, the application
closes the connection and returns the connection to the connection pool.

[[ablls]][[GSADG00581]][[administering-connector-connection-pools]]

Administering Connector Connection Pools
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

After a connector module has been deployed, you are ready to create a
connector connection pool for it.

The following topics are addressed here:

* link:#gioce[To Create a Connector Connection Pool]
* link:#giocg[To List Connector Connection Pools]
* link:#gjiqz[To Connect to (Ping) or Reset (Flush) a Connector
Connection Pool]
* link:#gioti[To Update a Connector Connection Pool]
* link:#giocp[To Delete a Connector Connection Pool]

[[gioce]][[GSADG00431]][[to-create-a-connector-connection-pool]]

To Create a Connector Connection Pool
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-connector-connection-pool` subcommand in remote mode to
create a connector connection pool for a deployed connector module. When
you are building the connector connection pool, certain data specific to
the EIS will be required. The value in the mandatory
`--connectiondefintion` option provides the EIS info.

Multiple connector resources can specify a single connection pool.

Creating a connector connection pool is a dynamic event and does not
require server restart. However, there are some parameters that do
require server restart. See link:overview.html#ghciy[Configuration
Changes That Require Restart].

[[GSADG968]]

Before You Begin

Before creating the connector connection pool, the connector must be
installed.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Create the connector connection pool by using the
link:../reference-manual/create-connector-connection-pool.html#GSRFM00018[`create-connector-connection-pool`] subcommand. +
Information about properties for the subcommand is included in this help
page.
3.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].
4.  You can verify that a connection pool is usable by using the
`ping-connection-pool` subcommand. +
For instructions, see link:jdbc.html#ggnwn[To Contact (Ping) a Connection
Pool].

[[GSADG00223]][[giocc]]


Example 12-1 Creating a Connector Connection Pool

This example creates the new `jms/qConnPool` pool for the
`jakarta.jms.QueueConnectionFactory` connector module.

[source,oac_no_warn]
----
asadmin> create-connector-connection-pool --steadypoolsize 20 --maxpoolsize 100 
--poolresize 2 --maxwait 60000 --raname jmsra --connectiondefinition 
jakarta.jms.QueueConnectionFactory jms/qConnPool

Command create-connector-connection-pool executed successfully
----

[[GSADG969]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-connector-connection-pool` at the command
line.

[[giocg]][[GSADG00432]][[to-list-connector-connection-pools]]

To List Connector Connection Pools
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-connector-connection-pools` subcommand in remote mode to
list the pools that have been created.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the connector connection pools by using the
link:../reference-manual/list-connector-connection-pools.html#GSRFM00157[`list-connector-connection-pools`] subcommand.

[[GSADG00224]][[giody]]


Example 12-2 Listing Connector Connection Pools

This example lists the existing connector connection pools.

[source,oac_no_warn]
----
asadmin> list-connector-connection-pools
jms/qConnPool
Command list-connector-connection-pools executed successfully
----

[[GSADG970]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-connector-connection-pools` at the command
line.

[[gjiqz]][[GSADG00433]][[to-connect-to-ping-or-reset-flush-a-connector-connection-pool]]

To Connect to (Ping) or Reset (Flush) a Connector Connection Pool
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `ping-connection-pool` or `flush-connection-pool` subcommands in
remote mode to perform these tasks on a connection pools. See
link:jdbc.html#ggnwn[To Contact (Ping) a Connection Pool] or
link:jdbc.html#gjiqp[To Reset (Flush) a Connection Pool] for
instructions.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Connect to or reset a connector connection pool by using the
link:../reference-manual/flush-connection-pool.html#GSRFM00135[`flush-connection-pool`] subcommand or the
link:../reference-manual/ping-connection-pool.html#GSRFM00214[`ping-connection-pool`] subcommand.

[[gioti]][[GSADG00434]][[to-update-a-connector-connection-pool]]

To Update a Connector Connection Pool
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `get` and `set` subcommands to view and change the values of the
connector connection pool properties.

1.  List the connector connection pools by using the
link:../reference-manual/list-connector-connection-pools.html#GSRFM00157[`list-connector-connection-pools`] subcommand.
2.  View the properties of the connector connection pool by using the
link:../reference-manual/get.html#GSRFM00139[`get`] subcommand. +
For example: +
[source,oac_no_warn]
----
asadmin> get domain.resources.connector-connection-pool.conectionpoolname.*
----
3.  Set the property of the connector connection pool by using the
link:../reference-manual/set.html#GSRFM00226[`set`] subcommand. +
For example: +
[source,oac_no_warn]
----
asadmin> set domain.resources.connector-connection-pool
.conectionpoolname.validate-atmost-once-period-in-seconds=3
----
4.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[giocp]][[GSADG00435]][[to-delete-a-connector-connection-pool]]

To Delete a Connector Connection Pool
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-connector-connection-pool` subcommand in remote mode to
remove a connector connection pool.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the connector connection pools by using the
link:../reference-manual/list-connector-connection-pools.html#GSRFM00157[`list-connector-connection-pools`] subcommand.
3.  If necessary, notify users that the connector connection pool is
being deleted.
4.  Delete the connector connection pool by using the
link:../reference-manual/delete-connector-connection-pool.html#GSRFM00070[`delete-connector-connection-pool`] subcommand.

[[GSADG00225]][[giohd]]


Example 12-3 Deleting a Connector Connection Pool

This example deletes the connection pool named `jms/qConnPool`.

[source,oac_no_warn]
----
asadmin> delete-connector-connection-pool --cascade=false jms/qConnPool
Command delete-connector-connection-pool executed successfully
----

[[GSADG971]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-connector-connection-pool` at the command
line.

[[abllx]][[GSADG00582]][[administering-connector-resources]]

Administering Connector Resources
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

A connector resource provides an application or module with the means of
connecting to an EIS. Typically, you create a connector resource for
each EIS that is accessed by the applications deployed in the domain.

The following topics are addressed here:

* link:#giogt[To Create a Connector Resource]
* link:#giohs[To List Connector Resources]
* link:#giosg[To Update a Connector Resource]
* link:#giofs[To Delete a Connector Resource]

[[giogt]][[GSADG00436]][[to-create-a-connector-resource]]

To Create a Connector Resource
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-connector-resource` subcommand in remote mode to
register a new connector resource with its JNDI name.

Creating a connector resource is a dynamic event and does not require
server restart. However, there are some parameters that do require
server restart. See link:overview.html#ghciy[Configuration Changes That
Require Restart].

[[GSADG972]]

Before You Begin

Before creating a connector resource, you must first create a connector
connection pool. For instructions, see link:#gioce[To Create a Connector
Connection Pool].

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Create the connector resource by using the
link:../reference-manual/create-connector-resource.html#GSRFM00019[`create-connector-resource`] subcommand. +
Information about properties for the subcommand is included in this help
page.
3.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[GSADG00226]][[giogn]]


Example 12-4 Creating a Connector Resource

This example creates a new resource named `jms/qConnFactory` for the
`jms/qConnPool` connection pool.

[source,oac_no_warn]
----
asadmin> create-connector-resource --poolname jms/qConnPool 
--description "creating sample connector resource" jms/qConnFactory
Command create-connector-resource executed successfully
----

[[GSADG973]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-connector-resource` at the command line.

[[giohs]][[GSADG00437]][[to-list-connector-resources]]

To List Connector Resources
^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-connector-resources` subcommand in remote mode to list the
connector resources that have been created.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the connector connection pools by using the
link:../reference-manual/list-connector-resources.html#GSRFM00158[`list-connector-resources`] subcommand.

[[GSADG00227]][[gioia]]


Example 12-5 Listing Connector Resources

This example lists the existing connector resources.

[source,oac_no_warn]
----
asadmin> list-connector-resources
jms/qConnFactory
Command list-connector-resources executed successfully
----

[[GSADG974]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-connector-resources` at the command line.

[[giosg]][[GSADG00438]][[to-update-a-connector-resource]]

To Update a Connector Resource
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `get` and `set` subcommands to view and change the values of the
connector resource properties.

1.  List the connector connection pools by using the
link:../reference-manual/list-connector-resources.html#GSRFM00158[`list-connector-resources`] subcommand.
2.  View the properties of the connector resource by using the
link:../reference-manual/get.html#GSRFM00139[`get`] subcommand. +
For example +
[source,oac_no_warn]
----
asadmin> get domain.resources.connector-resource.jms/qConnFactory
----
3.  Set the property of the connector resource by using the
link:../reference-manual/set.html#GSRFM00226[`set`] subcommand. +
For example: +
[source,oac_no_warn]
----
asadmin> set domain.resources.connector-resource.jms/qConnFactory.enabled=true
----
4.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[giofs]][[GSADG00439]][[to-delete-a-connector-resource]]

To Delete a Connector Resource
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-connector-resource` subcommand in remote mode to remove
a connector resource by specifying the JNDI name.

[[GSADG975]]

Before You Begin

Before deleting a resource, all associations with the resource must be
removed.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the connector connection pools by using the
link:../reference-manual/list-connector-resources.html#GSRFM00158[`list-connector-resources`] subcommand.
3.  If necessary, notify users that the connector resource is being
deleted.
4.  Delete the connector resource by using the
link:../reference-manual/delete-connector-resource.html#GSRFM00071[`delete-connector-resource`] subcommand.

[[GSADG00228]][[giokh]]


Example 12-6 Deleting a Connector Resource

This example deletes the `jms/qConnFactory` connector resource.

[source,oac_no_warn]
----
asadmin> delete-connector-resource jms/qConnFactory 
Command delete-connector-resources executed successfully
----

[[GSADG976]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-connector-resource` at the command line.

[[giope]][[GSADG00583]][[administering-the-resource-adapter-configuration]]

Administering the Resource Adapter Configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The following topics are addressed here:

* link:#gioqx[To Create Configuration Information for a Resource
Adapter]
* link:#giorn[To List Resource Adapter Configurations]
* link:#gioum[To Update a Resource Adapter Configuration]
* link:#gionv[To Delete a Resource Adapter Configuration]

[[gioqx]][[GSADG00440]][[to-create-configuration-information-for-a-resource-adapter]]

To Create Configuration Information for a Resource Adapter
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-resource-adapter-config` subcommand in remote mode to
create configuration information for a resource adapter, also known as a
connector module. You can run the subcommand before deploying a resource
adapter, so that the configuration information is available at the time
of deployment. The resource adapter configuration can also be created
after the resource adapter is deployed. In this situation, the resource
adapter is restarted with the new configuration.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Create configuration information by using the
link:../reference-manual/create-resource-adapter-config.html#GSRFM00054[`create-resource-adapter-config`] subcommand. +
Information about properties for the subcommand is included in this help
page.

[[GSADG00229]][[gionp]]


Example 12-7 Creating a Resource Adapter Configuration

This example creates the configuration for resource adapter `ra1`.

[source,oac_no_warn]
----
asadmin> create-resource-adapter-config --property foo=bar 
--threadpoolid mycustomerthreadpool ra1
Command create-resource-adapter-config executed successfully
----

[[GSADG977]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-resource-adapter-config` at the command
line.

[[giorn]][[GSADG00441]][[to-list-resource-adapter-configurations]]

To List Resource Adapter Configurations
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-resource-adapter-configs` subcommand in remote mode to
list the configuration information contained in the domain configuration
file (`domain.xml`) for the specified resource adapter (connector
module).

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the configurations for a resource adapter by using the
link:../reference-manual/list-resource-adapter-configs.html#GSRFM00196[`list-resource-adapter-configs`] subcommand.

[[GSADG00230]][[gioof]]


Example 12-8 Listing Configurations for a Resource Adapter

This example lists all the resource adapter configurations.

[source,oac_no_warn]
----
asadmin> list-resource-adapter-configs
ra1
ra2
Command list-resource-adapter-configs executed successfully
----

[[GSADG978]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-resource-adapter-configs` at the command line.

[[gioum]][[GSADG00442]][[to-update-a-resource-adapter-configuration]]

To Update a Resource Adapter Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `get` and `set` subcommands to view and change the values of the
resource adapter configuration properties.

1.  List the configurations for a resource adapter by using the
link:../reference-manual/list-resource-adapter-configs.html#GSRFM00196[`list-resource-adapter-configs`] subcommand.
2.  View the properties of the connector resource by using the
link:../reference-manual/get.html#GSRFM00139[`get`] subcommand. +
For example: +
[source,oac_no_warn]
----
asadmin>get domain.resources.resource-adapter-config.ra1.*
----
3.  Set the property of the connector resource by using the
link:../reference-manual/set.html#GSRFM00226[`set`] subcommand. +
For example: +
[source,oac_no_warn]
----
asadmin> set domain.resources.resource-adapter-config.ra1.raSpecificProperty=value
----

[[gionv]][[GSADG00443]][[to-delete-a-resource-adapter-configuration]]

To Delete a Resource Adapter Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-resource-adapter-config` subcommand in remote mode to
delete the configuration information contained in the domain
configuration file (`domain.xml`) for a specified resource adapter
(connector module).

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the configurations for a resource adapter by using the
link:../reference-manual/list-resource-adapter-configs.html#GSRFM00196[`list-resource-adapter-configs`] subcommand.
3.  Delete the configuration for a resource adapter by using the
link:../reference-manual/delete-resource-adapter-config.html#GSRFM00106[`delete-resource-adapter-config`] subcommand.

[[GSADG00231]][[giorj]]


Example 12-9 Deleting a Resource Adapter Configuration

This example deletes the configuration for resource adapter `ra1`.

[source,oac_no_warn]
----
asadmin> delete-resource-adapter-config ra1
Command delete-resource-adapter-config executed successfully
----

[[GSADG979]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-resource-adapter-config` at the command
line.

[[gitxy]][[GSADG00584]][[administering-connector-security-maps]]

Administering Connector Security Maps
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The EIS is any system that holds the data of an organization. It can be
a mainframe, a messaging system, a database system, or an application.
The connector security map is used to map the application's credentials
to the EIS credentials.

A security map applies to a particular connector connection pool. One or
more named security maps can be associated with a connector connection
pool.

The following topics are addressed here:

* link:#gitzz[To Create a Connector Security Map]
* link:#gitwx[To List Connector Security Maps]
* link:#gityj[To Update a Connector Security Map]
* link:#gitvf[To Delete a Connector Security Map]

[[gitzz]][[GSADG00444]][[to-create-a-connector-security-map]]

To Create a Connector Security Map
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-connector-security-map` subcommand in remote mode to
create a security map for the specified connector connection pool. If
the security map is not present, a new one is created. You can specify
back-end EIS principals or back-end EIS user groups. The connector
security map configuration supports the use of the wild card asterisk
(*) to indicate all users or all user groups.

You can also use this subcommand to map the caller identity of the
application (principal or user group) to a suitable EIS principal in
container-managed authentication scenarios.

[[GSADG980]]

Before You Begin

For this subcommand to succeed, you must have first created a connector
connection pool. For instructions, see link:#gioce[To Create a Connector
Connection Pool].

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Create a connector security map by using the
link:../reference-manual/create-connector-security-map.html#GSRFM00020[`create-connector-security-map`] subcommand. +
Information about the options for the subcommand is included in this
help page.
3.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[GSADG00232]][[giuxc]]


Example 12-10 Creating a Connector Security Map

This example creates a connector security map `securityMap1` for
`connection-pool1`.

[source,oac_no_warn]
----
asadmin> create-connector-security-map --poolname connector-pool1 
--principals principal1, principal2 --mappedusername backend-username securityMap1
Command create-connector-security-map executed successfully
----

[[gitwx]][[GSADG00445]][[to-list-connector-security-maps]]

To List Connector Security Maps
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-connector-security-maps` subcommand in remote mode to list
the existing security maps belonging to the specified connector
connection pool. You can get a simple listing of the connector security
maps for a connector connection pool, or you can get a more
comprehensive listing that shows the principals of the map.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List existing connector connection pools by using the
link:../reference-manual/list-connector-connection-pools.html#GSRFM00157[`list-connector-connection-pools`] subcommand.
3.  List the security maps for a specific connector connection pool by
using the link:../reference-manual/list-connector-security-maps.html#GSRFM00159[`list-connector-security-maps`] subcommand.

[[GSADG00233]][[giuwj]]


Example 12-11 Listing All Connector Security Maps for a Connector
Connection Pool

This example lists the connector security maps associated with
`connector-Pool1`.

[source,oac_no_warn]
----
asadmin> list-connector-security-maps connector-Pool1
securityMap1 
Command list-connector-security-maps executed successfully.
----

[[GSADG00234]][[giuyc]]


Example 12-12 Listing Principals for a Specific Security Map for a
Connector Connection Pool

This example lists the principals associated with `securityMap1`.

[source,oac_no_warn]
----
asadmin> list-connector-security-maps --securitymap securityMap1 connector-Pool1
principal1
principal1
Command list-connector-security-maps executed successfully.
----

[[GSADG00235]][[giuuf]]


Example 12-13 Listing Principals of All Connector Security Maps for a
Connector Connection Pool

This example lists the connector security maps associated with
`connector-Pool1`.

[source,oac_no_warn]
----
asadmin> list-connector-security-maps --verbose connector-Pool1
securityMap1
principal1
principal1
Command list-connector-security-maps executed successfully.
----

[[gityj]][[GSADG00446]][[to-update-a-connector-security-map]]

To Update a Connector Security Map
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `update-connector-security-map` subcommand in remote mode to
create or modify a security map for the specified connector connection
pool.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List existing connector security maps by using the
link:../reference-manual/list-connector-security-maps.html#GSRFM00159[`list-connector-security-maps`] subcommand.
3.  Modify a security map for a specific connector connection pool by
using the link:../reference-manual/update-connector-security-map.html#GSRFM00252[`update-connector-security-map`] subcommand.
4.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[GSADG00236]][[giuwi]]


Example 12-14 Updating a Connector Security Map

This example adds principals to `securityMap1`.

[source,oac_no_warn]
----
asadmin> update-connector-security-map --poolname connector-pool1 
--addprincipals principal1, principal2 securityMap1
Command update-connector-security-map executed successfully.
----

[[gitvf]][[GSADG00447]][[to-delete-a-connector-security-map]]

To Delete a Connector Security Map
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-connector-security-map` subcommand in remote mode to
delete a security map for the specified connector connection pool.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List existing connector connection pools by using the
link:../reference-manual/list-connector-connection-pools.html#GSRFM00157[`list-connector-connection-pools`] subcommand.
3.  Delete a security map for a specific connector connection pool by
using the link:../reference-manual/delete-connector-security-map.html#GSRFM00072[`delete-connector-security-map`] subcommand. +
Information about options for this subcommand is included in this help
page.

[[GSADG00237]][[giuvr]]


Example 12-15 Deleting a Connector Security Map

This example deletes `securityMap1` from `connector-pool1`.

[source,oac_no_warn]
----
asadmin> delete-connector-security-map --poolname connector-pool1 securityMap1

Command delete-connector-security-map executed successfully
----

[[giohl]][[GSADG00585]][[administering-connector-work-security-maps]]

Administering Connector Work Security Maps
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The EIS is any system that holds the data of an organization. It can be
a mainframe, a messaging system, a database system, or an application.
The connector work security map is used to is used to map the EIS
credentials to the credentials of GlassFish Server security domain.

A security map applies to a particular connector connection pool. One or
more named security maps can be associated with a connector connection
pool.

The following topics are addressed here:

* link:#giofz[To Create a Connector Work Security Map]
* link:#gioir[To List Connector Work Security Maps]
* link:#giogm[To Update a Connector Work Security Map]
* link:#gioin[To Delete a Connector Work Security Map]

[[giofz]][[GSADG00448]][[to-create-a-connector-work-security-map]]

To Create a Connector Work Security Map
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-connector-work-security-map` subcommand in remote mode
to map the caller identity of the work submitted by the connector module
(resource adapter) EIS principal or EIS user group to a suitable
principal or user group in the GlassFish Server security domain. One or
more work security maps can be associated with a connector module.

The connector security map configuration supports the use of the wild
card asterisk (*) to indicate all users or all user groups.

[[GSADG981]]

Before You Begin

Before creating a connector work security map, you must first create a
connector connection pool. For instructions, see link:#gioce[To Create a
Connector Connection Pool].

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  Create the connector work security map by using the
link:../reference-manual/create-connector-work-security-m.html#GSRFM00021[`create-connector-work-security-map`] subcommand. +
Information about properties for the subcommand is included in this help
page.
3.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[GSADG00238]][[giokw]]


Example 12-16 Creating Connector Work Security Maps

The following examples create `workSecurityMap1` and `workSecurityMap2`
for `my-resource-adapter-name`.

[source,oac_no_warn]
----
asadmin> create-connector-work-security-map --raname my-resource-adapter-name 
--principalsmap eis-principal-1=server-principal-1,eis-principal-2=server-principal-2, 
eis-principal-3=server-principal-1 workSecurityMap1

asadmin> create-connector-work-security-map --raname my-resource-adapter-name
--groupsmap eis-group-1=server-group-1,eis-group-2=server-group-2,
eis-group-3=server-group-1 workSecurityMap2
Command create-connector-work-security-map executed successfully
----

[[GSADG982]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-connector-work-security-map` at the command
line.

[[gioir]][[GSADG00449]][[to-list-connector-work-security-maps]]

To List Connector Work Security Maps
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-connector-work-security-maps` subcommand in remote mode to
list the work security maps that belong to a specific connector module.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the connector work security maps by using the
link:../reference-manual/list-connector-work-security-map.html#GSRFM00160[`list-connector-work-security-maps`] subcommand.

[[GSADG00239]][[gionj]]


Example 12-17 Listing the Connector Work Security Maps

This example lists the generic work security maps.

[source,oac_no_warn]
----
asadmin> list-connector-work-security-maps generic-ra
generic-ra-groups-map: EIS group=eis-group, mapped group=glassfish-group
generic-ra-principals-map: EIS principal=eis-bar, mapped principal=bar
generic-ra-principals-map: EIS principal=eis-foo, mapped principal=foo
Command list-connector-work-security-maps executed successfully.
----

[[GSADG983]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-connector-work-security-maps` at the command
line.

[[giogm]][[GSADG00450]][[to-update-a-connector-work-security-map]]

To Update a Connector Work Security Map
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `update-connector-work-security-map` subcommand in remote to
modify a work security map that belongs to a specific resource adapter
(connector module).

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the connector work security maps by using the
link:../reference-manual/list-connector-work-security-map.html#GSRFM00160[`list-connector-work-security-maps`] subcommand.
3.  If necessary, notify users that the connector work security map is
being modified.
4.  Update a connector work security map by using the
link:../reference-manual/update-connector-work-security-m.html#GSRFM00253[`update-connector-work-security-map`] subcommand.

[[GSADG00240]][[gioll]]


Example 12-18 Updating a Connector Work Security Map

This example removes a principal from a work security map.

[source,oac_no_warn]
----
asadmin> update-connector-work-security-map --raname generic-ra
--removeprincipals eis-foo generic-ra-principals-map
Command update-connector-work-security-map executed successfully.
----

[[GSADG984]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help update-connector-work-security-map` at the command
line.

[[gioin]][[GSADG00451]][[to-delete-a-connector-work-security-map]]

To Delete a Connector Work Security Map
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-connector-work-security-map` subcommand in remote mode
to delete a work security map that belongs to a specific connector
module (resource adapter).

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the connector work security maps by using the
link:../reference-manual/list-connector-work-security-map.html#GSRFM00160[`list-connector-work-security-maps`] subcommand.
3.  Delete a connector work security map by using the
link:../reference-manual/delete-connector-work-security-m.html#GSRFM00073[`delete-connector-work-security-map`] subcommand.

[[GSADG00241]][[giolk]]


Example 12-19 Deleting a Connector Work Security Map

This example deletes the `worksecuritymap1` map from the `my_ra`
connector module.

[source,oac_no_warn]
----
asadmin> delete-connector-work-security-map --raname my_ra worksecuritymap1
Command delete-connector-work-security-map executed successfully.
----

[[GSADG985]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-connector-work-security-map` at the command
line.

[[ablmc]][[GSADG00586]][[administering-administered-objects]]

Administering Administered Objects
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Packaged within a connector module, an administered object provides
specialized functionality for an application. For example, an
administered object might provide access to a parser that is specific to
the connector module and its associated EIS.

The following topics are addressed here:

* link:#giolr[To Create an Administered Object]
* link:#giokm[To List Administered Objects]
* link:#giots[To Update an Administered Object]
* link:#gioma[To Delete an Administered Object]

[[giolr]][[GSADG00452]][[to-create-an-administered-object]]

To Create an Administered Object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `create-admin-object` subcommand to create an administered
object resource. When creating an administered object resource,
name-value pairs are created, and the object is associated to a JNDI
name.

[[GSADG986]]

Before You Begin

The resource adapter must be deployed before running this subcommand
(`jmsrar.rar`).

1.  Create an administered object by using the
link:../reference-manual/create-admin-object.html#GSRFM00012[`create-admin-object`] subcommand. +
Information about properties for the subcommand is included in this help
page.
2.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[GSADG00242]][[giokx]]


Example 12-20 Creating an Administered Object

For this example, the `jakarta.jms.Queue` resource type is obtained from
the `ra.xml` file. The JNDI name of the new administered object is
`jms/samplequeue`.

[source,oac_no_warn]
----
asadmin> create-admin-object --restype jakarta.jms.Queue --raname jmsra
--description "sample administered object" --property Name=sample_jmsqueue jms/samplequeue
Command create-admin-object executed successfully
----

[[GSADG987]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-admin-object` at the command line.

[[giokm]][[GSADG00453]][[to-list-administered-objects]]

To List Administered Objects
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `list-admin-object` subcommand in remote mode to list the
existing administered objects.

1.  Ensure that the server is running. +
Remote subcommands require a running server.
2.  List the administered objects by using the
link:../reference-manual/list-admin-objects.html#GSRFM00146[`list-admin-objects`] subcommand.

[[GSADG00243]][[giokg]]


Example 12-21 Listing Administered Objects

This example lists the existing administered objects.

[source,oac_no_warn]
----
asadmin> list-admin-objects
jms/samplequeue
Command list-admin-objects executed successfully
----

[[GSADG988]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help list-admin-object` at the command line.

[[giots]][[GSADG00454]][[to-update-an-administered-object]]

To Update an Administered Object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `get` and `set` subcommands to view and change the values of the
administered objects properties.

1.  List the administered objects by using the
link:../reference-manual/list-admin-objects.html#GSRFM00146[`list-admin-objects`] subcommand.
2.  View the properties of the administered object by using the
link:../reference-manual/get.html#GSRFM00139[`get`] subcommand. +
For example: +
[source,oac_no_warn]
----
asadmin> get domain.resources.admin-object-resource.jms/samplequeue.* 
----
3.  Set the property of the administered object by using the
link:../reference-manual/set.html#GSRFM00226[`set`] subcommand. +
For example: +
[source,oac_no_warn]
----
asadmin> set domain.resources.admin-object-resource.jms/samplequeue.enabled=false
----
4.  If needed, restart the server. +
Some properties require server restart. See
link:overview.html#ghciy[Configuration Changes That Require Restart]. If
your server needs to be restarted, see link:domains.html#ginqj[To Restart
a Domain].

[[gioma]][[GSADG00455]][[to-delete-an-administered-object]]

To Delete an Administered Object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Use the `delete-admin-object` subcommand to delete an administered
objects.

1.  List the administered objects by using the
link:../reference-manual/list-admin-objects.html#GSRFM00146[`list-admin-objects`] subcommand.
2.  If necessary, notify users that the administered object is being
deleted.
3.  Delete an administered object by using the
link:../reference-manual/delete-admin-object.html#GSRFM00063[`delete-admin-object`] subcommand.

[[GSADG00244]][[giolc]]


Example 12-22 Deleting an Administered Object

This example deletes the administered object with the JNDI name
`jms/samplequeue`.

[source,oac_no_warn]
----
asadmin> delete-admin-object jms/samplequeue
Command delete-admin-object executed successfully
----

[[GSADG989]]

See Also

You can also view the full syntax and options of the subcommand by
typing `asadmin help delete-admin-object` at the command line.


