interop itcare: interoperabilidade java e .net
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
Alessandro de Oliveira BinharaProjeto MONO [email protected]
Interoperabilidade Java e .NET
CÓDIGO S
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
3
Sun X Microsoft
Sun (Oracle)Uma LinguagemPadrão, Manutenção, Comunicação Foco na Empresa
MicrosoftMuitas LinguagensFacilidade, Aprendizado, PreferênciaFoco no Desenvolvedor
Plataforma JAVA
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)
6
Mire no elefante e acerte na mosca!
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
Plataforma .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
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
11
Interoperabilidade entre Linguagens
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/
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
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”
Plataforma Mono
16
MotivaçõesProjeto MONO
Um problema do Linux era ter boas ferramentas integradas
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?”
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
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
20
Multi-Linguagem e Multi-plataforma
21
O que é ?Projeto MONO
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
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.
IKVMInteroperabilidade 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
26
Java Virtual Machine
27
JAVA na IKVM
28
JAVA na IKVM
29
Instalação da IKVM
apt-get install IKVMSUSE use o YASTNo redhat tem pacotes prontos
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
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
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
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
34
CreateFile.java
Biblioteca Mono
35
ShowFile.java
Biblioteca Mono
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
37
Herança!!!!! Subject.java
38
Herança !! Extencion.cs
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
40
Exemplo
41
Figure.java
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
43
Circle.cs
Herança
Chamada a superClasse
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
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)
46
CASE Jsenna
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!!
48
Alessandro de Oliveira BinharaProjeto MONO [email protected]
O Projeto Mono: Aplicações .NET para sistemas não Windows
CÓDIGO S