Pergunta

Percebi hoje que segui cegamente esse requisito durante anos, sem nunca perguntar por quê.Hoje, me deparei com um NotSerializableException com um objeto de modelo que criei do zero e percebi que já basta.

Disseram-me que isso se devia à replicação de sessão entre servidores com balanceamento de carga, mas sei que vi outros objetos no escopo da sessão que não implementam Serializable.Será esta a verdadeira razão?

Foi útil?

Solução

É a verdadeira razão. Se isso realmente importa na prática, depende inteiramente se o servidor da Web ou o servidor de aplicativos de fato serializará o objeto (ou validará que ele é serializável, mas realisticamente, a única maneira de fazer isso é realmente serializar -o).

A maioria dos servidores de aplicativos tem a opção (pelo menos) de não ser rigoroso. Se você não usa servidores de carga balanceada que realmente compartilham estado, poderá ter visto isso sem problemas.

Outras dicas

Porque, para serem transferidos através de um fio, eles precisam ser serializados em um formato que possa ser colocado no fio.

Como binário ou xml, Json ou semelhante

Tem mais informações aqui... Qualquer objeto de domínio não deve ser serializável?

Eu acho que o conceito é semelhante a ser perguntado, por que os alimentos sólidos devem ser mastigados antes de serem engolidos para digestão. Mas é claro que a diferença é que o bem digerido não pode ser desaperiado.

Lembro -me de usar o Sun RPC (hoje em dia chamado Onc RPC), que executa a codificação XDR porque as plataformas/sistemas de computador representam seus dados em seus respectivos formulários. Por exemplo, Big Endian vs Small Endian.

Mas a JVM, independentemente da máquina, é grande endiana, então Endianness não deve ser uma razão.

A estrutura de dados na memória do computador possui ponteiros e todos os elementos de um objeto podem não ficar em um bloco de memória contíguo. No entanto, quando você passa um objeto por E/S para outro sistema, não pode passar na distribuição da memória desse objeto.

Um objeto precisa ser serializado antes de ser armazenado em um banco de dados, porque você não deseja e não pode replicar o arranjo de mudança dinamicamente da memória do sistema.

Nossa camada de representação de dados nas redes é baseada em fluxo de bits. Portanto, quando você deseja transmitir dados de um sistema para outro, é necessário converter os dados dimensionais representados na memória para um que pode ser transmitido pelo byte de redes por byte. Na verdade, pouco a pouco, e que geralmente passa por uma criptografia de compressão e segurança. Presume-se que as rotinas de compressão e criptografia são oo-estrutura e fluxos de bits. Os interruptores de rede são oo-estrutura-cega. A transmissão de rede nem vê bits. Os bits são codificados em um sinal de transmissão que geralmente é sinusóides analógicos e depois modulado. Esses processos não funcionam em esquemas multidimensionais/hierárquicos de dados oo-estruturados.

Eu acho que você pode executar a ofuscação e a criptografia no nível do objeto, mas ainda precisa permitir que o sistema os converta para fluxos de bits, convertendo -os para carregar os fluxos primeiro.

Marshalling é quando o pastor tem um rebanho de ovelhas e os arrume em uma ponte de um único esquema sobre águas problemáticas. Portanto, um Marshaller deve preencher nossos objetos em esquemas em série com referências escritas, de modo que, quando o rebanho de informações emergem da outra extremidade da ponte, somos capazes de reavaliá-los de volta em seus esquemas hierárquicos pelo conjugado Demarshaller . No nosso caso, nossas ovelhas não são organizadas por apenas uma ponte, mas por enrolamentos estreitos e precários e deslizamentos de terra, onde o equipamento de transmissão de rede em cada turno armazena uma cópia das ovelhas organizadas para garantir que elas sejam capazes de reenviar a cópia caso qualquer uma das Ovelha caiu por um barranco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top