Ручные транзакции со швом POJO

Как насчет закрытия в JavaScript (подобный анонимным методам в C# v2.0 +). Можно создать функцию, которая создает функцию или "выражение".

Пример закрытия :

//Takes a function that filters numbers and calls the function on 
//it to build up a list of numbers that satisfy the function.
function filter(filterFunction, numbers)
{
  var filteredNumbers = [];

  for (var index = 0; index < numbers.length; index++)
  {
    if (filterFunction(numbers[index]) == true)
    {
      filteredNumbers.push(numbers[index]);
    }
  }
  return filteredNumbers;
}

//Creates a function (closure) that will remember the value "lowerBound" 
//that gets passed in and keep a copy of it.
function buildGreaterThanFunction(lowerBound)
{
  return function (numberToCheck) {
    return (numberToCheck > lowerBound) ? true : false;
  };
}

var numbers = [1, 15, 20, 4, 11, 9, 77, 102, 6];

var greaterThan7 = buildGreaterThanFunction(7);
var greaterThan15 = buildGreaterThanFunction(15);

numbers = filter(greaterThan7, numbers);
alert('Greater Than 7: ' + numbers);

numbers = filter(greaterThan15, numbers);
alert('Greater Than 15: ' + numbers);
6
задан Damo 25 November 2009 в 08:40
поделиться

2 ответа

Как вы знаете, управление транзакциями - это сквозная задача. Так что не рекомендуется разбросать код по модулям, где эти проблемы не являются их основной заботой.

Если вы используете JTA UserTransaction в среде без EJB, значит, JTA доступен (Apache Tomcat не поддерживает JTA).

Правило 1 °

Управление транзакциями стыков включено по умолчанию для всех запросов JSF (Seam 2.0 +).

Я думаю, что Управление транзакциями швов звучит лучше, чем Транзакции, управляемые швами . Это означает, что Seam за кулисами заботится о вызовах begin и commit. Seam играет роль менеджера транзакций, используя сценарий Seam Transaction Manager

1 ° : POJO + JTA доступен (Apache Tomcat не поддерживает JTA)

Менеджер транзакций, используемый Seam: org. jboss.seam.transaction.UTtransaction

Включено по умолчанию в среде без EJB (война), когда доступен JTA (JBoss поддерживает JTA)

Если вы используете JPA EntityManager или Hibernate Session, вам необходимо зарегистрировать их, чтобы разрешить Seam управлять границами транзакций

См. 9.3. Контексты сохраняемости с управляемым швом как настроить контекст сохраняемости с управляемым швом (вводится с помощью @In)

Затем внедряется EntityManager (EntityManager) или сеанс (Hibernate) с помощью @In (область действия - ScopeType.CONVERSATION)

@Name("businessService")
public class BusinessServiceImpl implementes BusinessService {

    @In
    private EntityManager entityManager;

    public void doSomething() {
        // You do not need to call entityManager().getTransaction().begin();
        // because Seam Transaction Manager takes care of it
        // By using proxies
        // Therefore, if you call entityManager().getTransaction().begin()
        // You will get IllegalStateException

        // Some EntityManager operations persist, find etc

        // You do not need to call entityManager().getTransaction().commit();
        // because Seam Transaction Manager takes care of it
        // By using proxies
    }

}

За кулисами диспетчер транзакций стыков подключает EntityManager (JPA) или сеанс (Hibernate) к активному UserTransaction JTA, вызывая метод joinTransaction

2 ° сценарий : POJO + RESOURCE_LOCAL (Либо Hibernate, либо JPA) Транзакция

Диспетчер транзакций, используемый Seam (JPA): org.jboss. seam.transaction.EntityTransaction

Диспетчер транзакций, используемый Seam (Hibernate): org.jboss.seam.transaction.HibernateTransaction

См. 9.3. Контексты сохраняемости, управляемые швами , как настроить контекст сохраняемости, управляемые швами (вводятся с помощью @In)

За кулисами, диспетчер транзакций швов заботится о вызове begin и commit в базовой технологии с помощью прокси

3 ° сценарий : EJB

Менеджер транзакций, используемый Seam: org.jboss.seam.transaction.CMTTransaction

Включено по умолчанию в среде EJB. Будьте осторожны, в этом случае Seam не контролирует транзакцию, управляемую контейнером.

с уважением,

Контексты сохраняемости, управляемые швами , как настроить контекст сохраняемости, управляемые швами (вводятся с помощью @In)

За кулисами, диспетчер транзакций швов заботится о вызове begin и commit в базовой технологии с помощью прокси

3 ° сценарий : EJB

Менеджер транзакций, используемый Seam: org.jboss.seam.transaction.CMTTransaction

Включено по умолчанию в среде EJB. Будьте осторожны, в этом случае Seam не контролирует транзакцию, управляемую контейнером.

с уважением,

Контексты сохраняемости, управляемые швами , как настроить контекст сохраняемости, управляемые швами (внедренные с использованием @In)

За кулисами, диспетчер транзакций швов заботится о вызове begin и commit в базовой технологии с помощью прокси

3 ° сценарий : EJB

Менеджер транзакций, используемый Seam: org.jboss.seam.transaction.CMTTransaction

Включено по умолчанию в среде EJB. Будьте осторожны, в этом случае Seam не контролирует транзакцию, управляемую контейнером.

с уважением,

CMTTransaction

Включено по умолчанию в среде EJB. Будьте осторожны, в этом случае Seam не контролирует транзакцию, управляемую контейнером.

с уважением,

CMTTransaction

Включено по умолчанию в среде EJB. Будьте осторожны, в этом случае Seam не контролирует транзакцию, управляемую контейнером.

с уважением,

8
ответ дан 8 December 2019 в 18:37
поделиться

В настоящее время я работаю следующим образом:

//don't use @Transactional annotation
public void doStuff() {
  UserTransaction userTx = (UserTransaction) org.jboss.seam.Component.getInstance("org.jboss.seam.transaction.transaction");
  userTx.setTransactionTimeout(10 * 60);  //set timeout to 60 * 10 = 600 secs = 10 mins
  userTx.begin();

  /*If entity manager is created before the transaction is started (ie. via Injection) then it must join the transaction */
  entityManager.joinTransaction();

  //do stuff    

  entityManager.persist(user);
  entityManager.flush();   //logs will show an insert at this point

  userTx.commit();   //or rollback()
}

Но если транзакция уже выполняется, и вы хотите присоединиться к ней, вы используете userTx.isActive () и т. Д.

5
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: