[id='project-asset-execution-options-ref_{context}']
= Asset execution options with {PRODUCT}

After you build and deploy your {PRODUCT} project to {KIE_SERVER} or other environment, you can execute the deployed assets for testing or for runtime consumption. You can also execute assets locally in addition to or instead of executing them after deployment.

The following options are the main methods for {PRODUCT} asset execution:

.Asset execution options
[cols="25%,50%,25%", options="header"]
|===
|Execution option
|Description
|Documentation

|Execution in {KIE_SERVER}
|If you deployed {PRODUCT} project assets to {KIE_SERVER}, you can use the {KIE_SERVER} REST API or Java client API to execute and interact with the deployed assets. You can also use {CENTRAL} or the {HEADLESS_CONTROLLER} outside of {CENTRAL} to manage the configurations and KIE containers in the {KIE_SERVER} instances associated with your deployed assets.
ifdef::PAM,JBPM[]
For process definitions, you can use {CENTRAL} directly to execute process instances.
endif::[]
a|
ifdef::DM,PAM[]
{URL_DEPLOYING_AND_MANAGING_SERVICES}#assembly-kie-apis[_{KIE_APIS}_]
endif::[]
ifdef::DROOLS,JBPM,OP[]
xref:#_ch.kie.server[]

ifdef::JBPM[]
xref:#_process_management[]
endif::[]
endif::[]

|Execution in an embedded Java application
|If you deployed {PRODUCT} project assets in your own Java virtual machine (JVM) environment, microservice, or application server, you can use custom APIs or application interactions with core KIE APIs (not {KIE_SERVER} APIs) to execute assets in the embedded engine.
a|
link:http://docs.jboss.org/drools/release/{COMMUNITY_VERSION_FINAL}/kie-api-javadoc/[_KIE Public API_]

ifdef::JBPM[]
xref:jBPMCoreEngine[]
endif::[]

|Execution in a local environment for extended testing
|As part of your development cycle, you can execute assets locally to ensure that the assets you have created in {PRODUCT} function as intended. You can use local execution in addition to or instead of executing assets after deployment.
a|
ifdef::DM,PAM[]
{URL_DEVELOPING_DECISION_SERVICES}#assets-executing-proc_drl-rules["Executing rules" in _{DRL_RULES}_]
endif::[]
ifdef::DROOLS,JBPM,OP[]
xref:decision-examples-IDE-proc_drools-examples[]
endif::[]
|===

[NOTE]
.Smart Router ({KIE_SERVER} router)
====
Depending on your deployment and execution environment, you can use a Smart Router to aggregate multiple independent {KIE_SERVER} instances as though they are a single server. Smart Router is a single endpoint that can receive calls from client applications to any of your services and route each call automatically to the {KIE_SERVER} that runs the service. For more information about Smart Router, see
ifdef::DM,PAM[]
{URL_INSTALLING_AND_CONFIGURING}#clustering-smartrouter-install-proc_clustering-runtime-standalone[_{INSTALLING_ON_EAP_CLUSTER}_].
endif::[]
ifdef::DROOLS,JBPM,OP[]
link:http://mswiderski.blogspot.com/2016/12/kie-server-router-even-more-flexibility.html[{KIE_SERVER} router].
endif::[]
====
