1. Snack: Jak podwoić korzyści
zaimplementowanego kodu
.NET?
Przemysław Ładyński
pladynski@sdncenter.pl
2. .NET vs. JAVA
„80% dużych korporacji opiera swoje rozwiązania no obu technologiach” ~Gartner
.NET
JAVA
~4,47mln c# ~2,83mln VB.NET = ~7,3 mln
programistów
~ 8,3mln
programistów
71% korporacji
64% korporacji
60% małych firm
36% małych firm
Szybka integracja z rozwiązaniami
Microsoft (AD, Sharepoint, SCCM,
Dynamics CRM, etc…)
Duża ilość bibliotek rozwijanych jako
projekty open-source
Duże systemy klasy enterprise (HPSM, ERP,
SAP JAVA Engine,
Szybka integracja z systemami Oracle
* Ogółem szacuje się, że jest 43mln osób zajmujących się programowaniem
4. Jak udostępnić kod .NET
aplikacji pisanej na JVM?
• Połączenie TCP/IP klient serwer
• Web Services / REST
• Obiekty COM/DCOM (konieczność użycia zewnętrznej
implementacji COM dla JAVA)
• Kolejki (konieczność użycia zewnętrznej implementacji wybranej
kolejki dostępnej dla obu platform)
• Wywołanie natywne przez JNI
• Natywny pomost
5. Krok 1 – Dodaj Javonet JAR do projektu JAVA
Zalety
Projekt Eclipse
javonet.jar
•
Lekka biblioteka – jeden plik JAR
•
Wysoka (~natywna) wydajność
•
Brak konieczności jakiejkolwiek
implementacji po stronie .NET!
•
Proste API po stronie JAVA
•
Brak konieczności tworzenia
infrastruktury typu klient<>serwer
•
Ilość linii kodu niemal 1:1
•
Możliwość implementacji własnych
klas proxy
Projekt Eclipse
javonet.jar
.NET DLL
Brak konieczności generowania
klas proxy
•
Krok 2 – Skopiuj bibliotekę .NET
Krok 3 – Pisz swój kod
public void GenerateRandomNumber() throws JavonetException
{
NObject objRandom = Javonet.New("System.Random");
int value = objRandom.invoke("Next",10,20);
System.out.println(value);
}
8. Jak to działa?
Bibliotek .DLL
Kod Java
.NET Reflection
Javonet API
Kontroler
Silnik Javonet
(wymienny kanał komunikacji)
.NET
CLI/C++
JNI
9. Co jeszcze potrafi Javonet?
Powoływanie i używanie dowolnych obiektów .NET
Wywoływanie metod statycznych i instancyjnych
Podstawianie i pobieranie wartości z pól i propert statycznych i instancyjnych
Subskrybowanie zdarzeń
Przekazywanie jako parametr i podstawianie do pól i propert dowolnych typów prostych, obiektów i tablic
(automatyczna konwersja typów prostych)
Przekazywanie argumentów z modyfikatorami „ref” i „out”
Rozszerzanie klas .NET w JAVA
Międzyplatformowa obsługa wyjątków .NET po stronie JAVA
Przekazywanie wywołań garbage-collectora z JAVA do .NET
Obsługa plików app.config
Wbudowana optymalizacji wywołań