Você está na página 1de 5

31/10/2015

ImplementaoCORBA

ProgramaoCORBA
ValelembrarqueCORBA(CommonObjectRequestBrokerArchitecture)simplesmente
umaespecificaodesenvolvidapelaOMG(ObjectManagementGroup).Uma
implementaoCORBAconhecidacomoumORB(ouObjectRequestBroker)ehvrias
implementaescomoVisiBroker,ORBIX,ORBacusetc.JavaIDLumaimplementaoda
SUNquevemcomoumpacoteapartirdoJDK1.3.
Implementao
Compilao
Execuo

ODesenvolvimentodeumaAplicaoCORBA
OspassosfundamentaisparaodesenvolvimentodeaplicaesCORBAso:
1.
2.
3.
4.
5.
6.

Definiodeinterface(s)emIDL(InterfaceDefinitionLanguagem)
Mapeamentodeinterface(s)IDLemJava(ououtraslinguagens)
Implementaoda(s)interface(s)
Desenvolvimentodeservidor(es)incluicompilao
Desenvolvimentodecliente(s)incluicompilao
Execuodoserviodenomes,do(s)servidro(es)edo(s)cliente(s).

Oexemploaseguirmostraodesenvolvimentodeumaaplicaodetransfernciade
arquivoemJavaIDL.

Definiodainterface
Nadefiniodeumainterface,pensenotipodeoperaesqueoservidorsuportar.Na
aplicaodetransfernciadearquivo,oclienteinvocarummtodoparabaixarumarquivo.
OcdigoabaixomostraainterfacedeFileInterface.
FileInterface.idl
interfaceFileInterface{
typedefsequence<octet>Data
DatadownloadFile(instringfileName)
}

Umavezdefinidaainterface,compileusandoocompiladoridlj.Paratanto,antes

Executeoarquivodeloteparaconfiguraodoambienteatravsdoatalho:
Start>Programs>Linguagens>Java>jdk1.3
Ocompiladoridljaceitaopesquepermitemespecificarageraodestubsdeclientes,
skeletonsdeservidores,ouambos.Aopof<lado>usadaparaespecificaroque
gerar:ladopodeserclient,serverouall.Dadoqueaaplicaoexecutaremduas
mquinasdistintas,podeseusaraopofservernoladodoservidor,efclientno
ladodocliente.
prompt>idljfserverFileInterface.idl
http://www.cin.ufpe.br/~cagf/sdgrad/implementacao_corba.htm

1/5

31/10/2015

ImplementaoCORBA

Estecomandogeravriosarquivoscomoskeletons,holderehelper,eoutros.Oarquivo
_FileInterfaceImplBaseserusadopelaclassequeimplementaainterface.

Implementaodainterface
Aimplementaodeumainterface(seusmtodos)chamadadeservant,enocdigo
abaixoobservequeaclasseFileServantestendeaclasse_FileInterfaceImplBasepara
especificarqueesteservantumobjetoCORBA.
FileServant.java
importjava.io.*
publicclassFileServantextends_FileInterfaceImplBase{
publicbyte[]downloadFile(StringfileName){
Filefile=newFile(fileName)
bytebuffer[]=newbyte[(int)file.length()]
try{
BufferedInputStreaminput=new
BufferedInputStream(newFileInputStream(fileName))
input.read(buffer,0,buffer.length)
input.close()
}catch(Exceptione){
System.out.println("FileServantError:"+e.getMessage())
e.printStackTrace()
}
System.out.println("Transferingfile"+fileName+"...")
return(buffer)
}
}

Desenvolvimentodoservidor
AclasseFileServe,mostradanocdigoabaixo,implementaumservidorCORBAquefazo
seguinte:
1. InicializaoORB
2. CriaumobjetoFileServant(interfacedoserviooferecido)
3. RegistraoobjetonoserviodenomesCORBA(COSNaming)COS=CORBAObject
Services

4. Esperaporpedidosdecliente
FileServer.java
importjava.io.*
importorg.omg.CosNaming.*
importorg.omg.CosNaming.NamingContextPackage.*
importorg.omg.CORBA.*
publicclassFileServer{
publicstaticvoidmain(Stringargs[]){
try{
//createandinitializetheORB
ORBorb=ORB.init(args,null)
//createtheservantandregisteritwiththeORB
FileServantfileRef=newFileServant()
http://www.cin.ufpe.br/~cagf/sdgrad/implementacao_corba.htm

2/5

31/10/2015

ImplementaoCORBA

orb.connect(fileRef)
//gettherootnamingcontextreturnsagenericCORBAobject
org.omg.CORBA.ObjectobjRef=
orb.resolve_initial_references("NameService")
//cast(narrowdown)thereferencetotherootofthenaming
//service(agenericCORBAobject)toitspropertype
NamingContextncRef=NamingContextHelper.narrow(objRef)
//Bindtheobjectreferenceinnaming
NameComponentnc=newNameComponent("FileTransfer","")
NameComponentpath[]={nc}
ncRef.rebind(path,fileRef)
System.out.println("Serverstarted....")
//Waitforinvocationsfromclients
java.lang.Objectsync=newjava.lang.Object()
synchronized(sync){
sync.wait()
}
}catch(Exceptione){
System.err.println("ERROR:"+e.getMessage())
e.printStackTrace(System.out)
}
}
}

Desenvolvimentodocliente
1. Obtmumarefernciaparaoserviodenomes
2. Usaarefernciaobtidaparaacessaroserviodenomeseencontraroutrosservios
3. Invocamtodosnosserviosencontrados
FileClient.java
importjava.io.*
importjava.util.*
importorg.omg.CosNaming.*
importorg.omg.CORBA.*
publicclassFileClient{
publicstaticvoidmain(Stringargv[]){
try{
//createandinitializetheORB
ORBorb=ORB.init(argv,null)
//gettherootnamingcontext
org.omg.CORBA.ObjectobjRef=
orb.resolve_initial_references("NameService")
NamingContextncRef=NamingContextHelper.narrow(objRef)
NameComponentnc=newNameComponent("FileTransfer","")
//Resolvetheobjectreferenceinnaming
NameComponentpath[]={nc}
FileInterfaceOperationsfileRef=
FileInterfaceHelper.narrow(ncRef.resolve(path))
if(argv.length<1){
System.out.println("Usage:javaFileClientfilename")
}
//savethefile
Filefile=newFile(argv[0])
bytedata[]=fileRef.downloadFile(argv[0])
http://www.cin.ufpe.br/~cagf/sdgrad/implementacao_corba.htm

3/5

31/10/2015

ImplementaoCORBA

BufferedOutputStreamoutput=new
BufferedOutputStream(newFileOutputStream(argv[0]))
output.write(data,0,data.length)
output.flush()
output.close()
System.out.println("File"+argv[0]+"transfered!")
}catch(Exceptione){
System.out.println("FileClientError:"+e.getMessage())
e.printStackTrace()
}
}
}

CompilaodosComponentesdaAplicao
prompt>javacFileServer.java

Seostubdoclienteaindanofoigerado,copieoarquivoFileInterface.idlecompileo
especificandoquedesejagerarostubdocliente:
prompt>idljfclientFileInterface.idl
prompt>javacFileClient.java

ExecutandoaAplicao
1. ExecuteoserviodenomesCORBA.Ocomandotnameservexecuta,pordefault,na
porta900,maspodeserinicializadoemoutraporta,porexemploaporta1500:
prompt>tnameservORBInitialPort1500

2. Executeoservidor(embackground,usandostart),especificando(ouno,nocaso
daportadefault)aportaondeseencontraoserviodenomes:
prompt>startjavaFileServerORBInitialPort1500

3. Executeocliente,especificandoonomedoarquivoquedesejabaixardoservidorda
aplicao(estearquivodeveexistirnoservidor):
prompt>javaFileClientarquivo.txtORBInitialPort1500

Observaes
Seoserviodenomesestiverrodandoemumamquinadistinta,estapodeser
especificadausandoaopoORBInitialHost,porexemplo:
prompt>javaFileClientarquivo.txtORBInitialHostcaruaruORBInitialPort
1500

Alternativamente,estasopespodemestarnocdigodoscomponentesda
http://www.cin.ufpe.br/~cagf/sdgrad/implementacao_corba.htm

4/5

31/10/2015

ImplementaoCORBA

aplicao.AssimemvezdeinicializaroORBcomo:
ORBorb=ORB.init(argv,null)

Inicializeodaseguinteforma:
Propertiesprops=newProperties()
props.put("org.omg.CORBA.ORBInitialHost","caruaru")
props.put("org.omg.CORBA.ORBInitialPort","1500")
ORBorb=ORB.init(argv,props)

NotequeemJavaIDLnohtransparnciadelocalizaoemrelaoaoservidorde
nomesCORBA.

Referncia
QusayH.Mahmoud,"DistributedJavaProgrammingwithRMIandCORBA".Janeiro2002.
URL:http://developer.java.sun.com/developer/technicalArticles/RMI/rmi_corba/

http://www.cin.ufpe.br/~cagf/sdgrad/implementacao_corba.htm

5/5

Você também pode gostar