永続エンティティに依存性注入を導入したいのですが、どうすればよいかわかりません。
私のGWTアプリケーションのソルトハッシュアルゴリズムには、Base64の実装が必要でした。GWTには、古いバージョンのcommons-codecが付属しています。名前の競合(私はMavenを使用していません)のため、古いものを使用する方法を理解するか、Base64.iharder.netなどの別の実装を使用することができました。
いくつかの選択肢を採用した後、それぞれにインターフェイスとアダプタのクラスを作成しました。1つの実装を注入しました。それは古典的なユースケースのように見えました。
永続エンティティが作成されたとき、すべてがうまく機能しました。ただし、それらを保存および取得した後、以前に挿入されて永続化されなかったフィールドは、null値でインスタンス化されました。
この問題は完全に理にかなっています。引数なしのコンストラクターを追加するDataNucleusを使用します。DataNucleusは依存関係を再度注入しません。
データストアからオブジェクトを取得するときに、永続性フレームワークに依存関係を再挿入するように依頼するにはどうすればよいですか?
ありがとうございました。
// salted hash for password storage
@PersistenceCapable
public class SaltedHash implements Serializable {
private static final long serialVersionUID = 1L;
private String salt;
private String hash;
@NotPersistent
private final Base64Codec base64Codec;
@NotPersistent
private final Sha265Hash sha256Hash;
@NotPersistent
private final Random random;
@Inject
public SaltedHash(Base64Codec b64, Sha256Hash sha256, Random rnd) {
base64Codec = b64;
sha256Hash = sha256;
random = rnd;
}
public void setSecret(String secret) {
salt = base64Codec.encode(generateSalt());
hash = base64Codec.encode(sha256Hash.hash(salt + secret));
}
public boolean matches(String secret) {
String maybe = base64Codec.encode(sha256Hash.hash(salt + secret));
return hash.equals(maybe);
}
private byte[] generateSalt() {
// use random to generate a salt
}
}