J'essaie de configurer un système Akka où erreurs de désérialisation déclenchent un protocole dans lequel les classes manquantes sont échangées. J'utilise un de/sérialiseur personnalisé à cet effet, qui renvoie un certain message à l'acteur de l'application une fois qu'il attrape une exception liée aux classes manquantes. En termes simples, le système distant B envoie un objet au système A; Si, pendant la désérialisation, le système A obtient un ClassNotFoundError ou NoClassDefFoundError, le système A demande au système B le bytecode de la classe indéfinie. Lorsque A reçoit la réponse de B (qui est une paire de nom de classe plus un objet de type Array [Byte]), alors il peut enregistrer la classe, de sorte que le système suivant envoie l'objet au système A, A peut le désérialiser correctement.Désérialisation et chargement de classes dans Akka - NoClassDefFoundError
Maintenant, il y a deux approches
1) Système B envoie également toutes les classes liées à la classe
2) Système B envoie uniquement demandé le bytecode de la classe demandée (sans ses dépendances)
maintenant, concentrons-nous sur l'approche 2 et envisager le scénario suivant
- 1) B === obj: X ==> A (B envoie objet de la classe X à A)
- 2) Supposons que X dépend de Y, Z
- 3) B < ==== X? ==== A (A demande la classe X à B)
- 4) B ==== = X ====> B (B fournit la classe X à A; Une classe de registres X)
- 5) B === obj: X ==> A (A reçoit l'erreur due à la dépendance manquant Y)
- 6) B < ==== ==== Y A ?
- 7) B Y ===== ====> A (Une classe de registres Y)
- 8) B === obj: X ==> A
- 9) B < ==== Z? ==== A
- 10) B ===== Z ====> A (A enregistre la classe Z)
- 10) B === obj: X ==> A (OK, enfin A peut désérialiser l'objet de la classe X)
Je pense qu'un tel protocole devrait fonctionner, mais en pratique, je reçois une boucle dans les étapes 5-7, en raison de la
suivanteNoClassDefFoundError: Lexamples/DemoDecentralizedAkkaPlatformCmdLineMain2 $ AggregateProgram $$ anonfun $ 3 $ principale $$ anonfun $ applique 5 $;
je reçois pour enregistrer la classe suivante: examples.DemoDecentralizedAkkaPlatformCmdLineMain2 $ AggregateProgram $$ anonfun $ principale 5
appliquent $ de anonfun 3 $$ $ $ mais je continue à obtenir le NoClassDefFoundError.
Notez que je dépouille le "L" initial et le ";" du nom de classe, ainsi que de remplacer "/" par ".". Sinon, j'obtiendrais une erreur sur le système B.
Je suis désolé pour une formulation si compliquée de la question.