BR112019013265A2 - deferimento de solicitações de invocação por objetos remotos - Google Patents

deferimento de solicitações de invocação por objetos remotos Download PDF

Info

Publication number
BR112019013265A2
BR112019013265A2 BR112019013265A BR112019013265A BR112019013265A2 BR 112019013265 A2 BR112019013265 A2 BR 112019013265A2 BR 112019013265 A BR112019013265 A BR 112019013265A BR 112019013265 A BR112019013265 A BR 112019013265A BR 112019013265 A2 BR112019013265 A2 BR 112019013265A2
Authority
BR
Brazil
Prior art keywords
invocation
proxy
server
remote
request
Prior art date
Application number
BR112019013265A
Other languages
English (en)
Inventor
Lahman Aaron
Jon Dobin Alexander
Fransazov Mariyan
Shaaban Yasser
Original Assignee
Microsoft Technology Licensing Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing Llc filed Critical Microsoft Technology Licensing Llc
Publication of BR112019013265A2 publication Critical patent/BR112019013265A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • H04L67/025Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/561Adding application-functional data or data for application control, e.g. adding metadata
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/566Grouping or aggregating service requests, e.g. for unified processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Library & Information Science (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Between Computers (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Multi Processors (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)
  • Pyrrole Compounds (AREA)
  • Storage Device Security (AREA)

Abstract

um sistema é fornecido para um aplicativo que executa em um cliente para enviar as solicitações de invocação para objetos remotos de um servidor. cada solicitação de invocação é gerada quando o aplicativo invoca um proxy de uma classe de proxy do aplicativo correspondendo a um objeto remoto de uma classe de objeto remoto. para cada solicitação de invocação, quando a solicitação de invocação é deferível, o sistema armazena a solicitação de invocação. quando a solicitação de invocação não é deferível, o sistema envia para o servidor uma mensagem de solicitação de invocação que inclui cada solicitação de invocação armazenada não enviada previamente e a solicitação de invocação atual. o sistema recebe mensagens de resposta de invocação do servidor. para cada resposta de invocação de uma mensagem de resposta de invocação recebida, o sistema fornece para o aplicativo uma indicação de que a resposta de invocação foi recebida.

Description

Relatório Descritivo da Patente de Invenção para DEFERIMENTO DE SOLICITAÇÕES DE INVOCAÇÃO POR OBJETOS REMOTOS.
Fundamentos [0001] Serviços com base em nuvem são frequentemente fornecidos através de aplicativos que são executados através de um navegador da rede. Para se desenvolver tal aplicativo, um programador pode desenvolver um aplicativo que deve ser executado por um navegador de rede de um cliente e que acessa os serviços de um servidor de um centro de dados de nuvem. O aplicativo (ou código de cliente) fornece tipicamente uma interface de usuário através da qual um usuário pode acessar as características do aplicativo. Por exemplo, se o aplicativo for um processador de texto, então, o aplicativo exibe conteúdo de um documento sendo editado, uma barra de menu para acessar as características do processador de texto (por exemplo, documento aberto e pé de nota de inserto) e assim por diante. O documento que está sendo editado é armazenado no servidor. Dessa forma, quando o usuário solicita a abertura do documento, o aplicativo envia uma solicitação de abertura para o servidor e recebe uma cópia de pelo menos uma parte do documento. O aplicativo exibe o conteúdo do documento. Quando um usuário realiza uma modificação no documento, o aplicativo pode atualizar o conteúdo exibido e enviar uma mensagem para o servidor. O servidor, então, muda o documento. As comunicações entre o cliente e o servidor são tipicamente baseadas no modelo de Transferência de Estado Representativo (REST) ou RESTfuI, tal como as mensagens de solicitação de Protocolo de Transporte de Hipertexto (HTTP) (por exemplo, um método GET) e mensagens de resposta.
[0002] Tais aplicativos são tipicamente escritos em JavaScript visto que a maior parte dos navegadores suporta a execução de aplicativos JavaScript. O código de servidor, em contraste, é tipicamente escrito em
Petição 870190059169, de 26/06/2019, pág. 16/82
2/44 linguagens de programação além de JavaScript, tal como C# ou C++, por razões de eficiência, visto que JavaScript é uma linguagem interpretada e C# e C++ são compiladas em elementos executáveis. JavaScript e C# e C++ são linguagens de programação orientadas por objeto. Uma linguagem de programação orientada por objeto suporta um modelo de programação no qual o programa especifica as classes que definem os tipos de objetos que podem ser iniciados. Uma classe define os elementos de dados e métodos (também referidos como funções de elemento) para os objetos dessa classe. Cada método possui uma assinatura que especifica o nome do método, os tipos de parâmetros de entrada a serem passados para o método, e os tipos de parâmetros de saída a serem retornados pelo método. Por exemplo, uma classe de documento pode ser definida para incluir métodos para abrir um documento, modificar o documento e salvar o documento. Durante a execução de um aplicativo, depois que um objeto de uma determinada classe é iniciado, o aplicativo pode invocar um método do objeto pela especificação de uma referência ao objeto, uma indicação do método a invocar, e os parâmetros de entrada (se algum) a serem passados para o método. Quando o método é completado, o método retorna os parâmetros de saída (se algum).
[0003] Tais aplicativos possuem serviços acessados historicamente de um servidor utilizando uma interface de serviço de rede que é definida por uma Linguagem de Descrição de Serviços de Rede (WSDL) ou utilizando algum outro tipo de mecanismo de chamada de procedimento remoto (RPC). Infelizmente, existe pouco suporte para RPCs orientados por objeto, também referidos como invocações de método remoto (RMIs), a partir de tais aplicativos para os servidores. Como resultado disso, tais aplicativos frequentemente não utilizam uma abordagem orientada por objeto quando acessam os objetos hospedados por um servidor.
Petição 870190059169, de 26/06/2019, pág. 17/82
3/44
Sumário [0004] Um sistema é fornecido para um aplicativo executado por um cliente para invocar um método de objeto remoto de um objeto remoto, de uma classe de objeto remoto, que é hospedado por um servidor. O aplicativo inicia um proxy de uma classe de proxy que inclui uma função de elemento proxy com a mesma assinatura, como a função de elemento de objeto remoto. O aplicativo associa um identificador de objeto com o proxy. O aplicativo invoca a função do elemento proxy do proxy. Sob o controle da função de elemento proxy invocada, o aplicativo envia para o servidor uma mensagem de solicitação de invocação que inclui o identificador de objeto que é associado ao proxy e um identificador da função de elemento de objeto remoto. O aplicativo se baseia na funcionalidade fornecida pelo navegador, sem a necessidade de o navegador acessar a funcionalidade adicional quando executando o aplicativo.
[0005] Um sistema é fornecido para sincronizar um valor de propriedade entre um Proxy de um aplicativo de um cliente e um objeto remoto correspondente de um servidor. O aplicativo inicia um proxy de uma classe proxy correspondendo a um objeto remoto de uma classe de objeto remoto onde a classe proxy especifica uma propriedade com um “getter” de proxy. O aplicativo envia para o servidor uma mensagem de solicitação de invocação para invocar uma função de elemento de objeto remoto de um objeto remoto e receber uma mensagem de resposta de invocação. Quando a mensagem de resposta de invocação inclui uma atualização de propriedade, o aplicativo extrai, da mensagem de resposta de invocação, o valor da propriedade a partir da atualização de propriedade e armazena o valor extraído no proxy. Quando o “getter” de proxy para a propriedade é invocado, o valor da propriedade pode ser recuperado do proxy sem precisar enviar uma mensagem de solicitação de invocação para o servidor.
[0006] Um sistema é fornecido para um aplicativo sendo executado
Petição 870190059169, de 26/06/2019, pág. 18/82
4/44 em um cliente para enviar solicitações de invocação para objetos remotos de um servidor. Cada solicitação de invocação é gerada quando o aplicativo invoca um proxy de uma classe Proxy do aplicativo correspondendo a um objeto remoto de uma classe de objeto remoto. Para cada solicitação de invocação, quando a solicitação de invocação é deferível, o sistema armazena a solicitação de invocação. Quando a solicitação de invocação não é deferível, o sistema envia para o servidor uma mensagem de solicitação de invocação que inclui cada solicitação de invocação armazenada, não enviada previamente e a solicitação de invocação atual. O sistema recebe as mensagens de resposta de invocação do servidor. Para cada resposta de invocação de uma mensagem de resposta de invocação recebida, o sistema fornece para o aplicativo uma indicação de que a resposta de invocação foi recebida.
[0007] Esse Sumário é fornecido para introduzir uma seleção de conceitos de uma forma simplificada que são adicionalmente descritos abaixo na Descrição Detalhada. Esse Sumário não deve identificar características chave ou características essenciais da presente matéria reivindicada, nem deve ser utilizado para limitar o escopo da presente matéria reivindicada.
Breve Descrição dos Desenhos [0008] A figura 1 é um diagrama em bloco que ilustra estruturas de dados de um aplicativo e componente de servidor em algumas modalidades.
[0009] A figura 2 é um fluxograma que ilustra o processamento de um método de um proxy que é invocado de forma sincronizada em algumas modalidades.
[0010] A figura 3 é um fluxograma que ilustra o processamento de um componente de solicitação de recebimento de um componente servidor em algumas modalidades.
[0011] A figura 4 é um fluxograma que ilustra o processamento de
Petição 870190059169, de 26/06/2019, pág. 19/82
5/44 um método de parâmetros de extrato de uma classe de objeto de resposta para um objeto de resposta de um componente de cliente em algumas modalidades.
[0012] A figura 5 é um fluxograma que ilustra o processamento de um método de parâmetros de armazenamento de uma classe de objeto de resposta para um objeto de resposta de um componente servidor em algumas modalidades.
[0013] A figura 6 é um fluxograma ilustrando o processamento de um método de ID de recuperação de uma classe de objeto de tabela de ID em algumas modalidades.
[0014] A figura 7 é um fluxograma que ilustra o processamento de um método de referência de recuperação de um objeto de tabela de IDs em algumas modalidades.
[0015] A figura 8 é um fluxograma que ilustra o processamento de um método de adição de registro de um objeto de tabela de IDs que é passado por uma referência em algumas modalidades.
[0016] A figura 9 é um fluxograma que ilustra o processamento de um método de adição de registro de um objeto de tabela de IDs que é passado por um registro em algumas modalidades.
[0017] A figura 10 é um diagrama em bloco que ilustra uma implementação do sistema OORPC que suporta a hospedagem não hierarquizada de objetos remotos em algumas modalidades.
[0018] A figura 11 é um diagrama em bloco que ilustra estruturas de dados que suportam a sincronização de valores de propriedades pelo sistema OORPC em algumas modalidades.
[0019] A figura 12 é um fluxograma que ilustra o processamento de um componente de valores de obtenção de propriedade de um componente servidor em algumas modalidades.
[0020] A figura 13 é um fluxograma que ilustra o processamento de um componente de valores de armazenamento de propriedade de um
Petição 870190059169, de 26/06/2019, pág. 20/82
6/44 componente de cliente em algumas modalidades.
[0021 ] A figura 14 é um fluxograma que ilustra um gerador de código do sistema OORPC para gerar automaticamente o código para classes proxy em algumas modalidades.
[0022] A figura 15 é um fluxograma que ilustra o processamento de um componente de propriedades proxy de processamento de proxy do gerador de código em algumas modalidades.
[0023] A figura 16 é um fluxograma que ilustra o processamento de um componente de enviar solicitação de um componente de cliente em algumas modalidades.
[0024] A figura 17 é um fluxograma que ilustra o processamento de um componente de recebimento de solicitação de um componente servidor em algumas modalidades.
Descrição Detalhada [0025] Um método e sistema são fornecidos para a geração automática de código para um aplicativo executado por um cliente para acessar os objetos que são hospedados remotamente por um servidor ou outro dispositivo remoto de forma orientada por objeto. O termo cliente se refere a um dispositivo de computação e o termo servidor se refere a um dispositivo de computação. Em algumas modalidades, um sistema de Chamada de Procedimento Orientada por Objeto (OORPC) registra uma definição das interfaces para as classes de objeto remoto para os objetos que são hospedados remotamente pelo servidor (objetos remotos). Para cada classe de objeto remoto, o sistema OORPC gera automaticamente uma classe proxy que serve como um proxy para a classe de objeto remoto. Um proxy é um objeto cujos métodos enviam basicamente mensagens de solicitação de invocação para o servidor que hospeda o objeto remoto correspondente. Existe tipicamente uma correspondência de um para um entre um proxy e um objeto remoto. A classe proxy possui a mesma interface (por exemplo,
Petição 870190059169, de 26/06/2019, pág. 21/82
7/44 os mesmos métodos e assinaturas de método) que a classe de objeto remoto correspondente, mas com o código que é diferente do código da classe de objeto remoto. Para cada método da classe proxy, o sistema OORPC gera um código para esse método que, quando invocado, envia uma mensagem de solicitação de invocação para o servidor que hospeda um objeto remoto correspondente ao proxy da classe proxy. A mensagem de solicitação de invocação identifica o objeto remoto, o método e quaisquer parâmetros de registro passados para o método. O sistema OORPC também gera o código para o método que, depois de uma mensagem de resposta de invocação ser recebida do dispositivo remoto, retorna da invocação do método com quaisquer parâmetros de saída que foram identificados na mensagem de resposta de invocação. Alternativamente, se a invocação de um método for uma invocação assíncrona, o sistema OORPC inclui um componente de cliente para processar a mensagem de resposta de invocação que pode não ser parte do método, mas, em vez disso, ser parte de um método de “call-back” que deve ser invocado para sinalizar para o aplicativo que a execução do método foi terminada.
[0026] Em algumas modalidades, o sistema OORPC fornece um componente de cliente para o aplicativo que mapeia cada proxy para seu objeto remoto correspondente. O aplicativo pode possuir um proxy de criação correspondente a um objeto remoto de criação que é utilizado para iniciar os objetos remotos. Cada método do proxy de criação pode ser invocado para iniciar um objeto remoto de uma determinada classe de objeto remoto. Cada método envia uma mensagem de solicitação de invocação para um componente servidor, referido como um stub, para invocar o método correspondente no objeto remoto de criação para iniciar um objeto remoto da classe de objeto remoto. Cada método inicia também um proxy para o objeto remoto e retorna uma referência para o
Petição 870190059169, de 26/06/2019, pág. 22/82
8/44 proxy. Por exemplo, o proxy de criação pode possuir um método de criação de documento que envia uma mensagem de solicitação de invocação para o componente servidor solicitando a invocação do método de criação de documento do objeto de criação remota para iniciar um objeto remoto de documento. O objeto remoto de documento iniciado pode receber um identificador de objeto (pelo aplicativo ou código servidor). O método de criação de documento proxy de criação também inicia um proxy de documento correspondendo ao objeto remoto de documento e mapeia uma referência para o proxy de documento (por exemplo, endereço proxy de documento) para o identificador de objeto. O método de criação de documento proxy de criação, então, retorna a referência para o proxy de documento. Quando o aplicativo invoca subsequentemente um método proxy de documento, como indicado pela referência, esse método utiliza sua referência para recuperar o identificador de objeto do objeto remoto de documento. Esse método, então, envia para o componente servidor, uma mensagem de solicitação de invocação como descrito acima que inclui o identificador de objeto para identificar o objeto remoto de documento para o componente servidor.
[0027] Quando o componente servidor recebe uma mensagem de solicitação de invocação, o componente servidor extrai da mensagem de solicitação de invocação o identificador de objeto, o identificador de método e quaisquer parâmetros de registro. O componente servidor recupera uma referência para o objeto remoto que é identificado pelo identificador de objeto e invoca o método identificado que passa os parâmetros de registro. Quando o método retorna, o componente servidor envia uma mensagem de resposta de invocação para o cliente que inclui o identificador de objeto, o identificador de método e quaisquer parâmetros de saída.
[0028] Em algumas modalidades, o proxy de criação e o objeto remoto de criação são iniciados durante a inicialização do aplicativo e do
Petição 870190059169, de 26/06/2019, pág. 23/82
9/44 componente servidor, respectivamente, independentemente um do outro. Isso é, o aplicativo inicia o proxy de criação sem comunicar com o componente servidor, e o componente servidor inicia o objeto remoto de criação sem comunicar com o aplicativo. O aplicativo e o componente servidor designam o mesmo identificador de objeto (por exemplo, predefinido) para identificar o proxy de criação e o objeto remoto de criação, de modo que quando o aplicativo invoca um método do proxy de criação, a mensagem de solicitação de invocação que é enviada para o servidor inclui o identificador de objeto do objeto remoto de criação. Depois que o componente servidor invoca um método do objeto remoto de criação, o componente servidor retorna uma referência para o objeto remoto recém-criado. O componente servidor, então, gera um identificador de objeto para o objeto remoto recém-criado, mapeia o identificador de objeto para a referência e envia uma mensagem de resposta de invocação que inclui o identificador de objeto e o identificador de método do método que foi invocado. Quando o aplicativo recebe a mensagem de resposta de invocação, o aplicativo mapeia o identificador de objeto para a referência com o proxy correspondente. Dessa forma, quando um método do proxy correspondente é invocado subsequentemente, o método pode incluir o identificador de objeto do objeto remoto na mensagem de solicitação de invocação.
[0029] Em algumas modalidades, o sistema OORPC pode não enviar solicitações de invocação até que um critério de mensagem de solicitação de invocação seja satisfeito. Quando o critério de mensagem de solicitação de invocação é satisfeito, o sistema OORPC envia uma mensagem de solicitação de invocação que inclui cada solicitação de invocação que ainda não foi enviada. Por exemplo, os métodos das classes proxy podem ser designados como deferíveis ou não (por exemplo, através de metadados associados com a interface para a classe de objeto remoto). Quando o aplicativo invoca um método que é deferível,
Petição 870190059169, de 26/06/2019, pág. 24/82
10/44 o sistema OORPC gera uma solicitação de invocação que inclui o identificador de objeto, o identificador de método e quaisquer parâmetros de registro e enfileira a solicitação de invocação. Quando o aplicativo invoca um método que não é deferível, o sistema OORPC envia uma mensagem de solicitação de invocação que inclui as solicitações de invocação enfileiradas e uma solicitação de invocação para a invocação atual. O critério de mensagem de enviar solicitação de invocação pode ser satisfeito quando um método não deferível é invocado. A mensagem de enviar solicitação de invocação pode ser satisfeita de forma similar quando uma solicitação de invocação foi enfileirada por um período determinado, quando um determinado número de solicitações de invocação é enfileirado, quando o aplicativo determina que essa mensagem de solicitação de invocação seja enviada e/ou assim por diante.
[0030] Quando o componente servidor recebe uma mensagem de solicitação de invocação com múltiplas solicitações de invocação, o componente servidor processa as solicitações de invocação na ordem na qual são enfileiradas. Depois da finalização das solicitações de invocação, o componente servidor envia uma mensagem de resposta de invocação que inclui uma resposta de invocação para cada solicitação de invocação da mensagem de solicitação de invocação. Quando o aplicativo recebe a mensagem de resposta de invocação, o mesmo processa as respostas de invocação na ordem de suas solicitações de invocação correspondentes.
[0031] Em algumas modalidades, o sistema OORPC fornece suporte para armazenar os valores de propriedades dos objetos remotos localmente em um cliente. Quando o sistema OORPC gera uma classe proxy para uma classe de objeto remoto, o sistema OORPC gera métodos de obtenção (getters) para propriedades diferentemente de outros métodos. O sistema OORPC gera um método de obtenção que, em vez de enviar uma mensagem de solicitação de invocação para o servidor
Petição 870190059169, de 26/06/2019, pág. 25/82
11/44 para recuperar o valor da propriedade, recupera um valor armazenado localmente para a propriedade e retorna o valor. Para garantir que o valor localmente armazenado para uma propriedade de um proxy seja sincronizado com o valor armazenado pelo objeto remoto correspondente, o componente servidor pode anexar à cada mensagem de resposta de invocação uma atualização de propriedade para cada propriedade de um objeto remoto cujo valor mudou desde que a última mensagem de resposta de invocação foi enviada. O componente servidor pode manter uma lista de valores que foram enviados por último para cada propriedade, e quando enviando uma mensagem de resposta de invocação, pode invocar o método de obtenção para cada propriedade de cada objeto remoto para identificar os valores que mudaram.
[0032] Quando o aplicativo recebe uma mensagem de resposta de invocação com uma atualização de propriedade, o aplicativo armazena o novo valor da atualização de propriedade no proxy correspondente. Quando o sistema OORPC gera classes proxy a partir das interfaces das classes de objeto remoto, o sistema OORPC pode gerar uma classe de armazenamento para cada classe proxy. A classe de armazenamento pode incluir uma tabela que mapeia um identificador para cada propriedade (por exemplo, hash do nome de propriedade) para o tipo de propriedade (por exemplo, inteiro) e um método da classe de armazenamento para armazenar o valor para essa propriedade. O sistema OORPC pode adicionar a uma classe proxy um elemento de dados estáticos que é uma referência a um objeto de armazenamento que é uma classe de armazenamento para essa classe proxy. Quando o sistema OORPC recebe um novo valor para uma propriedade, o mesmo recupera da atualização de propriedade na mensagem de resposta de invocação o identificador de objeto do objeto remoto, o identificador da propriedade e o valor da propriedade. O sistema OORPC utiliza o identificador de objeto para recuperar a referência ao proxy correspondente e
Petição 870190059169, de 26/06/2019, pág. 26/82
12/44 recuperar a partir desse proxy a referência para o objeto de armazenamento. O sistema OORPC, então, invoca o método de armazenamento do objeto de armazenamento correspondendo à propriedade que passa a referência para o proxy e o valor. O método de armazenamento armazena o valor no proxy.
[0033] A figura 1 é um diagrama em bloco que ilustra estruturas de dados de um aplicativo e componente servidor em algumas modalidades. Um cliente 110 executa um aplicativo 111, e um servidor 120 executa um componente servidor 121.0 aplicativo e o componente servidor são representados como pseudocódigos. Durante a inicialização, um componente de cliente 119 do sistema OORPC sendo executado no cliente pode iniciar um objeto de tabela de ID 113, e o componente de servidor, que é um componente do sistema OORPC, pode iniciar um objeto de tabela de IDs 123. Os objetos de tabela de IDs fornecem métodos para armazenar e recuperar mapeamentos de identificadores de objeto de proxies e objetos remotos para suas referências correspondentes em uma tabela de IDs dos objetos de tabela de IDs. O aplicativo inicia um proxy de criação 112, e o componente servidor inicia um objeto remoto de criação correspondente 122. O componente de cliente adiciona ao objeto de tabela de IDs 113 um mapeamento de um identificador de objeto (por exemplo, 1) para o proxy de criação para uma referência (por exemplo, endereço de) para o proxy de criação (S), e o componente servidor adiciona ao objeto da tabela de IDs 123 um mapeamento de um identificador de objeto para o objeto remoto de criação para uma referência para o objeto remoto de criação. O componente servidor, então, espera receber as solicitações de invocação do cliente. O identificador de objeto para um proxy do cliente e o identificador de objeto para o objeto remoto correspondente do servidor, possuem o mesmo valor.
[0034] Para criar um objeto remoto de uma classe de objeto remoto, o aplicativo invoca um método do proxy de criação para criar objetos
Petição 870190059169, de 26/06/2019, pág. 27/82
13/44 remotos da classe de objeto remoto. Por exemplo, se uma classe de objeto remoto for chamada de X, o aplicativo pode invocar um método createX do proxy de criação para criar um objeto remoto da classe de objeto remoto X. O método createX do proxy de criação envia para o servidor uma mensagem de solicitação de invocação (req) que inclui um identificador de objeto do objeto remoto de criação (req.ID), um identificador de método do método createX (req.method), e quaisquer parâmetros de registro (req.inparam). O componente de cliente pode iniciar um objeto de solicitação 117 para armazenar os dados de uma mensagem de solicitação de invocação a ser enviada e um objeto de resposta 118 para armazenar os dados de uma mensagem de invocação de reposta que é recebida. De forma similar, o componente servidor pode iniciar um objeto de solicitação 127 para armazenar os dados de uma mensagem de solicitação de invocação que é recebida e um objeto de resposta 128 para armazenar os dados de uma mensagem de resposta de invocação a ser enviada.
[0035] Depois de receber a mensagem de solicitação de invocação, o componente servidor extrai o identificador de objeto a partir da mensagem de solicitação de invocação e invoca um método de recuperação de referência (retrieveref) de seu objeto de tabela de IDs passando pelo identificador de objeto para recuperar uma referência para o objeto remoto de criação. O componente servidor, então, invoca um método de extração (extract) do objeto de solicitação para extrair quaisquer parâmetros de registro (inparam). O componente servidor, então, extrai, do objeto solicitado, o identificador de método do método createX. O componente servidor, então, utiliza a referência para o objeto remoto de criação e o identificador do método createX para invocar o método createX do objeto remoto de criação passando pelos parâmetros de registro. O método createX inicia um objeto remoto 124 (objeto X2) da
Petição 870190059169, de 26/06/2019, pág. 28/82
14/44 classe X e retorna um parâmetro de saída que é uma referência ao objeto remoto 124. Apesar de não ilustrado pelo pseudocódigo, o componente servidor também invoca um método de adição de registro do objeto de tabela de IDs 123 para adicionar à sua tabela de IDs um registro que mapeia o identificador de objeto (2) para o objeto remoto 124 com a referência para o objeto remoto 124 (X2) e adiciona a um objeto de resposta (res), o identificador de objeto (res.lD), e o identificador do método createX (res.method). O componente servidor, então, invoca um método de armazenamento (armazenamento) do objeto de resposta para armazenar quaisquer parâmetros de saída. O componente servidor, então, envia para o cliente uma mensagem de resposta de invocação com base no objeto de resposta.
[0036] Depois de receber a mensagem de resposta de invocação, o componente de cliente inicia um objeto de resposta com base na mensagem de resposta de invocação. O componente de cliente, então, inicia um proxy 114 (proxy X2) e invoca um método de adição de registro do objeto de tabela de IDs 113 para adicionar à sua tabela de IDs um mapeamento do identificador de objeto (2) para o proxy 114 à referência do proxy 114 (X2). Se a invocação do método createX for sincronizada, então, o método createX retorna com referência ao proxy 114.
[0037] Depois que o objeto remoto 124 e seu proxy correspondente 114 são iniciados, o aplicativo, então, invoca um método do proxy 114 para uma indicação de um parâmetro de registro (in). O método invocado pode invocar o componente de cliente para gerar um objeto de solicitação que inclui o identificador de objeto do proxy 114 (2), um identificador de método, e o parâmetro de registro e para enviar para o servidor uma mensagem de solicitação de invocação com base no objeto de solicitação. Depois de receber a mensagem de resposta de invocação, o componente servidor recupera a referência para o objeto re
Petição 870190059169, de 26/06/2019, pág. 29/82
15/44 moto 124 a partir do objeto de tabela de IDs e invoca o método identificado do objeto remoto 124 passando os parâmetros de registro. Quando o método retorna, o componente servidor gera um objeto de resposta que inclui o identificador de objeto do objeto remoto 124 (2), o identificador de método e quaisquer parâmetros de saída. O componente servidor, então, envia para o cliente uma mensagem de resposta de invocação com base no objeto de resposta. Depois de receber a mensagem de resposta de invocação, o componente de cliente extrai os parâmetros de saída e sinaliza que o método retornou para afetar um processamento de invocação sincronizado ou assíncrono.
[0038] O aplicativo pode, então, invocar o método createX e o método createY do proxy de criação para realizar a criação do objeto remoto 125 (objeto X3) e o objeto remoto 126 (objeto Y4) no servidor e o proxy correspondente 115 (proxy X3) e o proxy correspondente 116 (proxy X4) no cliente. O aplicativo pode, então, invocar métodos do objeto remoto 125 e o objeto remoto 126 pela invocação dos métodos correspondentes do proxy 115 e o proxy 116.
[0039] Os sistemas de computação (por exemplo, clientes, servidores, dispositivos de cliente, dispositivos servidores) nos quais o sistema OORPC pode ser implementado podem incluir uma unidade de processamento central, dispositivos de registro, dispositivos de saída (por exemplo, dispositivos de exibição e alto falantes), dispositivos de armazenamento (por exemplo, memórias e acionadores de disco), interfaces de rede, unidades de processamento gráfico, acelerômetros, interfaces de link de rádio celular, dispositivos de sistema de posicionamento global, e assim por diante. Os sistemas de computação podem incluir servidores de um centro de dados, sistemas massivamente paralelos, e assim por diante. Os sistemas de computação podem acessar meio legível por computador que inclui meio de armazenamento legível por
Petição 870190059169, de 26/06/2019, pág. 30/82
16/44 computador e mídia de transmissão de dados. O meio de armazenamento legível por computador são meios de armazenamento tangíveis que não incluem um sinal transitório de propagação. Exemplos de meio de armazenamento legível por computador incluem memória tal como memória primária, memória temporária, e memória secundária (por exemplo, DVD) e outro armazenador. O meio de armazenamento legível por computador pode ter registradas no mesmo, ou pode ser codificado com instruções executáveis por computador ou lógica que implementa o sistema OORPC. O meio de transmissão de dados é utilizado para transmitir dados através dos sinais de propagação ou ondas portadoras transitórias (por exemplo, eletromagnetismo) através de uma conexão com ou sem fio.
[0040] O sistema OORPC pode ser descrito no contexto geral de instruções executáveis por computador, tal como módulos de programa e componentes, executados por um ou mais computadores, processadores ou outros dispositivos. Geralmente, os módulos ou componentes de programa incluem rotinas, programas, objetos, estruturas de dados, e assim por diante que realizam tarefas particulares ou implementam tipos de dados em particular. Tipicamente, a funcionalidade dos módulos de programa pode ser combinada ou distribuída como desejado em várias modalidades. Aspectos do sistema OORPC podem ser implementados em hardware utilizando, por exemplo, um circuito integrado específico de aplicativo (ASIC).
[0041] A figura 2 é um fluxograma que ilustra o processamento de um método de um proxy que é invocado de forma sincronizada em algumas modalidades. Um método 200, que é gerado automaticamente por um gerador de código do sistema OORPC, é passado por um ou mais parâmetros de registro e retorna um ou mais parâmetros de saída. O método envia para o servidor uma mensagem de solicitação de invocação e recebe uma mensagem de resposta de invocação. No bloco
Petição 870190059169, de 26/06/2019, pág. 31/82
17/44
202, o método invoca um método de recuperação de identificador do objeto de tabela de IDs passando por uma referência para o proxy (esse) para recuperar o identificador de objeto do proxy. O método armazena o identificador de objeto do proxy em um objeto solicitado. No bloco 204, o método adiciona o identificador de método ao objeto de solicitação. No bloco 206, o método invoca um método de armazenamento de parâmetros do objeto de solicitação para armazenar os parâmetros de registro. No bloco 208, o método envia para o servidor uma mensagem de solicitação de invocação que é baseada no objeto de solicitação. No bloco 210, o método recebe do servidor uma mensagem de resposta de invocação e gera um objeto de resposta. No bloco 212, o método invoca um método de extração de parâmetros do objeto de resposta para extrair os parâmetros de saída. O método é então completado. Em algumas modalidades, o método pode invocar um componente de cliente para realizar o processamento dos blocos 202 a212. [0042] A figura 3 é um fluxograma que ilustra o processamento de um componente de recebimento de solicitação de um componente de servidor em algumas modalidades. Um componente de recebimento de solicitação 300 é invocado quando uma mensagem de solicitação de invocação é recebida de um cliente e passa para um objeto de solicitação que é baseado na mensagem de solicitação de invocação. O componente invoca um método de um objeto remoto e envia para o cliente uma mensagem de resposta de invocação. No bloco 302, o componente extrai o identificador de objeto de um objeto remoto a partir do objeto de solicitação e invoca um método de recuperação de referência do objeto de tabela de IDs, passando o identificador de objeto, e recebe uma referência ao objeto remoto. No bloco 304, o componente extrai o identificador de método do objeto de solicitação. No bloco 306, o componente invoca um método de extração de parâmetros do objeto de solicitação
Petição 870190059169, de 26/06/2019, pág. 32/82
18/44 para extrair os parâmetros de entrada. No bloco 308, o componente invoca o método de identificador do objeto remoto, passando os parâmetros de registro e recebendo qualquer parâmetro de saída mediante retorno. No bloco 310, o componente gera um objeto de resposta que inclui o identificador de objeto, o identificador de método, e parâmetros de saída. No bloco 312, o componente envia para o cliente uma mensagem de resposta de invocação que é baseada no objeto de resposta e, então, é completado.
[0043] A figura 4 é um fluxograma que ilustra o processamento de um método de extração de parâmetros de uma classe de resposta de objeto para um objeto de resposta de um componente de cliente em algumas modalidades. Um método de extração de parâmetros 400 é invocado por um componente de cliente para extrair os parâmetros de saída retornados por um método invocado. No bloco 402, o método seleciona o próximo parâmetro de saída começando com o primeiro. No bloco de decisão 404, se todos os parâmetros de saída já tiverem sido selecionados, então, o método é encerrado, ou o método continua no bloco 406. No bloco de decisão 406, se o parâmetro de saída selecionado for um identificador de um objeto remoto, então, o método continua no bloco 410, ou o método continua no bloco 408. No bloco 408, o componente armazena o parâmetro de saída selecionado como um parâmetro de saída e, então, volta para o bloco 402 para selecionar o próximo parâmetro de saída. No bloco 410, o método invoca o método de recuperação de referência do objeto de tabela de IDs para recuperar uma referência para o objeto remoto identificado no objeto de resposta. No bloco de decisão 412, se a referência for nula, então um proxy para o objeto remoto não foi iniciado e o método continua no bloco 414, ou o método continua no bloco 422. No bloco 414, o método inicia um proxy para a classe do objeto remoto. O gerador de código para o sistema OORPC pode identificar a classe do objeto remoto, e, mais geralmente,
Petição 870190059169, de 26/06/2019, pág. 33/82
19/44 o tipo de qualquer parâmetro, a partir da assinatura do método invocado. Nos blocos 416 e 418, o método cria um registro para a tabela de IDs. No bloco 420, o método invoca um método de adição de registro do objeto de tabela de IDs para armazenar o registro e, então, continua no bloco 422. No bloco 422, o componente configura o parâmetro de saída para a referência retornada e, então, volta para o bloco 402 para selecionar o próximo parâmetro de saída do objeto de resposta.
[0044] A figura 5 é um fluxograma que ilustra o processamento de um método de armazenamento de parâmetros de uma classe de objeto de resposta para um objeto de resposta de um componente servidor em algumas modalidades. Um método de armazenamento de parâmetros 500 é passado para os parâmetros de saída para serem armazenados no objeto de resposta. No bloco 502, o método seleciona o próximo parâmetro de saída. No bloco de decisão 504, se todos os parâmetros de saída já tiverem sido selecionados, então, o método é encerrado, ou o método continua no bloco 506. No bloco de decisão 506, se o parâmetro de saída for uma referência a um objeto, então, o componente continua no bloco 508, ou o componente continua no bloco 510. No bloco 508, o componente invoca um método de recuperação de ID do objeto de tabela de IDs para recuperar o identificador de objeto correspondente à referência e configura o parâmetro de saída para a referência. No bloco 510, o componente armazena o parâmetro de saída no objeto de resposta e então volta para o bloco 502 para selecionar o próximo parâmetro de saída. Como também não ilustrado, um objeto de solicitação também possui um método de extração de parâmetros e um método de armazenamento de parâmetros que funcionam de uma forma similar aos de um objeto de resposta.
[0045] As figuras 6 a 9 são fluxogramas ilustrando métodos de uma classe de objeto de tabela de IDs em algumas modalidades. A figura 6
Petição 870190059169, de 26/06/2019, pág. 34/82
20/44 é um fluxograma ilustrando o processamento de um método de recuperação de ID de uma classe de objeto de tabela de IDs em algumas modalidades. Um método de recuperação de ID 600 é passado para uma referência a um objeto e retorna o identificador de objeto correspondendo a essa referência. No bloco 602, o método seleciona o próximo registro da tabela de IDs. No bloco de decisão 604, se todos os registros já tiverem sido selecionados, então o método retorna um valor nulo para indicar que um registro para a referência não está na tabela de IDs, ou o método continua no bloco 606. No bloco de decisão 606, se a referência no registro selecionado coincidir com a referência passada, então, o método retorna uma indicação do identificador de objeto desse registro, ou o método volta para o bloco 602 para selecionar o próximo registro da tabela de IDs.
[0046] A figura 7 é um fluxograma que ilustra o processamento de um método de recuperação de referência de um objeto de tabela de IDs em algumas modalidades. Um método de recuperação de referência 700 é passado para um identificador de objeto e retorna a referência correspondente a esse identificador de objeto. No bloco 702, o método recupera o próximo registro da tabela de IDs. No bloco de decisão 704, se todos os registros já tiverem sido selecionados, então, o método retorna um valor nulo para indicar que um registro para o identificador de objeto não está na tabela de IDs, ou o método continua no bloco 706. No bloco de decisão 706, se o identificador de objeto do registro selecionado coincidir com o identificador de objeto passado, então, o método retorna a referência do registro selecionado, ou o método volta para o bloco 702 para selecionar o próximo registro da tabela de IDs.
[0047] A figura 8 é um fluxograma que ilustra o processamento de um método de adição de registro de um objeto de tabelas de IDs que é passado para uma referência em algumas modalidades. Um método de adição de registro 800 é passado para uma referência a um objeto (isso
Petição 870190059169, de 26/06/2019, pág. 35/82
21/44 é, proxy ou objeto remoto) e adiciona um registro para a tabela de IDs para essa referência se a tabela de IDs já não contiver um registro para essa referência. No bloco 802, o método invoca o método de recuperação de ID desse objeto de tabela de IDs passando a referência para recuperar o identificador de objeto se a tabela de IDs contiver um registro correspondente à referência. No bloco de decisão 804, se o identificador de objeto retornado for nulo, então a tabela de IDs não contém um registro correspondente e o método continua no bloco 806, ou o método retorna o identificador de objeto. No bloco 806, o método configura o identificador de objeto para um novo campo de identificador de objeto do objeto de tabela de IDs e incrementa o próximo campo de identificador de objeto. Nos blocos 808 a810, o método inicializa o registro para a referência. No bloco 812, o método anexa o registro à tabela de IDs e, então, retorna uma indicação do identificador de objeto.
[0048] A figura 9 é um fluxograma que ilustra o processamento de um método de adição de registro de um objeto de tabela de IDs que é passado para um registro em algumas modalidades. Um método de adição de registro 900 é passado para um registro que deve ser adicionado à tabela e IDs se o registro ainda não estiver na tabela de IDs. No bloco 902, o método invoca um método de recuperação de ID desse objeto de tabela de IDs passando a referência do registro. No bloco de decisão 904, se o registro for nulo, então, a tabela e IDs não contém esse registro e o método continua no bloco 906, ou o método retorna. No bloco 906, o método adiciona o registro à tabela de IDs e, então, retorna.
[0049] Em algumas modalidades, o sistema OORPC permite que ambos o cliente e o servidor hospedem objetos remotos que são acessados remotamente pelo outro. O cliente e o servidor, dessa forma, podem ser considerados iguais no sentido de que ambos hospedam objetos remotos. Por exemplo, se um documento estiver sendo processado em um ambiente colaborativo por múltiplos clientes, cada cliente pode
Petição 870190059169, de 26/06/2019, pág. 36/82
22/44 registrar um objeto com o servidor para receber notificações de evento de mudanças para o documento. Em tal caso, um cliente pode invocar um método de registro do proxy de documento passando para um objeto de ouvinte de evento que é iniciado pelo cliente. O cliente pode manter uma tabela de IDs de proxy para mapear os identificadores de objeto para referências a proxies para objetos hospedados remotamente no servidor e uma tabela de IDs de objeto que mapeia os identificadores de objeto para referências para objetos hospedados localmente pelo cliente. De forma similar, o servidor pode manter uma tabela de IDs proxy para mapear os identificadores de objeto para referências a proxies para objetos hospedados remotamente por um cliente e uma tabela de IDs de objeto que mapeia os identificadores de objeto para referências a objetos hospedados localmente pelo servidor. O método de registro do proxy de documento pode adicionar um registro para o objeto de ouvinte de evento para a tabela de IDs de objeto e inclui o identificador de objeto do registro como um parâmetro de registro na mensagem de solicitação de invocação para o método de registro. Quando o servidor recebe a mensagem de solicitação de invocação, o componente de servidor pode buscar ambas a tabela de IDs de objeto e a tabela de IDs proxy para um registro com um identificador de objeto coincidente. Se tal registro for encontrado, o componente servidor substitui o identificador de objeto com a referência do registro como o parâmetro de registro para o método de registro. Se tal registro não for encontrado, o componente de servidor inicia um proxy de ouvinte de evento para o objeto de ouvinte de evento e adiciona um registro para a tabela de IDs proxy que mapeia o identificador de objeto para a referência para o proxy de objeto de ouvinte de evento. O componente de servidor, então, invoca o método de registro do objeto remoto de documento passando a referência para o proxy de ouvinte. Quando o componente servidor envia um evento para o aplicativo, o código de servidor invoca um método de evento do
Petição 870190059169, de 26/06/2019, pág. 37/82
23/44 proxy ouvinte, que envia para o cliente uma mensagem de solicitação de invocação. Quando o cliente recebe a mensagem de solicitação de invocação, um componente de cliente processa a mensagem de solicitação de invocação quase que da mesma forma em que o componente servidor do servidor manuseia as mensagens de solicitação de invocação. Dessa forma, ambos o cliente e o servidor podem invocar métodos de objetos remotos hospedados remotamente pelo outro.
[0050] Em algumas modalidades, um método de objeto de um objeto remoto pode ter um parâmetro de registro e/ou um parâmetro de saída que é passado pelo valor. Para passar um parâmetro de registro pelo valor, o método proxy do proxy correspondendo ao objeto remoto recupera o valor para o parâmetro de registro e adiciona o valor recuperado à mensagem de solicitação de invocação. Se o parâmetro de registro for um objeto remoto propriamente dito hospedado pelo servidor, então, o método proxy pode enviar uma mensagem de invocação de solicitação para o servidor para recuperar o valor. De forma similar, quando retornando um parâmetro de saída pelo valor, o método de objeto recupera o valor do parâmetro de saída e adiciona o valor recuperado à mensagem de resposta de invocação. Em algumas modalidades, um parâmetro de registro ou um parâmetro de saída pode ser uma estrutura de dados contendo múltiplos objetos. Para passar um parâmetro de registro que é tal estrutura de dados, o método proxy recupera o identificador de objeto de cada objeto na estrutura de dados e adiciona cada identificador de objeto à mensagem de solicitação de invocação. Por exemplo, se a estrutura de dados for um conjunto, o método proxy para cada elemento do conjunto seleciona o elemento, recupera o identificador de objeto do elemento selecionado, e adiciona o identificador de objeto recuperado à mensagem de solicitação de invocação. Para passar um parâmetro de saída que é um conjunto, o método de objeto processa os elementos do conjunto de uma forma similar. A estrutura
Petição 870190059169, de 26/06/2019, pág. 38/82
24/44 de dados de um parâmetro de entrada ou um parâmetro de saída pode conter um objeto hospedado no servidor e objeto hospedado no cliente. Quando processando tal parâmetro de registro, um método proxy adiciona o identificador de objeto de cada objeto à mensagem de solicitação de invocação. Depois de receber a mensagem de solicitação de invocação, o componente servidor recupera as referências aos objetos a partir de qualquer uma das tabelas de identificador de objeto ou tabela de identificador de proxy e invoca o método de objeto passando as referências recuperadas. O componente servidor pode iniciar um objeto ou proxy correspondente se ainda não iniciado.
[0051] A figura 10 é um diagrama em bloco que ilustra uma implementação do sistema OORPC que suporta a hospedagem não hierarquizada de objetos remotos em algumas modalidades. Um cliente 1010 inclui um objeto de tabela de IDs proxy 1011 e um objeto de tabela de IDs de objeto 1015. O objeto de tabela de IDs proxy 1011 inclui uma tabela de IDs que contém registros para proxies 1012, e o objeto da tabela de IDs de objeto 1015 inclui uma tabela de IDs que contém registros para objetos remotos 1016. Um servidor 1020 inclui um objeto de tabela de IDs de objeto 1021 e um objeto de tabela de IDs proxy 1025. O objeto de tabela de IDs de objeto 1021 inclui uma tabela de IDs que contém um registro para cada objeto 1022, e o objeto de tabela de IDs proxy 1025 inclui uma tabela de IDs que contém um registro para cada proxy 1026.
[0052] A figura 11 é um diagrama em bloco que ilustra estruturas de dados que suportam a sincronização de valores de propriedades pelo sistema OORPC em algumas modalidades. Um cliente 1110 inclui um objeto de tabela de IDs 1111 com uma tabela de IDs que inclui registros para proxies 1112 e 1113 para objetos remotos da classe de objeto remoto X e que inclui um registro para um proxy 1114 para um objeto remoto da classe de objeto remoto Y. Cada proxy inclui um elemento de
Petição 870190059169, de 26/06/2019, pág. 39/82
25/44 dados estáticos para fazer referência a um objeto de armazenamento para sua classe de objeto remota. Proxies 1112 e 1113 incluem uma referência a um objeto de armazenamento 1115 para a classe de objeto remoto X, e o proxy 1114 inclui uma referência a um objeto de armazenamento 1116 para a classe de objeto remoto Y. O objeto de armazenamento para uma classe de objeto remoto pode incluir um método para cada método de obtenção da classe de objeto remoto que armazena um valor para uma propriedade localmente em um proxy. Um servidor 1120 inclui um objeto de tabela de IDs 1121 com uma tabela de IDs que inclui registros para objetos remotos 1122 e 1123 da classe de objeto remoto X e que inclui um registro para um objeto 1124 da classe de objeto remoto Y. O servidor também inclui um objeto de tabela proprietária 1125 com uma tabela proprietária que inclui um registro para cada propriedade de cada objeto remoto. Cada registro inclui um identificador de objeto do objeto remoto, o último valor recuperado de cada propriedade do objeto remoto, e uma referência a uma tabela de obtenção para a classe de objeto remoto do objeto remoto. Em algumas modalidades, cada registro pode conter uma referência a uma estrutura de dados que armazena os últimos valores recuperados para o objeto remoto. Além disso, a tabela de IDs e a tabela proprietária podem ser combinadas em uma única tabela. Como ilustrado, o primeiro registro da tabela proprietária corresponde ao objeto remoto 1122 e inclui um apontador para uma tabela de obtenção 1126 para a classe de objeto remoto X. A tabela de obtenção 1126 inclui um registro para cada método de obtenção 1128 e 1129 da classe de objeto remoto X. Uma tabela de obtenção 1127 inclui um registro para cada método de obtenção 1130 e 1131 da classe de objeto remoto Y. Os registros apontam para códigos que invocam o método de obtenção correspondente de um objeto remoto para recuperar o valor de uma propriedade.
[0053] Antes de enviar uma mensagem de resposta de invocação,
Petição 870190059169, de 26/06/2019, pág. 40/82
26/44 o componente servidor pode selecionar cada registro da tabela e propriedade e invocar os métodos de obtenção do objeto remoto de cada registro para recuperar o valor de cada propriedade. Se um valor de uma propriedade retornado por um método de obtenção para um objeto for diferente do valor para essa propriedade que é armazenado na tabela proprietária, o componente servidor adiciona uma atualização de propriedade à mensagem de resposta de invocação. A atualização de propriedade inclui o identificador de objeto, um identificador de propriedade, e o novo valor. Quando o cliente recebe a mensagem e invocação de resposta, o componente de cliente processa cada atualização de propriedade. Para cada atualização de propriedade, o componente de cliente recupera a referência para o proxy correspondendo ao identificador e objeto da atualização de propriedade. O componente de cliente recupera a referência ao objeto de armazenamento a partir do proxy e invoca o método de armazenamento correspondente para essa propriedade do objeto de armazenamento passando uma indicação de referência. O método de armazenamento, então, armazena o valor da propriedade no proxy. Em algumas modalidades, cada atualização de propriedade pode conter os valores para todas as propriedades alteradas de um objeto remoto. Isso é, a mensagem de resposta de invocação contém apenas uma atualização de propriedade para um objeto remoto, em vez de uma atualização de propriedade separada para cada propriedade alterada do objeto remoto.
[0054] A figura 12 é um fluxograma que ilustra o processamento de um componente de valores de propriedade de obtenção de um componente servidor em algumas modalidades. Um componente de valores de propriedade de obtenção 1200 é invocado parar adicionar uma atualização de propriedade a uma mensagem de resposta de invocação para cada propriedade de cada objeto remoto cujo valor foi alterado. No bloco 1202, o componente seleciona o próximo registro da tabela de
Petição 870190059169, de 26/06/2019, pág. 41/82
27/44 propriedade. No bloco de decisão 1204, se todos os registros já tiverem sido selecionados, então, o componente é encerrado, ou o componente continua no bloco 1206. No bloco 1206, o componente invoca o método de recuperação de referência do objeto de tabela de IDs para recuperar a referência correspondente ao identificador de objeto do registro selecionado. Nos blocos 1208-1218, o componente retorna o processamento de cada propriedade do objeto remoto referido. No bloco 1208, o componente seleciona o próximo método de obtenção a partir da tabela de obtenção referida pelo registro selecionado. No bloco de decisão 1210, se todos os métodos de obtenção já tiverem sido selecionados, então, o componente volta para o bloco 1202 para selecionar o próximo registro na tabela de propriedade, ou o componente continua no bloco 1212. No bloco 1212, o componente invoca o método de obtenção selecionado do objeto remoto referido. No bloco de decisão 1214, se o valor atual da propriedade for igual ao valor no registro selecionado para a propriedade, então, o componente volta para o bloco 1208 para selecionar o próximo método de obtenção, ou o componente continua no bloco 1216. No bloco 1216, o componente configura o valor no registro para a propriedade para o valor atual. No bloco 1218, o componente adicional uma atualização de propriedade com o identificador de objeto, o identificador de propriedade, e o valor atual da propriedade para a mensagem de resposta de invocação e, então, volta para o bloco 1208 para selecionar o próximo método de obtenção.
[0055] A figura 13 é um fluxograma que ilustra o processamento de um componente de valores de propriedade armazenados de um componente de cliente em algumas modalidades. Um componente de valores de propriedade de armazenamento 1300 é invocado quando uma mensagem de resposta de invocação é recebida incluindo atualizações de propriedade e atualiza os valores localmente armazenados para as
Petição 870190059169, de 26/06/2019, pág. 42/82
28/44 propriedades. No bloco 1302, o componente seleciona a próxima atualização de propriedade da mensagem de resposta de invocação. No bloco e decisão 1304, se todas as atualizações de propriedade já tiverem sido selecionadas, então, o componente é encerrado, ou o componente continua no bloco 1306. No bloco 1306, o componente invoca o método de recuperação de referência do objeto de tabela de IDs, passando o identificador de objeto do registro selecionado e recebe uma referência ao proxy correspondente. No bloco 1308, o componente invoca um método de armazenamento do objeto de armazenamento referido por um elemento de dados estático do proxy passando o valor do registro. O componente, então, volta para o bloco 1302 para selecionar o novo registro de atualização de propriedade da mensagem de resposta de invocação. Um objeto de armazenamento pode possuir um método de armazenamento separado gerado para manusear cada propriedade. Alternativamente, o objeto de armazenamento pode ter um único método de armazenamento que acessa uma tabela com um registro para cada propriedade com informação tal como o tipo de objeto e nome de propriedade.
[0056] A figura 14 é um fluxograma que ilustra um gerador de código do sistema OORPC para gerar automaticamente um código para as classes proxy em algumas modalidades. Um componente de código proxy 1400 é passado para uma interface para cada classe de objetos hospedados por um servidor e gera as classes proxy (por exemplo, JavaScript). No bloco 1402, o componente seleciona a próxima interface. No bloco de decisão 1404, se todas as interfaces já tiverem sido selecionadas, então, o componente é encerrado, ou o componente continua no bloco 1406. No bloco 1406, o componente gera o código inicial para a classe proxy, que pode incluir um gabarito de classe que inclui o nome da classe, começando e terminando com símbolos da classe (por exem
Petição 870190059169, de 26/06/2019, pág. 43/82
29/44 pio, parênteses), e assim por diante. Nos blocos 1408-1412, o componente processa continuamente cada método da interface que não é um método de obtenção. No bloco 1408, o componente seleciona o próximo método. No bloco de decisão 1410, se todos os métodos já tiverem sido selecionados, então, o componente continua no bloco 14140, ou o componente continua no bloco 1412. No bloco 1412, o componente gera o código para o método selecionado da classe proxy e, então, retorna o bloco 1408 para selecionar o próximo método. No bloco 1414, o componente invoca um componente de propriedades proxy de processo do gerador de código passando uma indicação da interface selecionada para gerar o código para uma classe de armazenamento para a classe proxy. O componente, então, volta para o bloco 1402 para selecionar a próxima interface.
[0057] A figura 15 é um fluxograma que ilustra o processamento de um componente de propriedades de proxy de processo do gerador de código em algumas modalidades. Um componente de propriedades de proxy de processo 1500 é invocado para gerar uma classe de armazenamento para uma classe de proxy e adiciona um elemento de dados estáticos para a classe proxy para armazenar uma referência a um objeto de armazenamento para a classe proxy. No bloco 1502, o componente gera o código inicial para a classe de armazenamento. No bloco 1504, o componente adiciona à classe proxy um elemento de dados estático para referir a um objeto de armazenamento. No bloco 1506, o componente seleciona a próxima propriedade da interface. No bloco de decisão 1508, se todas as propriedades da interface já tiverem sido selecionadas, então, o componente é encerrado, ou o componente continua no bloco 1510. No bloco 1510, o componente gera código para um método de obtenção da classe proxy para a propriedade selecionada que envia uma mensagem de solicitação de invocação para um servidor. No bloco 1512, o componente gera um código para um método de
Petição 870190059169, de 26/06/2019, pág. 44/82
30/44 obtenção da classe proxy para a propriedade selecionada que recupera o valor local da propriedade. No bloco 1514, o componente gera o código para um método de armazenamento da classe de armazenamento para armazenar no proxy um valor da propriedade selecionada que é recebido em uma mensagem de invocação de reposta e então volta para o bloco 1506 para selecionar a próxima propriedade da interface. [0058] Em algumas modalidades, um gerador de código do sistema OORPC pode gerar automaticamente um componente servidor para um servidor para suportar a invocação de objetos remotos. O gerador de código pode receber as interfaces para os objetos remotos hospedados pelo servidor. O gerador de código gera o código para receber de um cliente uma mensagem de solicitação de invocação e para invocar o método de objeto remoto identificado do objeto remoto identificado passando o parâmetro de registro identificado. O gerador de código também gera um código para, depois que o método de objeto remoto invocado retorna, enviar para o cliente uma mensagem invocação de resposta com um identificador de objeto do objeto remoto, um identificador de método dos métodos de objeto remoto, e um parâmetro de saída retornado pelo método de objeto remoto invocado. O gerador de código também pode gerar automaticamente o código que suporta a sincronização dos valores de propriedade com base nas interfaces.
[0059] As figuras 16 e 17 são fluxogramas que ilustram a deferência das solicitações de invocação em algumas modalidades. A figura 16 é um fluxograma que ilustra o processamento de um componente de envio de solicitação de um componente de cliente em algumas modalidades. Um componente de envio de solicitação 1600 é invocado passando uma solicitação de invocação (por exemplo, através de um objeto de solicitação) para invocar um método de um objeto remoto. O componente envia para um servidor, uma mensagem de solicitação de invoca
Petição 870190059169, de 26/06/2019, pág. 45/82
31/44 ção com qualquer solicitação de invocação enfileirada quando a invocação do método não é deferível. No bloco 1602, o componente anexa a solicitação de invocação a uma fila de solicitação. No bloco de decisão 1604, se a invocação do método for deferível, então, o componente é encerrado, ou o componente continua no bloco 1606. No bloco 1606, o componente adiciona solicitações de invocação da fila de solicitações de invocação a uma mensagem de solicitação de invocação. No bloco 1608, o componente envia para o servidor a mensagem de solicitação de invocação. No bloco 1610, o componente esvazia a fila de solicitações e então é encerrado.
[0060] A figura 17 é um fluxograma que ilustra o processamento de um componente de recebimento de solicitação de um componente servidor em algumas modalidades. Um componente de recebimento de solicitação 1700 é invocado quando um componente servidor recebe uma mensagem de solicitação de invocação. No bloco 1702, o componente seleciona a próxima solicitação de invocação da mensagem de solicitação de invocação. No bloco de decisão 1704, se todas as solicitações de invocação já tiverem sido selecionadas, então, o componente é encerrado, ou o componente continua no bloco 1706. No bloco 1706, o componente processa a solicitação de invocação selecionada pela invocação do método do objeto remoto identificado pela solicitação de invocação. O componente, então, retorna para o bloco 1702 para selecionar a próxima solicitação de invocação.
[0061] Os parágrafos a seguir descrevem várias modalidades dos aspectos do sistema OORPC. Uma implementação do sistema OORPC pode empregar qualquer combinação das modalidades. O processamento descrito abaixo pode ser realizado por um dispositivo de computação com um processador que executa as instruções executáveis por computador armazenadas em um meio de armazenamento legível por computador que implementa o sistema OORPC.
Petição 870190059169, de 26/06/2019, pág. 46/82
32/44 [0062] Em algumas modalidades, um método realizado por um cliente é fornecido para invocar uma função de elemento de objeto remoto de um objeto remoto de uma classe de objetos remotos onde o objeto remoto é hospedado por um servidor. Sob o controle de um navegador, o método realiza o seguinte. O método recupera uma página da rede que inclui o aplicativo. Sob o controle do aplicativo, o método inicia um proxy de uma classe de proxies onde a classe de proxies inclui uma função de elemento de proxy com uma mesma assinatura que a função do elemento de objeto remoto. O método associa um identificador de objeto com o proxy onde o identificador de objeto serve para uso na identificação do objeto remoto para o servidor. O método invoca a função de elemento proxy do objeto proxy. Sob o controle da função do elemento proxy invocado, o método envia para o servidor uma mensagem de solicitação de invocação que inclui o identificador de objeto que é associado com o proxy e um identificador da função de elemento de objeto remoto. O aplicativo se baseia na funcionalidade fornecida pelo navegador sem precisar que o navegador acesse a funcionalidade adicional quando da execução do aplicativo. Em algumas modalidades, o método envia adicionalmente para o servidor uma mensagem de solicitação de invocação que solicita a invocação de uma função de elemento de um objeto remoto de criação para iniciar o objeto remoto. Em algumas modalidades, o método adicionalmente, sob o controle do aplicativo, recebe do servidor uma mensagem de resposta de invocação que indica que o objeto remoto foi iniciado. Em algumas modalidades, a mensagem de resposta de invocação inclui o identificador de objeto que é designado para o objeto remoto pelo servidor. Em algumas modalidades, a mensagem de solicitação de invocação inclui o identificador de objeto que é designado para o objeto remoto pelo cliente. Em algumas modalidades, a mensagem de solicitação de invocação inclui um parâmetro de registro que é passado para a função de elemento proxy. Em
Petição 870190059169, de 26/06/2019, pág. 47/82
33/44 algumas modalidades, a mensagem de resposta de invocação inclui um parâmetro de saída a ser retornado pela função de elemento proxy. Em algumas modalidades, o proxy é identificado por uma referência proxy e compreendendo, adicionalmente, a associação da referência proxy com o identificador de objeto. Em algumas modalidades, a associação inclui adicionar a uma tabela de identificadores de objeto, um registro que inclui a referência proxy e o identificador de objeto. Em algumas modalidades, a classe de objeto remoto e a classe proxy são implementadas em linguagens de programação diferentes. Em algumas modalidades, a classe proxy é gerada automaticamente com base em uma definição de interface para a classe de objeto remoto, a classe proxy incluindo uma implementação da função de elemento proxy. Em algumas modalidades, a invocação da função de elemento proxy é uma invocação assíncrona.
[0063] Em algumas modalidades, o método realizado por um sistema de computação é fornecido para gerar as classes proxy para um aplicativo sendo executado em um cliente para acessar os objetos remotos de acesso das classes de objeto remoto hospedadas por um servidor. O método acessa as interfaces das classes de objeto remoto onde cada interface inclui uma assinatura de uma função de elemento de objeto remoto da classe remota. Para cada classe de objeto remoto, o método gera uma classe proxy para a classe de objeto remoto. A classe proxy inclui uma função de elemento proxy para cada função de elemento de objeto remoto da classe de objeto remoto. Cada função de elemento proxy da classe proxy é gerado para, mediante invocação da função de elemento proxy, enviar para o servidor uma mensagem de solicitação de invocação que um identificador de objeto de um objeto remoto, um identificador de função de elemento da função de elemento de objeto remoto e um parâmetro de registro passado para a função do
Petição 870190059169, de 26/06/2019, pág. 48/82
34/44 elemento proxy. O método fornece código para, depois de uma mensagem de invocação de reposta ser recebida a partir do servidor, extrair um identificador de objeto de um objeto remoto, um identificador de função de elemento da função de elemento de objeto remoto, e um parâmetro de saída da mensagem e invocação de resposta e indicar que a invocação da função de elemento de objeto remoto foi encerrada. Em algumas modalidades, o método gera adicionalmente um componente servidor para o servidor onde o componente servidor é gerado, com base nas interfaces dos objetos remotos hospedados por, para receber do cliente uma mensagem de invocação e solicitação, invocar a função de elemento de objeto remoto identificada do objeto remoto identificado passando o parâmetro de registro identificado, e, depois que a função do elemento de objeto remoto invocada retorna, enviar para o cliente uma mensagem de resposta de invocação com um identificador de objeto do objeto remoto, um identificador de função de elemento da função de elemento de objeto remoto, e um parâmetro de saída retornado pela função de elemento de objeto remoto invocada. Em algumas modalidades, o código do aplicativo se baseia na funcionalidade fornecida pelo navegador sem precisar que o navegador acesse a funcionalidade adicional quando executando o aplicativo.
[0064] Em algumas modalidades, um cliente é fornecido configurado para permitir que um aplicativo executado por um mecanismo de execução de aplicativo de um programa invoque uma função de elemento de objeto remoto de um objeto remoto de uma classe de objeto remoto hospedada por um servidor. O cliente inclui um processador para executar as instruções executáveis por computador e um meio de armazenamento legível por computador armazenando instruções executáveis por computador que, quando executadas pelo processador, controlam o cliente para realizar o processamento a seguir. O processamento inicia um proxy de uma classe de proxy onde a classe de proxy
Petição 870190059169, de 26/06/2019, pág. 49/82
35/44 inclui uma função de elemento proxy com uma mesma assinatura que a função de elemento de objeto remoto. O processamento associa um identificador de objeto com o proxy onde o identificador de objeto serve para uso na identificação do objeto remoto para um servidor. O processamento invoca a função de elemento proxy do proxy. Sob controle da função de elemento proxy invocada, o processamento envia para o servidor uma mensagem de solicitação de invocação que inclui um identificador de objeto que identifica o objeto remoto e um identificador de função de elemento que identifica a função de elemento de objeto remoto. Em algumas modalidades, o aplicativo se baseia na funcionalidade fornecida pelo programa sem a necessidade de o programa acessar a funcionalidade adicional quando da execução do aplicativo e a classe proxy do aplicativo é automaticamente gerada a partir de uma interface da classe de objeto remoto para suportar acesso pelo cliente do objeto remoto. Em algumas modalidades, o processamento envia adicionalmente para o servidor uma mensagem de solicitação de invocação que solicita a inicialização de um caso da classe de objeto remoto e recebe do servidor uma mensagem de resposta de invocação que indica que o objeto remoto foi inicializado. Em algumas modalidades, o processamento inicializa um proxy de criação com uma função de elemento que quando invocada direciona a inicialização do proxy e o envio da mensagem de solicitação de invocação. Em algumas modalidades, a mensagem de resposta de invocação inclui o identificador de objeto. Em algumas modalidades, o programa é um navegador, e o aplicativo é descarregado e executado em resposta a um usuário que acessa uma página da rede através do navegador.
[0065] Em algumas modalidades, um cliente é fornecido configurado para permitir que um aplicativo executado por um programa com um mecanismo de execução de aplicativo invoque uma função de elemento de objeto remoto de um objeto remoto de uma classe de objeto
Petição 870190059169, de 26/06/2019, pág. 50/82
36/44 remoto hospedada por um servidor e para suportar a invocação pelo servidor de uma função de elemento de objeto local de um objeto local de uma classe de objeto local hospedada pelo cliente. O cliente inclui um processador que executa instruções executáveis por computador e um meio de armazenamento legível por computador armazenando instruções executáveis por computador que, quando executadas pelo processador, controlam o cliente para realizar o processamento a seguir. Sob o controle do aplicativo executado pelo programa, o processamento inicia um proxy de uma classe proxy, onde a classe proxy inclui uma função de elemento proxy com uma mesma assinatura que a função de elemento de objeto remoto. O processamento inicializa um objeto local da classe de objeto local. O processamento associa um identificador de objeto remoto com uma referência proxy para o proxy e um identificador de objeto local com uma referência de objeto local para o objeto local. Sob o controle da função de elemento de proxy invocada, o processamento envia para o servidor uma mensagem de solicitação de invocação que inclui o identificador de objeto remoto que identifica o objeto remoto e um identificador de função de elemento que identifica a função de elemento de objeto remoto. Depois de receber do servidor uma mensagem de solicitação de invocação que inclui o identificador de objeto local e identifica a função de elemento de objeto local, o processamento recupera a referência de objeto local associada com o identificador de objeto local incluído e invoca a função de elemento de objeto local do objeto local referido pela referência a objeto local recuperada.
[0066] Em algumas modalidades, um método realizado por um cliente para sincronizar um valor de propriedade é fornecido. O método inicializa um proxy de uma classe proxy correspondendo a um objeto remoto de uma classe de objetos remotos. O objeto remoto é inicializado em um servidor. A classe de proxies especifica uma propriedade com
Petição 870190059169, de 26/06/2019, pág. 51/82
37/44 um “getter” de proxy. O “getter” de proxy para o proxy serve para recuperar um valor para a propriedade que é armazenada no proxy. O método envia ao servidor uma mensagem de solicitação de invocação para invocar uma função de elemento de objeto remoto de um objeto remoto. O método recebe do servidor uma mensagem de resposta de invocação para a mensagem de solicitação de invocação. Quando a mensagem de resposta de invocação inclui uma atualização de propriedade, o método extrai da mensagem de resposta de invocação o valor da propriedade a partir da atualização de propriedade e armazena o valor extraído no proxy. Quando o “getter” de proxy para a propriedade é invocado, o método permite que o valor de propriedade seja recuperado a partir do proxy sem precisar enviar uma mensagem de solicitação de invocação para o servidor. Em algumas modalidades, o proxy é parte de um aplicativo que é executado por um navegador. Em algumas modalidades, o envio para o servidor e o recebimento do servidor são através de mensagens HTTP. Em algumas modalidades, a classe proxy inclui uma referência estática para um objeto de armazenamento de uma classe de armazenamento com uma função de armazenamento de elemento para a propriedade e onde a extração e o armazenamento são realizados pela função de armazenamento de elemento. Em algumas modalidades, a classe de armazenamento inclui uma função de armazenamento de elemento para cada propriedade da classe proxy. Em algumas modalidades, a classe de armazenamento inclui uma tabela de obtenção que mapeia um identificador da propriedade para um identificador da função de armazenamento de elemento da classe de armazenamento para essa propriedade para armazenar o valor extraído e a um identificador de um tipo de propriedade. Em algumas modalidades, a função do elemento de armazenamento é passada uma referência para um proxy e realiza a extração do valor da propriedade com base no tipo de propriedade e armazenando o valor no proxy de referência. Em algumas
Petição 870190059169, de 26/06/2019, pág. 52/82
38/44 modalidades, a função do elemento de armazenamento é passada para o identificador do proxy. Em algumas modalidades, a mensagem de invocação de resposta inclui valores para múltiplas propriedades do proxy. Em algumas modalidades, a mensagem de resposta de invocação inclui valores para múltiplas propriedades de proxies diferentes. Em algumas modalidades, a mensagem de resposta de invocação inclui valores para apenas essas propriedades cujo valor mudou desde uma mensagem invocação de resposta anterior ter sido enviada pelo servidor.
[0067] Em algumas modalidades, um método realizado por um servidor para sincronizar um valor de propriedade em um cliente é fornecido. O método recebe do cliente uma solicitação para invocar uma função de elemento de objeto remoto de um objeto remoto hospedado pelo servidor. O método invoca a função de elemento de objeto remoto do objeto remoto. Depois de invocar a função de elemento de objeto remoto do objeto remoto, o método recupera um valor para uma propriedade do objeto remoto. Quando o valor recuperado não é igual a um último valor recuperado para a propriedade, o método adiciona a uma mensagem de resposta de invocação um identificador de objeto do objeto remoto, um identificador de propriedade da propriedade, e o valor recuperado. O método envia para o cliente a mensagem de resposta de invocação para indicar que a função de elemento de objeto remoto foi invocada e que o valor para a propriedade mudou de modo que uma função de elemento de obtenção para a propriedade de um proxy do cliente para o objeto remoto possa recuperar o valor da propriedade localmente com acesso ao servidor. Em algumas modalidades, a recuperação e adição são realizadas para múltiplas propriedades. Em algumas modalidades, as múltiplas propriedades incluem propriedades de diferentes objetos remotos. Em algumas modalidades, a recuperação e adição são realizadas para cada mensagem de resposta de invocação que deve ser
Petição 870190059169, de 26/06/2019, pág. 53/82
39/44 enviada para indicar que uma função de elemento de objeto remoto de um objeto remoto foi invocada.
[0068] Em algumas modalidades, um método que é realizado por um sistema de computação é fornecido para suportar a sincronização de valores de propriedades de objetos remotos das classes de objetos remotos com valores de propriedades de proxies de classes proxy. O método registra uma descrição de uma interface para cada classe de objeto remoto. Para cada interface para a classe de objeto remoto, o método gera um código para a classe proxy. O método gera o código para cada função de elemento proxy da classe proxy para enviar uma mensagem de solicitação de invocação para invocar a função de elemento de objeto remoto correspondente em um objeto remoto correspondente. O método gera o código para cada função de elemento de obtenção proxy de uma propriedade da classe proxy para recuperar e retornar um valor da propriedade que e armazenado localmente em um proxy da classe proxy sem acessar o objeto remoto correspondente. O método que gera o código para armazenar os valores das propriedades da classe proxy recebidos do servidor de modo que cada função de elemento de obtenção proxy de uma propriedade de classes proxy pode recuperar um valor localmente armazenado para a propriedade. Em algumas modalidades, o método adicionalmente, para cada classe proxy, adicional à classe proxy uma referência estática para o código para o armazenamento de valores das propriedades. Em algumas modalidades, o código para armazenar os valores das propriedades é implementado como parte de uma classe de armazenamento. Em algumas modalidades, a classe de armazenamento inclui uma tabela que mapeia, para cada propriedade da classe proxy, um identificador da propriedade para uma função de elemento de armazenamento para armazenar um valor para essa propriedade de modo que o valor possa ser recuperado
Petição 870190059169, de 26/06/2019, pág. 54/82
40/44 pela função do elemento de obtenção proxy dessa propriedade. Em algumas modalidades, o identificador da propriedade é adicionalmente mapeado para uma indicação de um tipo de propriedade para uso na extração do valor da propriedade de uma mensagem de resposta de invocação recebida do servidor.
[0069] Em algumas modalidades, um método realizado por um cliente para enviar as solicitações de invocação de um aplicativo para objetos remotos de um servidor é fornecido. O método recebe solicitações de invocação. Cada solicitação de invocação é de um proxy de uma classe proxy do aplicativo correspondendo a um objeto remoto de uma classe de objeto remoto. Para cada solicitação de invocação recebida, quando a solicitação de invocação é deferível, o método armazena a solicitação de invocação. Quando a solicitação de invocação não é deferível, o método envia para o servidor uma mensagem de solicitação de invocação que inclui cada solicitação de invocação armazenada não enviada previamente e a solicitação de invocação recebida. O método recebe do servidor, mensagens de invocação de resposta. Cada mensagem de resposta de invocação ocorre em resposta a uma mensagem de solicitação de invocação que inclui uma ou mais solicitações de invocação. Pelo menos uma mensagem de resposta de invocação inclui múltiplas respostas de invocação. Para cada resposta de invocação de uma mensagem de resposta de invocação recebida, quando a resposta de invocação inclui um parâmetro de saída, o método extrai o parâmetro de saída da resposta de invocação. O método fornece para o aplicativo uma indicação de que a resposta de invocação foi recebida e qualquer parâmetro de saída extraído. Em algumas modalidades, a mensagem de solicitação de invocação indica uma ordem na qual as solicitações de invocação são recebidas. Em algumas modalidades, as respostas de invocação de uma mensagem de resposta de invocação são processa
Petição 870190059169, de 26/06/2019, pág. 55/82
41/44 das em uma ordem na qual as solicitações de invocação correspondentes foram recebidas. Em algumas modalidades, as solicitações de invocação são solicitações de invocação assíncronas. Em algumas modalidades, quando uma solicitação de invocação foi armazenada para mais de uma quantidade de tempo designada, o método envia uma mensagem de solicitação de invocação que inclui a solicitação de invocação. Em algumas modalidades, em resposta ao recebimento a partir do aplicativo de uma solicitação para enviar uma solicitação de invocação não enviada, o método envia adicionalmente uma mensagem de solicitação de invocação que inclui a solicitação de invocação. Em algumas modalidades, as solicitações de invocação são recebidas para objetos remotos hospedados por diferentes servidores e onde uma mensagem de solicitação de invocação, que é enviada para um servidor, inclui apenas solicitações de invocação para objetos remotos hospedados por esse servidor. Em algumas modalidades, o aplicativo é executado sob o controle de um navegador.
[0070] Em algumas modalidades, um cliente é fornecido para enviar solicitações de invocação de um aplicativo para invocar as funções de elemento de objetos remotos hospedados por um servidor. O cliente inclui um processador que executa as instruções executáveis por computador e um meio de armazenamento legível por computador armazenando instruções executáveis por computador que, quando executadas pelo processador, controlam o cliente para realizar o processamento a seguir. O processamento enfileira as solicitações de invocação. Cada solicitação de invocação é de um Proxy de uma classe proxy do aplicativo correspondendo a um objeto remoto de uma classe de objeto remoto do aplicativo. A solicitação de invocação serve para invocar uma função de elemento de objeto remoto do objeto remoto. Quando um critério de solicitação de invocação enviada é satisfeito, o processamento envia para o servidor uma mensagem de solicitação de invocação que
Petição 870190059169, de 26/06/2019, pág. 56/82
42/44 inclui cada solicitação de invocação enfileirada. O processamento indica que cada solicitação de invocação enfileirada não está mais enfileirada. O processamento recebe do servidor uma mensagem de resposta de invocação que ocorre em resposta à mensagem de solicitação de invocação. Para cada resposta de invocação da mensagem de resposta de invocação recebida, o processamento fornece para o aplicativo uma indicação de que a resposta de invocação foi recebida. Em algumas modalidades, o critério de solicitação de invocação enviado é satisfeito quando uma solicitação de invocação é recebida que não deve ser enfileirada. Em algumas modalidades, o critério de solicitação de invocação de envio é satisfeito quando uma solicitação de invocação foi armazenada para mais de uma quantidade de tempo designada. Em algumas modalidades, o critério de solicitação de invocação de envio é satisfeito quando uma solicitação é recebida do aplicativo para enviar as solicitações de invocação enfileiradas. Em algumas modalidades, a mensagem de solicitação de invocação indica uma ordem na qual as solicitações de invocação foram geradas pelo aplicativo. Em algumas modalidades, as respostas à invocação da mensagem de resposta de invocação são processadas em uma ordem na qual as solicitações de invocação correspondentes foram geradas. Em algumas modalidades, as solicitações de invocação são solicitações de invocação assíncronas. Em algumas modalidades, as solicitações de invocação são recebidas para objetos remotos hospedados por diferentes servidores e onde uma mensagem de solicitação de invocação que é enviada para um servidor, inclui apenas as solicitações de invocação para objetos remotos hospedados por esse servidor. Em algumas modalidades, o aplicativo é executado sob o controle de um programa com um mecanismo de execução de aplicativo.
[0071] Em algumas modalidades, um método realizado por um ser
Petição 870190059169, de 26/06/2019, pág. 57/82
43/44 vidor para o processamento de solicitações de invocação de um aplicativo. O método recebe de um cliente uma mensagem de solicitação de invocação que inclui as solicitações de invocação. Cada solicitação de invocação é de um proxy de uma classe proxy do aplicativo correspondendo a um objeto remoto de uma classe de objeto remoto do aplicativo. A solicitação de invocação serve para invocar uma função de elemento de objeto remoto do objeto remoto. Para cada solicitação de invocação da mensagem de solicitação de invocação, os processos que a invocação solicita. O processamento inclui extrair da solicitação de invocação, um identificador de objeto de um objeto remoto, um identificador de função de elemento de uma função de elemento de objeto remoto, e um parâmetro de registro. O processamento invoca a função de elemento de objeto remoto identificada do objeto remoto identificado passando o parâmetro de registro. Depois do retorno da função de elemento de objeto remoto invocada, o processamento armazena uma resposta de invocação para a solicitação de invocação que inclui um parâmetro de saída retornado pela função de elemento de objeto remoto invocada. Depois do processamento das solicitações de invocação, o método envia para o cliente uma mensagem de resposta de invocação que inclui as respostas à invocação. Em algumas modalidades, as solicitações de invocação são processadas em uma ordem especificada pela mensagem de solicitação de invocação. Em algumas modalidades, as solicitações de invocação correspondendo às respostas à invocação são identificáveis a partir das respostas à invocação. Em algumas modalidades, [0072] Apesar de a presente matéria ter sido descrita em linguagem específica para características e/ou atos estruturais, deve ser compreendido que a presente matéria definida nas reivindicações em anexo não está necessariamente limitada às características específicas ou atos descritos acima. Em vez disso, as características e os atos especí
Petição 870190059169, de 26/06/2019, pág. 58/82
44/44 ficos descritos acima são descritos como formas ilustrativas de implementação das reivindicações. Por exemplo, apesar de o sistema OORPC ser descrito basicamente no contexto de um navegador de rede que executa um aplicativo, OORPC pode ser utilizada em outros contextos. Por exemplo, um sistema de gerenciamento de relacionamento com cliente (CRM) pode permitir que os aplicativos sejam desenvolvidos para personalizar o sistema CRM. Em tal caso, um componente de lado de cliente do sistema CRM executa os aplicativos que acessam os objetos hospedados por um servidor que possui um componente de lado de servidor do sistema CRM. Os navegadores de rede, sistema CRM, e outros programas que executam tais aplicativos podem ser referidos como um programa possuindo um mecanismo de execução de aplicativo. De acordo, a invenção não está limitada exceto pelas reivindicações em anexo.

Claims (15)

1. Sistema de computação de cliente, caracterizado pelo fato de compreender:
um meio de armazenamento legível por computador armazenando instruções executáveis por computador; e um processador configurado para executar instruções executáveis por computador, que quando executadas pelo processador, controlam o sistema de computação do cliente para:
enfileirar uma pluralidade de solicitações de invocação, cada solicitação de invocação sendo recebida de um objeto proxy de uma classe proxy de um aplicativo do sistema de computação de cliente que corresponde a um objeto remoto de uma classe de objeto remoto de um sistema de computação de servidor; e para cada solicitação de invocação recebida, armazenar a solicitação de invocação quando a solicitação de invocação é deferível;
enviar, quando a solicitação de invocação não é deferível, uma mensagem de solicitação de invocação para o sistema de computação de servidor que inclui cada solicitação de invocação armazenada não enviada previamente e a solicitação de invocação que não é deferível;
receber do sistema de computação de servidor uma pluralidade de mensagens de resposta de invocação, cada mensagem de resposta de invocação ocorrendo em resposta a uma mensagem de solicitação de invocação enviada previamente a partir do dispositivo de computação de cliente, pelo menos uma das mensagens de resposta de invocação incluindo uma pluralidade de respostas à invocação; e para cada resposta de invocação da pluralidade de respostas à invocação;
extrair, quando a resposta de invocação inclui um parâmetro
Petição 870190059169, de 26/06/2019, pág. 60/82
2/5 de saída, o parâmetro de saída da resposta de invocação; e fornecer para o aplicativo uma indicação de que a resposta de invocação foi recebida e qualquer parâmetro de saída extraído.
2. Sistema de computação de cliente, de acordo com a reivindicação 1, caracterizado pelo fato de a mensagem de solicitação de invocação indicar uma ordem na qual as solicitações de invocação foram recebidas.
3. Sistema de computação de cliente, de acordo com a reivindicação 1, caracterizado pelo fato de a pluralidade de respostas à invocação serem processadas em uma ordem na qual as solicitações de invocação correspondentes foram recebidas.
4. Sistema de computação de cliente, de acordo com a reivindicação 1, caracterizado pelo fato de as instruções executáveis por computador, quando executadas pelo processador, controlarem o sistema de computação de cliente para enviar uma mensagem de solicitação de invocação que inclui a solicitação de invocação armazenada quando uma solicitação de invocação armazenada foi armazenada por um tempo maior do que uma quantidade de tempo designada.
5. Sistema de computação de cliente, de acordo com a reivindicação 1, caracterizado pelo fato de as instruções executáveis por computador, quando executadas pelo processador, controlarem o sistema de computação de cliente para enviar uma mensagem de solicitação de invocação que inclui a solicitação de invocação em resposta ao recebimento, a partir do aplicativo, de uma solicitação para enviar uma solicitação de invocação não enviada.
6. Sistema de computação de cliente, de acordo com a reivindicação 1, caracterizado pelo fato de a pluralidade de solicitações de invocação serem recebidas para os objetos remotos hospedados por diferentes sistemas de computação servidores e quaisquer mensagens de solicitação de invocação enviadas para um sistema de computação
Petição 870190059169, de 26/06/2019, pág. 61/82
3/5 de servidor particular incluírem apenas as solicitações de invocação para objetos remotos hospedados por esse sistema de computação servidor.
7. Sistema de computação de cliente, de acordo com a reivindicação 1, caracterizado pelo fato de o aplicativo ser executado sob controle de um navegador.
8. Método, caracterizado pelo fato de compreender:
receber, com um sistema de computação de cliente, uma pluralidade de solicitações de invocação, cada solicitação de invocação sendo recebida de um objeto proxy de uma classe proxy de um aplicativo do sistema de computação de cliente que corresponde a um objeto remoto de uma classe de objeto remoto de um sistema de computação servidor;
para cada solicitação de invocação recebida;
quando a solicitação de invocação é deferível, armazenar, com o sistema de computação de cliente, a solicitação de invocação; e quando a solicitação de invocação não é deferível, enviar, com o sistema de computação de cliente, para o sistema de computação servidor, uma mensagem de solicitação de invocação que inclui cada solicitação de invocação armazenada não enviada previamente e a solicitação de invocação que não é deferível;
receber, com o sistema de computação de cliente, do sistema de computação de servidor, uma pluralidade de mensagens de resposta de invocação, cada mensagem de resposta de invocação ocorrendo em resposta a uma mensagem de solicitação de invocação enviada previamente a partir do dispositivo de computação de cliente, pelo menos uma das mensagens de resposta de invocação incluindo uma pluralidade de respostas à invocação; e para cada resposta de invocação dentre a pluralidade de respostas à invocação,
Petição 870190059169, de 26/06/2019, pág. 62/82
4/5 quando a resposta de invocação inclui um parâmetro de saída;
extrair, com o dispositivo de computação de cliente, o parâmetro de saída a partir da resposta de invocação; e fornecer, com o dispositivo de computação de cliente, para o aplicativo, uma indicação de que a resposta de invocação foi recebida e qualquer parâmetro de saída extraído.
9. Método, de acordo com a reivindicação 8, caracterizado pelo fato de a mensagem de solicitação de invocação indicar uma ordem na qual as solicitações de invocação foram recebidas.
10. Método, de acordo com a reivindicação 8, caracterizado pelo fato de a pluralidade de respostas à invocação ser processada em uma ordem na qual as solicitações de invocação correspondentes foram recebidas.
11. Método, de acordo com a reivindicação 8, caracterizado pelo fato de compreender adicionalmente:
quando uma solicitação de invocação armazenada foi armazenada por mais de uma quantidade de tempo designada, enviar, com o dispositivo de computação de cliente, uma mensagem de solicitação de invocação que inclui a solicitação de invocação armazenada.
12. Método, de acordo com a reivindicação 8, caracterizado pelo fato de compreender adicionalmente, em resposta ao recebimento a partir do aplicativo, uma solicitação para enviar uma solicitação de invocação não enviada, enviar uma mensagem de solicitação de invocação que inclui a solicitação de invocação.
13. Método, de acordo com a reivindicação 8, caracterizado pelo fato de a pluralidade de solicitações de invocação, que são recebidas para objetos remotos hospedados por diferentes sistemas de computação servidor, e quaisquer mensagens de solicitação de invocação enviadas para um sistema de computação servidor particular, incluir
Petição 870190059169, de 26/06/2019, pág. 63/82
5/5 apenas solicitações de invocação para objetos remotos hospedados por esse sistema de computação servidor.
14. Método, de acordo com a reivindicação 8, caracterizado pelo fato de o aplicativo ser executado sob o controle de um navegador de rede.
15. Método, de acordo com a reivindicação 8, caracterizado pelo fato de a pluralidade de solicitações de invocação ser solicitações de invocação assíncronas.
BR112019013265A 2017-01-30 2017-12-22 deferimento de solicitações de invocação por objetos remotos BR112019013265A2 (pt)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/419,964 US10455040B2 (en) 2017-01-30 2017-01-30 Deferring invocation requests for remote objects
PCT/US2017/068063 WO2018140183A1 (en) 2017-01-30 2017-12-22 Deferring invocation requests for remote objects

Publications (1)

Publication Number Publication Date
BR112019013265A2 true BR112019013265A2 (pt) 2019-12-17

Family

ID=60972518

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112019013265A BR112019013265A2 (pt) 2017-01-30 2017-12-22 deferimento de solicitações de invocação por objetos remotos

Country Status (17)

Country Link
US (1) US10455040B2 (pt)
EP (1) EP3574403B1 (pt)
JP (1) JP7071379B2 (pt)
KR (1) KR102473967B1 (pt)
CN (1) CN110268388B (pt)
AU (1) AU2017395742B2 (pt)
BR (1) BR112019013265A2 (pt)
CA (1) CA3049217A1 (pt)
CL (1) CL2019002046A1 (pt)
CO (1) CO2019007877A2 (pt)
IL (1) IL268034B (pt)
MX (1) MX2019008801A (pt)
PH (1) PH12019550117A1 (pt)
RU (1) RU2759330C2 (pt)
SG (1) SG11201905451QA (pt)
WO (1) WO2018140183A1 (pt)
ZA (1) ZA201903700B (pt)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10223181B2 (en) * 2017-01-30 2019-03-05 Microsoft Technology Licensing, Llc Object-oriented remote procedure calls for browser applications
CN114095487B (zh) * 2020-07-30 2024-03-19 中移(苏州)软件技术有限公司 一种远程任务执行方法、装置及存储介质
US11936763B2 (en) 2020-10-28 2024-03-19 International Business Machines Corporation Handling deferrable network requests
CN116074337B (zh) * 2023-04-06 2023-06-13 徐工汉云技术股份有限公司 基于api网关的远程过程调用处理方法和装置

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU639802B2 (en) * 1990-08-14 1993-08-05 Oracle International Corporation Methods and apparatus for providing dynamic invocation of applications in a distributed heterogeneous environment
US6058389A (en) * 1997-10-31 2000-05-02 Oracle Corporation Apparatus and method for message queuing in a database system
US6920636B1 (en) * 1999-12-15 2005-07-19 Microsoft Corporation Queued component interface passing for results outflow from queued method invocations
WO2001067244A2 (en) 2000-03-03 2001-09-13 Oracle Corporation Tier-independent data access framework
US6813641B2 (en) * 2001-07-05 2004-11-02 Sun Microsystems, Inc. Teamware server working over HTTP/HTTPS connections
US7051341B2 (en) * 2001-12-14 2006-05-23 International Business Machines Corporation Method, system, and program for implementing a remote method call
US20040215665A1 (en) * 2002-01-09 2004-10-28 Edgar David A. System, method, and computer program product for providing accelerated and secure wireless data transmission over the internet
US7209929B2 (en) * 2003-04-17 2007-04-24 Salesforce.Com, Inc. Java object cache server for databases
US7831956B2 (en) * 2005-09-13 2010-11-09 Microsoft Corporation Using attributes to identify and filter pluggable functionality
WO2009073368A1 (en) * 2007-11-29 2009-06-11 Motorola, Inc. Method and apparatus to facilitate asynchronously invoking a browser application in a client platform
US9588827B2 (en) 2008-02-21 2017-03-07 International Business Machines Corporation Single program call message retrieval
US8683498B2 (en) 2009-12-16 2014-03-25 Ebay Inc. Systems and methods for facilitating call request aggregation over a network
US8505034B2 (en) 2009-12-17 2013-08-06 Amazon Technologies, Inc. Automated service interface optimization
US8655955B2 (en) * 2011-08-18 2014-02-18 International Business Machines Corporation Stream processing using a client-server architecture
KR101909982B1 (ko) * 2011-12-22 2018-10-23 삼성전자 주식회사 VoIP 게이트웨이 장치, 이의 제어방법 및 이를 포함하는 시스템
CN102497453A (zh) * 2011-12-28 2012-06-13 用友软件股份有限公司 远端程序的调用装置和调用方法
US9262183B2 (en) 2012-04-23 2016-02-16 Microsoft Technology Licensing, Llc Self-service composed web APIs
US8516508B1 (en) 2012-08-02 2013-08-20 Cisco Technology, Inc. Automated application programming interface (API) generation
US20150081774A1 (en) * 2013-09-13 2015-03-19 John Wason System and method for implementing augmented object members for remote procedure call
US9401953B2 (en) * 2013-10-09 2016-07-26 At&T Intellectual Property I, L.P. Intelligent high-volume cloud application programming interface request caching
US9686205B2 (en) * 2013-11-29 2017-06-20 Calgary Scientific Inc. Method for providing a connection of a client to an unmanaged service in a client-server remote access system
US9942265B2 (en) 2014-01-06 2018-04-10 International Business Machines Corporation Preventing application-level denial-of-service in a multi-tenant system
US9614939B2 (en) 2014-05-08 2017-04-04 Google Inc. Network timeouts using intentionally delayed transmissions
US9760415B2 (en) * 2014-05-16 2017-09-12 Microsoft Technology Licensing, Llc Code service for language-independent dispatch
US9729506B2 (en) 2014-08-22 2017-08-08 Shape Security, Inc. Application programming interface wall
US10223181B2 (en) * 2017-01-30 2019-03-05 Microsoft Technology Licensing, Llc Object-oriented remote procedure calls for browser applications

Also Published As

Publication number Publication date
ZA201903700B (en) 2020-10-28
AU2017395742B2 (en) 2022-03-17
WO2018140183A1 (en) 2018-08-02
SG11201905451QA (en) 2019-08-27
RU2019126643A (ru) 2021-03-01
KR102473967B1 (ko) 2022-12-02
EP3574403B1 (en) 2023-06-14
IL268034A (en) 2019-09-26
IL268034B (en) 2022-06-01
CL2019002046A1 (es) 2019-12-13
US20180219961A1 (en) 2018-08-02
RU2759330C2 (ru) 2021-11-11
AU2017395742A1 (en) 2019-07-04
JP7071379B2 (ja) 2022-05-18
MX2019008801A (es) 2019-12-02
CN110268388B (zh) 2023-06-20
EP3574403A1 (en) 2019-12-04
RU2019126643A3 (pt) 2021-04-12
JP2020506481A (ja) 2020-02-27
CN110268388A (zh) 2019-09-20
US10455040B2 (en) 2019-10-22
PH12019550117A1 (en) 2019-12-02
CA3049217A1 (en) 2018-08-02
CO2019007877A2 (es) 2019-07-31
KR20190108581A (ko) 2019-09-24

Similar Documents

Publication Publication Date Title
US11010219B2 (en) Object-oriented remote procedure calls for browser applications
US8924592B2 (en) Synchronization of server-side cookies with client-side cookies
BR112019013265A2 (pt) deferimento de solicitações de invocação por objetos remotos
US10778795B2 (en) Synchronization of property values between a client and a server
US9218405B2 (en) Batch processing and data synchronization in cloud-based systems
US9633099B2 (en) Core data synchronization systems and methods
US9589153B2 (en) Securing integrity and consistency of a cloud storage service with efficient client operations
BRPI0612281A2 (pt) fluxos de trabalho centrados em dados
US20190334778A1 (en) Generic access to heterogeneous virtualized entities
JP6016808B2 (ja) Webアクセスを実装するための方法およびサーバシステム
US9639691B2 (en) Dynamic database and API-accessible credentials data store
KR20140038991A (ko) 가장 최근에 사용된 문서 목록들의 자동 동기화
US20090293066A1 (en) Systems and methods for remoting calls issued to embedded or linked object interfaces
EP3161625A1 (en) Converting desktop applications into cloud services
US8352446B2 (en) Method for objectclass versioning
NZ754547A (en) Deferring invocation requests for remote objects
Au et al. Geospatial Data with Azure SQL Database
Kozlovics The webAppOS Architecture
Siebörger et al. LTSP DNS round robin clusters: green technology access enablers for telecommunication services in marginalised communities
Van Roy et al. Designing an elastic and scalable social network application
Rischpater et al. Geospatial with Azure SQL Database

Legal Events

Date Code Title Description
B350 Update of information on the portal [chapter 15.35 patent gazette]
B06W Patent application suspended after preliminary examination (for patents with searches from other patent authorities) chapter 6.23 patent gazette]