Play2 Como gerenciar a transação da camada de serviço em vez da camada de ação?

Eu estou usando o Play2.1.1 Java com JPA2.0 com a implementação do hibernate.

para controlar a transação por código em vez de usar @transactional como abaixo é o estilo de código JPA normal, existe alguma maneira de trabalhar como abaixo no Play? ou como usar o JPA.withtranaction () para fazer? Eu tentei, não faço ideia de como passar no parâmetro, não estou familiarizado com código funcional. Muito obrigado. Por favor me dê um código de exemplo com base abaixo.

public  void createActorB(final String email, final String psw) throws Throwable {
    EntityManager manager = JPA.em();
    try {
        EntityTransaction ex = manager.getTransaction();
        this.dbActor.setEmail(email);
        this.dbActor.setCredential(psw);
        manager.persist(this.dbActor);
        ex.commit();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        throw new ActorException(CODE.UNKNOWN, e);
    } finally {
        manager.close();
    }
}

Agora eu mudo meu código abaixo para iniciar a transação da camada de serviço, não parece eficiente, existe alguma outra maneira de escrever? obrigado

private void internalCreateActor(String email, String psw) throws ActorException {
        if (StringUtils.isEmpty(email) || StringUtils.isEmpty(psw))
            throw new ActorException(CODE.INVALIDE_PARAMETER);
        try {
            this.dbActor.setEmail(email);
            this.dbActor.setCredential(psw);
            this.dbActor.setCreateD(new Date());
            JPA.em().persist(this.dbActor);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new ActorException(CODE.UNKNOWN, e);
        }
    }

 public void createActor(final String email, final String psw, final String cellPhone, final Actor.TYPE type)
            throws Throwable {

        JPA.withTransaction(new Callback0() {
            @Override
            public void invoke() throws Throwable {
                internalCreateActor(email, psw, cellPhone, type);
            }
        });
    }

questionAnswers(2)

yourAnswerToTheQuestion