What does HRESULT 0x8004E02C (CO_E_NOTPOOLED) mean?

 
Previous Next
CO_E_DBERROR CO_E_NOTCONSTRUCTED

CO_E_NOTPOOLED

The component implementation assumes a pool-managed lifecycle that COM+ is not providing

This HRESULT states that the created COM+ component must use object pooling to work. The class depends on pool activation, reuse, or resource management semantics that are absent from its effective configuration.

The documented description is “The COM+ component you created must use object pooling to work.”.

Relevant contract

Object pooling is a component-level COM+ service. It is different from application pooling, thread pooling, database connection pooling, and JIT activation, although those features can interact.

Causes that fit this specific result

  • Deployment installs the class with Object pooling disabled.
  • The component is activated outside its intended COM+ application.
  • A package import loses pool settings, minimum/maximum size, or creation timeout.
  • The implementation is written to obtain expensive resources only during pool-managed activation.

Evidence to preserve before changing the system

  • Record application ID, CLSID, activation route, and effective object-pooling attributes.
  • Capture pool size, active count, wait count, and creation timeout when available.
  • Compare the deployed COM+ package with the component’s documented requirements.
  • Verify whether the instance was created directly instead of through COM+.

Diagnostic sequence

  • Confirm that the class correctly implements cleanup and reuse requirements for poolable objects.
  • Enable Object pooling through supported Component Services configuration.
  • Set pool bounds from measured resource and concurrency requirements.
  • Test repeated activation, deactivation, failure, and nonreusable-object paths.

Retry and recovery

Activate the class under a correctly configured COM+ pool or remove its pool dependency in code. A retry against the same unpooled activation contract is deterministic.

What the result does not establish

The result does not mean a pool is empty or exhausted. It means the required pooling service is not applied to the component.

Difference from nearby HRESULT values

CO_E_ACTIVATIONFAILED_TIMEOUT can occur while waiting for a pooled instance. CO_E_NOTCONSTRUCTED identifies missing object construction rather than pooling.

Practical scenario

A component expects COM+ to reuse preinitialized native handles but a manual deployment leaves Object pooling off. Activation returns this HRESULT; the package is corrected and reuse tests confirm handles are reset between clients.

Developer and telemetry guidance

Declare pooling as a deployment invariant and monitor effective settings. Poolable classes should expose diagnostics for activation, deactivation, and discard decisions without leaking client state.

Official Microsoft references


Looking for a different code? Search another status or error code.