Play2 Как управлять транзакцией из сервисного уровня вместо экшн-слоя?

Я использую Play2.1.1 Java с JPA2.0 с реализацией hibernate.

управлять транзакцией с помощью кода вместо использования @transactional, как показано ниже, является нормальным стилем кода JPA. Есть ли способ работать как в Play ниже? или как использовать JPA.withtranaction (), чтобы сделать? Я попробовал, не знаю, как передать параметр, я не знаком с функциональным кодом. большое спасибо. Пожалуйста, дайте мне пример кода на основе ниже.

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();
    }
}

Теперь я изменяю свой код ниже, чтобы начать транзакцию с сервисного уровня. Он не выглядит эффективным, есть ли другой способ записи? Спасибо

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);
            }
        });
    }

Ответы на вопрос(2)

Ваш ответ на вопрос