# Java API Concepts

Eduction SDK provides a Java API that enables your application to create an extraction engine and perform entity extractions.

This section describes the concepts used to write Java applications with the Eduction SDK.

The Java SDK consists of:

- a JAR file, `edk.jar`, which contains the Eduction Java class library and the interface to the Eduction Java Native Interface (JNI).
- a DLL (Windows) or shared object (UNIX/Linux), `edkjni.dll` or `edkjni.so`, which implements the Eduction JNI library and performs the Eduction functionality.

Java developers can use either the Eduction JNI, the class library, or both. The JNI provides functionality almost identical to that of the Eduction C API. The class library encapsulates related JNI methods, implements exception handling, and provides return values from method calls that simplify application programming.

NOTE: You might also need additional runtime libraries to run the Eduction SDK. See Eduction SDK Package.

## Naming Conventions

The main JNI class that provides access to native functionality is `EDKJNI`. Support classes for the JNI are prefixed with `EDKJNI`, for example `EDKJNIVersion`.

The Eduction class library classes are prefixed with `EDK`, for example `EDKEngine`.

## Concurrency Control

Concurrency in Eduction is handled using sessions, represented by an `EDKSession` object.

You initialize an instance of an `EDKEngine` object with corresponding grammars for entity extraction. You can associate each such engine with one or more sessions. All the sessions in the engine share the same grammars. You must configure the engine fully before you create any sessions.

After you create a session, the engine throws an exception if you try to change the engine settings. However, each individual session can process many documents or streams. Each session maintains its state independent of others.

_FT_HTML5_bannerTitle.htm