State-Dependent Functions
MATLAB® code that you want to deploy often carries state—a specific data value in a program or program variable.
Does My MATLAB Function Carry State?
Example of carrying state in a MATLAB program include, but are not limited to:
Modifying or relying on the MATLAB path and the Java® class path
Accessing MATLAB state that is inherently persistent or global. Some example of this include:
Random number seeds
Handle Graphics® root objects that retain data
MATLAB or MATLAB toolbox settings and preferences
Creating global and persistent variables.
Loading MATLAB objects (MATLAB classes) into MATLAB. If you access a MATLAB object in any way, it loads into MATLAB.
Calling MEX files, Java methods, or C# methods containing static variables.
Defensive Coding Practices
If your MATLAB function not only carries state, but also relies on it for your function to properly execute, you must take additional steps (listed in this section) to ensure state retention.
When you deploy your application, consider cases where you carry state, and safeguard against that state’s corruption if needed. Assume that your state may be changed and code defensively against that condition.
The following are examples of “defensive coding” practices:
Reset System-Generated Values in the Deployed Application
If you are using a random number seed, for example, reset it in your deployed application program to ensure the integrity of your original MATLAB function.
Validate Global or Persistent Variable Values
If you must use global or persistent variables, always validate their value in your deployed application and reset if needed.
Ensure Access to Data Caches
If your function relies on cached replies to previous requests, for instance, ensure your deployed system and application has access to that cache outside of the MATLAB environment.
Use Simple Data Types When Possible
Simple data types are usually not tied to a specific application and means of storing state. Your options for choosing an appropriate state-preserving tool increase as your data types become less complicated and specific.
Avoid Using MATLAB Callback Functions
Avoid using MATLAB callbacks, such as timer
. Callback functions have
the ability to interrupt and override the current state of the MATLAB
Production Server™ worker and may yield unpredictable results in multiuser
environments.
Techniques for Preserving State
The most appropriate method for preserving state depends largely on the type of data you need to save.
Databases provide the most versatile and scalable means for retaining stateful data. The database acts as a generic repository and can generally work with any application in an enterprise development environment. It does not impose requirements or restrictions on the data structure or layout. Another related technique is to use comma-delimited files, in applications such as Microsoft® Excel®.
Data that is specific to a third-party programming language, such as Java and C#, can be retained using a number of techniques. Consult the online documentation for the appropriate third-party vendor for best practices on preserving state.
Caution
Using MATLAB
LOAD
and SAVE
functions is often used to
preserve state in MATLAB applications and workspaces. While this may be successful in some
circumstances, it is highly recommended that the data be validated and reset if
needed, if not stored in a generic repository such as a database.