Updating an OSGi composition unit using the editCompUnit command
Use the editCompUnit command to select a composition unit containing an enterprise OSGi application, and update the composition unit so that the business-level application uses the newer configuration. If any of the updates contain configuration options, run the editCompUnit command a second time to update the configuration information. You can also take the opportunity to make additional, non-essential configuration changes.
This topic assumes that we have either updated the asset that the composition unit contains, or added a composite bundle as an extension to the composition unit. You do not have to update the composition unit every time you update the asset or add a composite bundle extension. You cannot update the composition unit until all bundle downloads are complete.
You can update an OSGi composition unit using the editCompUnit command as described in this topic, or using the administrative console as described in Update an OSGi composition unit.
An OSGi composition unit consists of an EBA asset, (optionally) one or more composite bundle extensions, and configuration information for running the asset and composite bundle extensions in a business-level application. The configuration information can include HTTP session management, context roots, virtual hosts, security roles, run-as roles, JNDI mappings for Session enterprise beans, JNDI mappings for EJB references, and web application or Blueprint resource reference bindings for the OSGi application.
When all bundle downloads are complete, we can update the OSGi composition unit so that the business-level application uses the newer configuration. If any of the updates contain configuration options, run the editCompUnit command a second time to update the configuration information. You can also take the opportunity to make additional, non-essential configuration changes.
For users who are moving from a previous version: In the WAS Version 7 Feature Pack for OSGi Applications and Java™ Persistence API 2.0, bundle changes to the asset are applied by restarting the business-level application, rather than by updating the composition unit. The current approach means that many bundle changes can be applied in place, without restarting the running business-level application. See the following troubleshooting tip: The behavior has changed for using wsadmin commands to update bundle versions.
- Check the update status of the composition unit.
There are four distinct deployment statuses for an OSGi composition unit:
- Use latest OSGi application deployment.
- New OSGi application deployment not yet available because it requires bundles that are still downloading.
- New OSGi application deployment available.
- New OSGi application deployment cannot be applied because bundle downloads have failed.
- Update the composition unit to use the latest version of the EBA asset or composite bundle extension.
If the status is "New OSGi application deployment available", open a wsadmin command prompt then run the following jython command:
AdminTask.editCompUnit('[ -blaID WebSphere:blaname=bla_name -cuID WebSphere:cuname=cu_name -CompUnitStatusStep [[asset_name.eba true]] ]')For example:AdminTask.editCompUnit('[ -blaId WebSphere:blaname=test.app -cuId WebSphere:cuname=com.ibm.ws.eba.extension.componenttest_0001.eba -CompUnitStatusStep [[com.ibm.ws.eba.extension.componenttest.eba true]] ]')
- If we make bundle changes that require configuration changes to the composition unit, you must update the configuration information for running the asset in the business-level application.
For example, if you update a bundle in an EBA asset, or replace a composite bundle extension, you might introduce a resource that requires additional configuration, such as a new or changed Blueprint resource reference, or security role mapping.
If any of the updates contain configuration options, run the editCompUnit command a second time to update the configuration information. You can also take the opportunity to make additional, non-essential configuration changes. See Modify the configuration of an OSGi composition unit by using wsadmin commands.
CAUTION:
If you omit this step, then when you save the changes, the application will fail to restart.
- Save the changes to the master configuration.
To save the configuration changes, use the following command:
AdminConfig.save()
Results
When you save the changes to the composition unit, the associated business-level application is updated to use the new configuration. If the business-level application is running, the bundle and configuration updates are applied immediately.
If possible (that is, depending on the nature of the updates) the system applies the updates without restarting the application. If we update a bundle that provides only OSGi services to the rest of the application, then only that bundle is restarted. If we update a bundle that provides one or more packages to other bundles, then those bundles and any bundles to which they provide packages are restarted. If, however, a new package or service dependency is added, or an existing package or service dependency is removed, then the application is restarted; a newly added package and service can come from a newly-provisioned bundle, or from a bundle that has already been provisioned.
If the application has a client bundle that references an enterprise bean in a service bundle, then to prevent the application being restarted if the service bundle is updated, configure the enterprise bean dependency in one of the following ways:
- Declare the enterprise bean in the Export-EJB header in the bundle manifest file of the service bundle, so that the enterprise bean is registered in the OSGi service registry, and use a reference element in the Blueprint XML file of the client bundle to inject and call the enterprise bean; for more information, see References and the Blueprint Container. This procedure is the preferred way to configure the EJB dependency.
- In the client bundle, declare an EJB reference to the target enterprise bean, in either an @EJB annotation or a binding XML file, and map the EJB reference to the EJB JNDI name when the application is deployed; for more information, see EJB references [Settings].
If we do not declare the enterprise bean using the Export-EJB header or by binding the EJB reference into JNDI, then a JNDI binding is generated automatically when you deploy the application, provided that there is exactly one match between nterface that the EJB class implements, and an interface specified in an EJB reference. However, the JNDI name that is generated contains the bundle version, which changes if you update the bundle; in this case, when you update the composition unit, the JNDI is regenerated to contain the updated version, and this configuration change results in the application being restarted.
Parent topic: Update an OSGi composition unit
Related information:
Preview composition unit upgrade [Settings]