interop itcare: interoperabilidade java e .net

49
Alessandro de Oliveira Binhara Projeto MONO BRASIL [email protected] Interoperabilidade Java e .NET S

Upload: alessandro-binhara

Post on 11-Jun-2015

206 views

Category:

Technology


2 download

DESCRIPTION

Esta palestras visa apresentar como é possível realizar interoperabilidade entre Java e .NET usando mono e ikvm. Apresentação de exemplo práticos de como usar um código java dentro de C# ou mesmo estender as funcionalidades do java no C#

TRANSCRIPT

Page 1: Interop itcare: Interoperabilidade Java e .NET

Alessandro de Oliveira BinharaProjeto MONO [email protected]

Interoperabilidade Java e .NET

CÓDIGO S

Page 2: Interop itcare: Interoperabilidade Java e .NET

2

Agenda

Sun (Oracle) X MicrosoftA Plataforma Java A Plataforma MonoO Projeto Mono

Histórico, Motivações, Rodmap, Features,,

Interoperabilidade de Aplicativos .Net e JavaIKVMExemplo PráticoCases

Page 3: Interop itcare: Interoperabilidade Java e .NET

3

Sun X Microsoft

Sun (Oracle)Uma LinguagemPadrão, Manutenção, Comunicação Foco na Empresa

MicrosoftMuitas LinguagensFacilidade, Aprendizado, PreferênciaFoco no Desenvolvedor

Page 4: Interop itcare: Interoperabilidade Java e .NET

Plataforma JAVA

Page 5: Interop itcare: Interoperabilidade Java e .NET

5

Plataforma Java

Linha do Tempo Green Oak (1991)*7 (1992)Internet!!!!HotJava (1995)Netscape 2.0 Java enabled (1996)Primeiro Release Java 1.02 (1996)

Page 6: Interop itcare: Interoperabilidade Java e .NET

6

Mire no elefante e acerte na mosca!

Page 7: Interop itcare: Interoperabilidade Java e .NET

7

Padrões X Implementações

PadrõesEspecificação da linguagem Java - java.sun.com/docs/books/jls Especificação da JVM - java.sun.com/docs/books/vmspecEspecificações da plataforma J2EE - java.sun.com/j2ee

Implementaçõeswww.java.sun.com- implementação dos padrões Javawww.ibm.com - implementação dos padrões Javawww.gnu.org/software/classpath - implementação livre do JavaCorewww.ikvm.net/ - implementação da JVM e suas classes em .NET e também ferramentas que permitem interoperabilidade entre Java e .NET

Page 8: Interop itcare: Interoperabilidade Java e .NET

Plataforma .NET

Page 9: Interop itcare: Interoperabilidade Java e .NET

9

Plataforma .NET nasce em 2001

Microsoft Lança a plataroma .NetColoca o C# como um padrãoO Core do .Net é colocado como padrãoPlataforma Microsoft .Net Mult-linguagemColetor de LixoC# tem mais recursos que o java

Page 10: Interop itcare: Interoperabilidade Java e .NET

10

O Padrão é ECMA/ISO

As especificações do Framework .Net padronizadas pelo ECMA abordam o compilador e a runtimeO compilador C# é o ECMA 334O CLI (Common Language Infrastructure) é o ECMA 335Permite que as aplicações rodem independentes de plataforma de hardware e de software básico

Page 11: Interop itcare: Interoperabilidade Java e .NET

11

Interoperabilidade entre Linguagens

Page 12: Interop itcare: Interoperabilidade Java e .NET

12

Linguagens Disponíveis

Ada for .NET – A# (http://www.usafa.af.mil/df/dfcs/bios/mcc_html/a_sharp.cfm)VisualBasic.NET – mbas e bmcs (http://www.mono-project.com)ANSI C CSCC - http://www.gnu.org/projects/dotgnu/pnet.html ICC - http://www.cs.princeton.edu/software/lcc/C# - mcs (mono-project) e cscc (DotGNU)Eiffel - Eiffel ENViSioN! (Eiffel Software)Fortran - Lahey/Fujitsu Fortran for .NET (Lahey Computer Systems, Inc.)Cobol NetCOBOL - COBOL for .NET (Fujitsu -) Net Express (Micro Focus) KICKS for .NET™ (Intensity Software)Hasquel - Hugs98 for .NET http://galois.com/~sof/hugs98.net/Lisp RDNZL - http://www.weitz.de/rdnzl/ Foil - http://foil.sourceforge.net/ L Sharp .NET - http://www.lsharp.org/

Page 13: Interop itcare: Interoperabilidade Java e .NET

13

Linguagens Disponíveis

Python IronPython - http://www.ironpython.com/ Python for .NET compiler - http://starship.python.net/crew/mhammond/dotnet/ Python for .NET - http://www.zope.org/Members/Brian/PythonNet/index_html

Boo Liguagem Boo - http://boo.codehaus.org/Ruby Ruby/.NET - http://www.saltypickle.com/rubydotnet/ NETRuby - http://www.geocities.co.jp/SiliconValley-PaloAlto/9251/ruby/nrb.htmlSmalltalk SmallScripts - http://www.smallscript.org/ #Smalltalk LSWVST.Net - http://www.lesser-software.com/en/content/products/lswvst/lswvst-net.htmProlog P # - http://www.dcs.ed.ac.uk/home/jjc/psharp/psharp-1.1.3/dlpsharp.htmlTCL/TK Mailframe - http://www.mailframe.net/Products/TCL/ TickleSharp - http://forge.novell.com/modules/xfmod/project/?ticklesharp

Page 14: Interop itcare: Interoperabilidade Java e .NET

14

Common Language Runtime CLR

Motivos:Diminuir a combinação Linguagens x CPUsOperações simplificadas e unificadas entre plataformasPortabilidade e Segurança

História:~ 1970: P-Code (Pascal), D-Code (Gardens):1 byte por instrução

~ 1990: Bytecode JavaInformação simbólica embutidaOffsets resolvidos na hora do “deployment”

Page 15: Interop itcare: Interoperabilidade Java e .NET

Plataforma Mono

Page 16: Interop itcare: Interoperabilidade Java e .NET

16

MotivaçõesProjeto MONO

Um problema do Linux era ter boas ferramentas integradas

Page 17: Interop itcare: Interoperabilidade Java e .NET

17

Plataforma Mono

Muitas Linguagem e Muitas Plataformas Aproveita todas as características do mundo OpenSource Grande acesso a documentação JAVA e .NET Diversos Centros de capacitação já constituídos Comercialmente já aceito “Existe alguma grande empresa que de suporte?”

Page 18: Interop itcare: Interoperabilidade Java e .NET

18

Microsoft lança o .NETProjeto MONO

Miguel busca uma nova plataforma para melhorar seus projetos.

Microsoft Lança a plataforma .NetColoca o C# como um padrãoO Core do .Net é colocado como padrãoPadrões ECMA 334 , ECMA 335

Plataforma Microsoft .Net Multi-linguagemColetor de Lixo

Page 19: Interop itcare: Interoperabilidade Java e .NET

19

O que é ?Projeto MONO

Mono é uma implementação OpenSource do .NET Permite a execução e desenvolvimento de software .Net em ambiente Não Windows.Suporte a C# 4.0 como padrãoParallel Framework Performance

Large performance improvementsLLVM support has graduated to stable

Preview of the Generational Garbage CollectorVersion 2.0 of the embedding APIWCF Routing

Page 20: Interop itcare: Interoperabilidade Java e .NET

20

Multi-Linguagem e Multi-plataforma

Page 21: Interop itcare: Interoperabilidade Java e .NET

21

O que é ?Projeto MONO

Page 22: Interop itcare: Interoperabilidade Java e .NET

22

Contribuições MicrosoftMS-PL or Apache Licensed Libraries

Ajax.NET, ASP.NET MVC1, MVC2,Silverligth ToolKit, Silverligth Tests Managed Extensibility Framework (MEF)System.Data.Services.Client (OData)Dynamic Language Runtime

Page 23: Interop itcare: Interoperabilidade Java e .NET

23

Suporte C# 3.0 e 4.0

mcs: compilador para rutime 1.1.gmcs: compilador para runtime the 2.0 runtime.smcs: compiledor para rutime 2.1para compilar aplicações Moonlight.dmcs: iniciado com Mono 2.6 para C# 4.0

Características já suportadas:anonymous methods , iterators,partial classes , Generics , Nullable Types,

friend assemblies , static classes, property accessor accessibility, fixed buffers, external assembly alias, namespace alias qualifier , inline warning

control , Extension Methods, LINQ syntax, Expression trees, Automatic properties, Lambda expressions, Anonymous types.

Page 24: Interop itcare: Interoperabilidade Java e .NET

IKVMInteroperabilidade JAVA e .NET

Page 25: Interop itcare: Interoperabilidade Java e .NET

25

O que é O IKVM?

O IKVM é uma VM JAVA escrita em C# que possibilita executar byte code Java no Monoalém de um conjunto de ferramentas paraconversão bytecode (java) -> IL (mono) e IL (mono)-> bytecode (java)

http://www.ikvm.net

Page 26: Interop itcare: Interoperabilidade Java e .NET

26

Java Virtual Machine

Page 27: Interop itcare: Interoperabilidade Java e .NET

27

JAVA na IKVM

Page 28: Interop itcare: Interoperabilidade Java e .NET

28

JAVA na IKVM

Page 29: Interop itcare: Interoperabilidade Java e .NET

29

Instalação da IKVM

apt-get install IKVMSUSE use o YASTNo redhat tem pacotes prontos

Page 30: Interop itcare: Interoperabilidade Java e .NET

30

Como posso usar o IKVM?

Rodando uma Classe Java (dinamicamente)Complilando um ByteCode para CLI (.jar->.dll)Compilando um CLI para ByteCode (.dll -> .jar)Usar uma classe Java no C# Usar uma classe C# no Java

Page 31: Interop itcare: Interoperabilidade Java e .NET

31

Rodando uma aplicação java no Mono

-> javac *.java-> jar cfm hello.jar manifest.mf Hello.class-> ikvmc -reference:/usr/lib/ikvm/IKVM.GNU.Classpath.dll hello.jar-> mono hello.exe

Page 32: Interop itcare: Interoperabilidade Java e .NET

32

Usando uma Classe Java dentro do C# (jar -> dll)-> mcs -reference:IKVM.GNU.ClassPath hodgepodg.cs -> mono hodgepodge.exe

Classe Java

Código Java

Page 33: Interop itcare: Interoperabilidade Java e .NET

33

Usando as bibliotecas do Mono dentro do Java (dll -> jar)PASSOS:1) Gerar os stubs de .NET para Java, isto irá resultar em um arquivo mscorlib.jar2) Quando compilar as classes java irão fazer uso das bilbiotecas .NETbastando incluir o mscorlib.jar no classpath3) Podemos ter 2 resultados:

- criação dos binários Java para executá-los no IKVM- ou a conversão desses binários Java para . NET

COMANDOS-> ikvmstub mscorlib.dll-> javac -classpath mscorlib.jar *.java -> ikvmc -reference:IKVM.GNU.Classpath.dll CreateFile.class -> ikvmc -reference:IKVM.GNU.Classpath.dll ShowDir.class

Page 34: Interop itcare: Interoperabilidade Java e .NET

34

CreateFile.java

Biblioteca Mono

Page 35: Interop itcare: Interoperabilidade Java e .NET

35

ShowFile.java

Biblioteca Mono

Page 36: Interop itcare: Interoperabilidade Java e .NET

36

Estendendo uma classe Java em C#

1) Criar a classe Java : “Subject.java”2) Extender essa classe dentro do C#: “Exntesion.cs”3) Compilar a classe java e gerar o .JAR4) Converter o .JAR para um .DLL com o IKVM5) Compilar a classe extension.cs com mono

COMANDOS-> javac *.java-> jar cvf subject.jar *.class-> ikvmc -reference:IKVM.GNU.Classpath.dll subject.jar -> mcs -reference:IKVM.GNU.Classpath.dll -reference:subject.dll extension.cs -out:extension.exe

Page 37: Interop itcare: Interoperabilidade Java e .NET

37

Herança!!!!! Subject.java

Page 38: Interop itcare: Interoperabilidade Java e .NET

38

Herança !! Extencion.cs

Page 39: Interop itcare: Interoperabilidade Java e .NET

39

Mono Movies Flash

Aplicação Multi-linguagemCriar classe MyClass.java (desenha um gráfico na tela) A classe java usa as bibliotecas Mono (GTK#) para desenhar na telaCriar uma aplicação Boo para executar a classe JavaPassos: compilar o Java -> converte para DLL -> compilar a aplicação Boo

Page 40: Interop itcare: Interoperabilidade Java e .NET

40

Exemplo

Page 41: Interop itcare: Interoperabilidade Java e .NET

41

Figure.java

Page 42: Interop itcare: Interoperabilidade Java e .NET

42

Ellipse.boo

import system

class Ellipse (Figure) protected w protected h

def construct (x,y,rw,rh) super(x,y) w = rw h = rh

override def print (): Console.Write("Ellipse [w:" + w + " h:" + h "] ") super()

Herança

Chamada a superClasse

Page 43: Interop itcare: Interoperabilidade Java e .NET

43

Circle.cs

Herança

Chamada a superClasse

Page 44: Interop itcare: Interoperabilidade Java e .NET

44

CASE Kidux

Sistema para controle parental em uma distribuição linux para crianças

Softwares em suma maioria escritos em javaMudança de requisito: Rodar no WindowsTem que ser simples de instalarAlta integração com windows

Problemas :Necessidade da VM java Instalador grande(+10MB) difícil de fazer donwload

Com IKVMNão precisa mais do java Caiu para menos de 2MB o tamanhoFácil integração com windpw

Page 45: Interop itcare: Interoperabilidade Java e .NET

45

Case Projeto Rhodes

Projeto MilitarRequisitos:

Desenvolvimento Rápido Prototipagem rápidaBaixo consumo de BandaVárias interfaces com usuário Redundância de Plataforma (Java, Mono e .NET)

Page 46: Interop itcare: Interoperabilidade Java e .NET

46

CASE Jsenna

Page 47: Interop itcare: Interoperabilidade Java e .NET

47

CASE : Arquitetura Jsenna

Regras de Negócio em XML

Framework Jsenna

Abstração servidor de aplicação

ImplementaçãoEm Aspx Mono

ImplementaçãoJ2EE

Refactoring JSenna, JBanana, Jolt Frameworks Portados

JBananaJoltVenusLog4JJasper

JDBC PostgreSQLMySQL

É possível hoje conectar no MySQL

usando JDBC no Mono!!

Page 48: Interop itcare: Interoperabilidade Java e .NET

48

Page 49: Interop itcare: Interoperabilidade Java e .NET

Alessandro de Oliveira BinharaProjeto MONO [email protected]

O Projeto Mono: Aplicações .NET para sistemas não Windows

CÓDIGO S