2016-11-26 5 views
0

J'ai encore un autre problème. J'essaie d'utiliser Play Framework 2.5 avec MongoDB en utilisant le plugin Jongo pour Play. Tout d'abord, je ne suis pas tout à fait sûr si je l'ai implémenté correctement. Voici une classe que je voudrais insérer:Jongo avec Play Framework: StackOverflowError en essayant d'insérer

public class User { 
    @Inject public PlayJongo jongo; 

    public MongoCollection users() { 
     return jongo.getCollection("users"); 
    } 

    @JsonProperty("_id") 
    public ObjectId id; 

    public String firebaseID; 

    public String name; 

    public User(){} 

    private User(String firebaseID, String name, ApplicationLifecycle appLifecycle, Environment env, Configuration conf){ 
     this.jongo = new PlayJongo(appLifecycle, env, conf); 
     this.firebaseID = firebaseID; 
     this.name = name;); 
    } 

    public User createUser(String firebaseID, String name, ApplicationLifecycle appLifecycle, Environment env, Configuration conf){ 
     User user = new User(firebaseID, name, appLifecycle, env, conf); 
     user.insert(); 

     return user; 
    } 

    public void insert() { 
     users().insert(this); 
    } 
} 

Et mon contrôleur d'application fait quelque chose comme ceci:

@Inject public ApplicationLifecycle appLifecycle; 
@Inject public Environment env; 
@Inject public Configuration conf; 
@Inject private User _User; 
.... 
public Result login(...){ 
... 
User user = _User.createUser(...); 
... 
} 
.... 

Im encore nouveau dans le cadre de jeu et je n'obtenir assez comment le système d'injection doit être utilisé. Donc, si quelqu'un veut m'éclairer, il/elle est libre de le faire :) Si je crée un nouvel utilisateur avec la méthode createUser (et qu'il essaie d'insérer la nouvelle classe), j'obtiens une StackOverflowError apparemment causée par une chaîne infinie de méthode récursive appelant: debug output

Répondre

0

Je résous mon problème. Maintenant, j'ai un UsersRepository qui contient les méthodes qui fonctionnent sur la collection mongo (authenticate, addUser, et al.) Et un objet Users qui contient seulement les champs de données réels (prénom, nom, email, etc.). Après cela, je peux injecter UsersRepository dans mon contrôleur et utiliser cette instance partout.

Merci à Greg Methvin, Tech Lead - Jouer cadre

Je pense que cela peut vous aider aussi.