RE: [oil-devel] Parâmetros do 'newservant'
Leonardo S. A. Maciel
leonardo at maciel.org
Thu Apr 17 16:17:23 GMT+2 2008
> -----Original Message-----
> From: oil-devel-bounces at lists.luaforge.net [mailto:oil-devel-
> bounces at lists.luaforge.net] On Behalf Of Renato Maia
> Sent: quinta-feira, 17 de abril de 2008 09:16
> To: OiL Devel
> Subject: [oil-devel] Parâmetros do 'newservant'
>
> Olá pessoal.
>
> Estou com problema na API do OiL. A operação 'newservant' é
> implementada internamente pela operação 'object' da faceta
> 'ServerBroker.broker'. Mas esse componente tem duas implementações no
> OiL: uma sem suporte a interfaces, cuja assinatura é:
>
> <servant> = object(<implementation> [, <key>])
>
> E outra, com suporte a interfaces, que estende essa operação de forma
> que ela receba um novo parâmetro indicando a interface do servant
> sendo criado:
>
> <servant> = object(<implementation>, <key>, <interface>)
>
> Eu gostaria de imitar esses mesmos parâmetros na operação
> 'newservant' da API do OiL. Mas o problema é que na versão com
> suporte a interfaces, o parâmetro 'key' é opcional e o parâmetro
> interface é obrigatório. Estou considerando seguintes opções (em
> ordem de preferência):
>
> a) Deixar o parâmeto opcional no meio, obrigando as aplicações que
> usem CORBA ou outro protocolo com interfaces (e.g. SOAP, ICE,
> JavaRMI) fazerem 'newservant(impl, nil, interface)' quando não
> quiserem especificar um 'object key'.
>
> LuDO:
> orb:newservant(MyObject)
>
> CORBA:
> orb:newservant(MyObject, nil, "MyInterface")
Não gosto, pois se a maior parte das aplicações usa protocolos tipados, esta
não é a abordagem mais natural.
> b) Definir que a estensão que implementa a operação 'object' da
> faceta 'ServerBroker.broker' adiciona um parâmetro novo no meio, ao
> invés do final como seria mais natural. Isso implicaria que, em ORBs
> com suporte a tipos como CORBA, o segundo parâmetro seria a interface
> e nos ORBs sem suporte a interfaces, o segundo parâmetro seria a
> chave do objeto. Acredito que isso pode causar algumas confusões:
>
> LuDO:
> orb:newservant(MyObject, "MyObject") -- MyObject é a chave do
> servant
>
> CORBA:
> orb:newservant(MyObject, "MyObject") -- MyObject é a interface do
> servant
Pode gerar confusão mesmo, mas somente para aqueles que irão usar os dois
protocolos. Provavelmente não serão muitos, serão?
> c) Fixar a assinatura desse método da API com os parâemtros
> <implementação>, <interface> e <chave>, mesmo que para protocolos sem
> suporte a interfaces o segundo parâmetro seja totalmente desnecessário.
>
> LuDO:
> orb:newservant(MyObject, nil, "MyObjKey')
>
> CORBA:
> orb:newservant(MyObject, "MyInterface", "MyObjKey")
>
> Nessa abordagem poderíamos até imitar essa interface na faceta
> 'ServerBroker.broker' também, onde a implementação ficaria:
>
> No Type Support:
> function ServerBroker.broker:object(impl, _, key) -- second
> parameter is reserved for future use (e.g. type specification).
> ...
> end
>
> With Type Support:
> function ServerBroker.broker:object(impl, type, key)
> ...
> end
Prefiro esta a primeira, pelo mesmo motivo que não gosto da primeira.
> O que vocês escolhem: (a), (b) ou (c) ?
Minha ordem é b, c, a
More information about the OiL-Devel
mailing list