Platform Independent

Write once, deploy on J2EE or Jakarta EE—OorianCommonLib is fully servlet-API agnostic.

Platform-Agnostic Types

OorianHttpRequest, OorianHttpResponse, OorianHttpSession, OorianCookie—no javax or jakarta imports in your code.

Dual Adapters

Thin adapter layers for both J2EE and Jakarta. Switch platforms by swapping a single JAR.

Zero Code Changes

Your pages, components, and event handlers work identically on either platform.

Future-Proof

Protected from the javax-to-jakarta migration. Oorian handles the transition for you.

Shared Core

OorianCommonLib contains the bulk of the framework with no servlet API dependencies.

Gradual Migration

Migrate from J2EE to Jakarta on your own schedule without rewriting application code.

Architecture

Oorian defines platform-agnostic interfaces for every servlet concept: OorianHttpRequest, OorianHttpResponse, OorianHttpSession, OorianCookie, OorianUploadPart, and AppContext. Your application code uses only these types—never javax.servlet or jakarta.servlet directly. Thin adapter libraries convert to and from the platform-specific types at the boundary.

Java
// Oorian's platform-agnostic abstractions (in OorianCommonLib)
// Your code uses ONLY these types — no javax or jakarta imports

// OorianHttpRequest — wraps HttpServletRequest
OorianHttpRequest request = OorianSession.getRequest();
String userId = request.getParameter("userId");
String authHeader = request.getHeader("Authorization");
String clientIp = request.getRemoteAddr();

// OorianHttpSession — wraps HttpSession
OorianHttpSession httpSession = request.getSession(true);
httpSession.setAttribute("user", currentUser);
httpSession.setMaxInactiveInterval(1800);

// OorianSession — framework session manager (thread-local)
OorianSession session = OorianSession.get();
session.login(userPrincipal);
String csrfToken = session.getCsrfToken();
boolean authenticated = session.isAuthenticated();

// OorianCookie — wraps Cookie with secure defaults
OorianCookie cookie = new OorianCookie("prefs", "dark-mode");
cookie.setMaxAge(86400);
cookie.setHttpOnly(true);
cookie.setSameSite("Strict");

// OorianHttpResponse — wraps HttpServletResponse
OorianHttpResponse response = ...;
response.addCookie(cookie);
response.setHeader("X-Custom", "value");

// OorianUploadPart — wraps Part for file uploads
Collection<OorianUploadPart> parts = request.getParts();
for (OorianUploadPart part : parts)
{
    String fileName = part.getName();
    InputStream data = part.getInputStream();
}

// AppContext — wraps ServletContext
AppContext context = Application.getContext();
String realPath = context.getRealPath("/WEB-INF/config.xml");

// Deploy with OorianJ2eeLib.jar → Tomcat 9, GlassFish 5, etc.
// Deploy with OorianJakartaLib.jar → Tomcat 10+, GlassFish 7, etc.
// Your application code stays exactly the same.

Benefits

No Servlet API in Your Code

Your application never imports javax.servlet or jakarta.servlet. Oorian's common API handles everything.

Painless Jakarta Migration

When you're ready to move from J2EE to Jakarta, swap the adapter JAR. No code changes, no recompilation of your application.

Single Codebase

Maintain one codebase that deploys to both J2EE and Jakarta environments. No conditional compilation or platform branches.

Adapter Simplicity

The J2EE and Jakarta adapters are nearly identical — the only differences are import statements. The real framework lives in the shared common library.

Investment Protection

Your application code is insulated from platform shifts. As the Java EE ecosystem evolves, Oorian adapts — your code doesn't need to.