+

Search Tips   |   Advanced Search

EJB command group

The EJB command group for the AdminTask object provides commands we can use to manipulate enterprise beans.


removeAutomaticEJBTimers

Applications or modules use annotations or XML to instruct the application server to automatically create EJB timers.

Automatically created timers are persisted in the scheduler instance associated with the server that the application or module is running on at the moment the automatic EJB timer is created. Schedules are configured on a per server basis, and thus it is possible for each server in your topology to use a unique scheduler instance. In this case, the scheduler instance specific to each server supports the EJB timers running in that server.

Each scheduler instance is associated with a set of database tables. If we have multiple scheduler instances, configure each scheduler instance with a unique prefix to ensure the instance maps to a unique set of database tables.

When the application or module that requested the automatic EJB timers are removed from a server, the automatic EJB timers must be removed from the corresponding scheduler instance. If the application or module was installed on multiple servers, and each of those servers used a unique scheduler instance, then the timers must be removed from each of those scheduler instances. In other words, automatically created EJB timers are removed on a per server basis.

In some cases, the removal or update of the application or module results in the removal of the automatically created EJB timers from the scheduler instance. In this scenario, no user action is required.

However, in other cases, the removal, or update of the application or module does not result in the removal of the automatically created EJB timers from the scheduler instance. In this case, we must manually remove the EJB timers using the removeAutomaticEJBTimers command.

The command is only supported in a connected mode. In a network deployment topology, the deployment manager, NodeAgent, and the managed server containing the scheduler instance must all be running. In a base topology, the stand-alone server must be running.

In a Rational Application Developer loose configuration scenario, we must manually remove your automatically created EJB timers. Also, programmatically created EJB timers, which are not the same as automatically created EJB timers, are not automatically removed or removed by this command.

In a network deployment topology, when a single module is only installed on a subset of the servers in the topology, the automatically created timers associated with that module must be removed from the scheduler instance(s) associated with that subset of servers only. A scheduler instance corresponding to a server that does not have the module installed on it does not need to be cleaned up.


Target Object: None

Required parameters:

-appName

The name of the application that requested the automatically created EJB timers we want to remove. (String, required)

-serverName

The name of the server that runs the application or module containing the automatically created EJB timers we want to remove. This parameter represents the logical name of an application server, not a host name. (String, required)

Optional parameters:

-schedulerJNDIName

This parameter represents the JNDI name of the scheduler instance that persists the automatically created EJB timers we want to remove.

A server instance is always configured to use a particular scheduler instance to support automatically created EJB timers. We can explicitly configure which scheduler instance is used, or we can choose to not explicitly configure a scheduler instance. In the latter case a default scheduler instance is used.

If the scheduler instance containing the automatically created EJB timers we want to remove is the same scheduler instance that is currently configured for the server, then we can omit this parameter. In this case, the command examines the configuration, discovers the scheduler instance that is currently configured, and uses that.

However, if the scheduler instance that is currently configured is not the one containing the EJB timers we want to remove, then specify the JNDI name of the scheduler instance that does contain these timers. (String, optional)

-nodeName

The name of the node containing the server. (String, required)

-moduleName

The name of the module that requested the automatically created EJB timers we want to remove. To remove all automatically created timers in the application, regardless of which module they are defined in, then this parameter is omitted. Only specified when we want to remove the automatically created timers requested by one module in the application, but not the timers requested by another module in the same application. (String, optional)


Return value: None

The following information helps to determine when this command is needed:

If WAS encounters an error when attempting to remove automatically created EJB timers from a server, then a warning is written to log file.

If an error occurs, or if the application server did not attempt to remove automatically created EJB timers, or if we are not sure if the automatically created EJB timers were removed, manually issue the removeAutomaticEJBTimers command to ensure that the automatically created EJB timers are removed. If the automatically created timers were actually removed from the scheduler instance, running the command is unnecessary, but does no harm.

If we are running in a clustered environment, and your cluster contains multiple nodes, and each of those nodes contains a server that maps to the same cluster level scheduler instance, then the automatically created timers only must be removed from one of the servers. This is because the shared scheduler instance is updated, and all servers using that shared scheduler instance see the change.

As a result, if a server in one node is not running and we receive a log warning that the automatic timers could not be removed from it, but you know that server shares a cluster-level scheduler instance with a server in a different node that was successfully cleared, then no user action is required because the shared scheduler instance has already been updated.

The same is true when there are multiple servers in a cluster, and they are all part of the same node, and share a single cluster-level scheduler instance, and one or more of those cluster members are not running. In this case, the application server issues a log warning that the automatic timers could not be removed from those servers. However if we know that they share a common scheduler instance, and one of the cluster members was successfully cleared, then no user action is required because the shared scheduler instance has already been updated.

If we are running in a network deployment topology and have multiple servers, the type of scheduler used (default versus custom configured) has an impact on performance in regards to scheduler cleanup. The default EJBContainer scheduler is unique per server. If we are using the default EJBContainer scheduler instance, and we have five servers, this means we have five unique scheduler instances, and the automatic timers must be removed from all five of them when the application is updated or removed. However, if we are using a single shared, custom configured scheduler instance, then the automatic timers must only be removed once, from that one scheduler instance.


Example 1

Topology:

Background:

The testApp application was uninstalled in a connected mode from the administrative console. You want to remove all the automatically created timers in the application, regardless of which module requested them.

The deployment manager, node agent, and server1 servers were running, and the automatic EJB timers were removed from server1. However, server2 was not running, and so the automatic EJB timers were not removed from server2.

Now, we must manually remove the automatic EJB timers from server2.

Action:


Example 2

Topology:

Background:

The module, mod1, from application, testApp, was uninstalled, but because server1 was configured to use the jndi/sched_2 instance at the moment of uninstallation, the automatic EJB timers were not removed from scheduler instance jndi/sched_1.

Now, we must manually remove the automatic EJB timers from the jndi/sched_1 scheduler instance on server1.

The application contains modules, mod1 and mod2. Both of these modules requested automatically created EJB timers. The mod2 module is still installed, and you still need the automatically created EJB timers it requested. You only want to remove the automatically created EJB timers requested by mod1.

Action: