L'anatra - Library for interoperability between C# and Java
L'anatra - knihovna pro interoperabilitu mezi jazyky C# a Java
diploma thesis (DEFENDED)
View/ Open
Permanent link
http://hdl.handle.net/20.500.11956/193799Identifiers
Study Information System: 266543
Collections
- Kvalifikační práce [11216]
Author
Advisor
Referee
Parízek, Pavel
Faculty / Institute
Faculty of Mathematics and Physics
Discipline
Computer Science - Software Systems
Department
Department of Distributed and Dependable Systems
Date of defense
11. 9. 2024
Publisher
Univerzita Karlova, Matematicko-fyzikální fakultaLanguage
English
Grade
Excellent
Keywords (Czech)
Interoperabilita|C#|Java|JNI|Project PanamaKeywords (English)
Interoperability|C#|Java|JNI|Project PanamaTato práce měla za cíl vytvořit softwarovou knihovnu umožňující interoperabilitu mezi programovacími jazyky C# a Java. Práce umožňuje použití podmnožiny Javové funkcionality ze C#. Požadavky, které by měla knihovna splňovat, byly určeny analý- zou potenciálních scénářů použití a již existujících souvisejících implementací. Důraz byl kladen na návrh uživatelsky přívětivého a typově bezpečného API. Implementované řešení umožňuje volání statických i instančních Javových metod ze C#. Dále umožňuje vytvářet instance Javových objektů ze C# nebo je získávat prostřednictvím návratových hodnot volaných Javových metod. C# reprezentuje in- stance Javových objektů prostřednictvím proxy tříd, které emulují API jim odpovída- jících Javových tříd, potenciálně včetně hiearchie dědičnosti a rozhraní, která implemen- tují. Implementace C# proxy typů (tříd i rozhraní) je generována v době kompilace prostřednictvím inkrementálního generátoru zdrojového kódu. Generované proxy typy jsou založeny na API poskytovaném implementovanou knihov- nou pro interoperabilitu. Tato knihovna je převážně založena na kombinaci Java Native Interface (JNI) a .NET Platform Invoke (P/Invoke). Nicméně, řešení také experimen- tuje s optimalizací určitých typů volání pomocí Foreign Function API poskytovaného aktuálním Javovým projektem Panama. 1
This thesis aimed at creating a software library enabling interoperability between C# and Java programming languages by enabling the use of a subset of Java features from C# code. Requirements that the library should meet were determined via analysis of potential use case scenarios and similar existing implementations. The emphasis was put on providing a user-friendly and type-safe API. The implemented solution enables the invocation of static and instance Java methods from C#. It also allows creating Java object instances from C# code or obtaining them as return values of invoked Java methods. C# represents Java object instances as proxy classes that emulate the API of corresponding Java classes, possibly including an inher- itance hierarchy between them and the interfaces they implement. Implementation of C# proxy types (classes and interfaces) is generated at compile time via the incremental source generator. Generated proxy types are based on API provided by the implemented interoperability library. This library is mainly based on a combination of Java Native Interface (JNI) and .NET Platform Invoke (P/Invoke). However, the solution also experiments with optimizing certain invocation kinds using Foreign Function API provided by the recent Java Project Panama. 1