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.
// 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.