Native Method Registration in Java via Function Pointers

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

The existing Java Native Interface (JNI) techniques are ineffective for integrating certain types of native code, particularly those not implemented as dynamic libraries, which cannot be loaded using standard methods like System.loadLibrary, necessitating advanced techniques for registering native libraries within a Java environment.

Innovation Solution

The solution involves instantiating a class object for native methods, inserting function pointers with identification information, and using the RegisterNatives function to manually link native methods with a class reference, method name, and method descriptor, allowing for controlled visibility and delayed class loading to avoid global visibility issues.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Adaptability or versatility

If standard System.loadLibrary method is used to load native libraries, then dynamic libraries can be loaded successfully, but native code not implemented as dynamic libraries cannot be loaded

Engineering Contradiction:
Improvenative code integration capabilityVSAvoidloading effectiveness
Core Design Contradiction:
Adaptability or versatilityVSReliability

Solution Approach 1:

The patent introduces an intermediary registration mechanism that acts as a mediator between non-dynamic-library native code and the Java virtual machine. Instead of directly loading native libraries through standard methods, the system uses a registration interface where native code implementations are manually registered with the JVM, enabling integration of native code that cannot be loaded as dynamic libraries while maintaining system reliability

Inventive Principle:
Principle #24Intermediary (Mediator)

Solution Approach 2:

The patent segments the native code integration process into distinct components: the native code implementation, the registration interface, and the method resolution mechanism. This segmentation allows native code to be registered independently without requiring dynamic library structure, thereby expanding adaptability to include various native code formats while ensuring reliable integration through structured registration

Inventive Principle:
Principle #1Segmentation

2Ease of operation

If native methods are registered with global visibility, then all classes can access native methods, but visibility control and security are compromised

Engineering Contradiction:
Improvemethod accessibilityVSAvoiduncontrolled visibility
Core Design Contradiction:
Ease of operationVSObject-affected harmful factors

Solution Approach 1:

The patent implements local quality by allowing native methods to be registered with specific visibility scopes rather than global visibility. The registration mechanism enables fine-grained control over which classes can access which native methods, ensuring that each native method has appropriate visibility characteristics tailored to its specific requirements, thereby maintaining security while preserving ease of operation for authorized classes

Inventive Principle:
Principle #3Local quality

Solution Approach 2:

The patent introduces dynamic visibility control where the visibility of native methods can be adjusted based on runtime conditions and class loading contexts. Rather than fixed global visibility, the system dynamically determines access permissions during method resolution, allowing flexibility in accessibility while preventing unauthorized access through controlled visibility mechanisms

Inventive Principle:
Principle #15Dynamics

3Reliability

If classes are loaded early to ensure native method availability, then native methods can be accessed, but server startup time and initial load are increased

Engineering Contradiction:
Improvenative method availabilityVSAvoidstartup time
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent applies preliminary action by pre-registering native methods with the JVM during initialization, but delaying the actual loading and resolution of specific native method implementations until they are first needed. This allows the system to prepare the registration framework in advance while postponing the time-consuming class loading operations, thereby ensuring native method availability when needed without extending overall startup time

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The system implements self-service through lazy loading where classes automatically load their required native methods at the moment of first use rather than during startup. The registration mechanism enables classes to service their own native method loading requirements on-demand, eliminating the need for early class loading while ensuring availability when needed, thus reducing startup time without compromising reliability

Inventive Principle:
Principle #25Self-service

Data Source

PatentUS7555746B2System and method for registering native libraries with non-native enterprise program code
Publication Date: 2009.06.30 SAP SE
  • US7555746B2 patent drawing
  • US7555746B2 patent drawing
  • US7555746B2 patent drawing

AI summary

A system and method are described for implementing native methods within a Java environment. The native methods may be used, for example, as part of a startup framework for a cluster of Java application servers. In one embodiment, a class object for a the class containing the native methods is instantiated in a memory. After the class object is loaded, one or more function pointers are inserted within the class object. The function pointers include identification information identifying an implementation of the native methods.