title: EJB with CMT when migrate from JBoss 7 to WildFly 9
body: <p>I'm migrating my application from JBoss 7 to WildFly (v9.0.1) and it is not deployed because of bean transaction management error.</p>
  
  <pre><code>    Caused by: javax.naming.NamingException: WFLYNAM0062: Failed to lookup env/com.component.eventmgt.EventServiceImpl/transaction [Root exception is java.lang.RuntimeException: WFLYNAM0059: Resource lookup for injection failed: java:jboss/UserTransaction]
      at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:157)
      at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)
      at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
      at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
      at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
      at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:316)
      ... 90 more
  Caused by: java.lang.RuntimeException: WFLYNAM0059: Resource lookup for injection failed: java:jboss/UserTransaction
      at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:319)
      at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:143)
      ... 95 more
  Caused by: javax.naming.NameNotFoundException: UserTransaction [Root exception is java.lang.IllegalStateException: WFLYEJB0137: Only session and message-driven beans with bean-managed transaction demarcation are allowed to access UserTransaction]
      at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:153)
      at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)
      at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)
      at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)
      at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)
      at org.jboss.as.naming.deployment.ContextNames$BindInfo$1$1.getReference(ContextNames.java:316)
      ... 96 more
  </code></pre>
  
  <p>Here is the EventServiceImpl class.</p>
  
  <pre><code>    @Stateless
      @Remote(EventService.class)
      @TransactionAttribute(TransactionAttributeType.REQUIRED)
      public class EventServiceImpl implements EventService {
  
          /**
           * Logger
           */
          private static Logger log = LoggerFactory.getLogger(EventService.class);
  
          private EventTableDAO eventDao;
  
          @PersistenceContext(unitName = "SOMF-GT")
          private EntityManager entityManager;
  
          @Resource
          private UserTransaction transaction;
  
         public List&lt;Map&gt; loadEvents() throws EventsException {
  
          Configuration configurationEntry = new Configuration();
          try {
              Map configuration = configurationService.getConfiguration();
              if (configuration != null) {
  
          eventDao = new EventTableDAO(Event.class, entityManager, transaction);
          List&lt;Map&gt; eventsMapList = new ArrayList();
  }
  }
  </code></pre>
  
  <p>I know that if i changed the transaction management to BMT with @TransactionManagement(TransactionManagementType.BEAN) but then the following error emerge </p>
  
  <blockquote>
    <p>WFLYJPA0060: Transaction is required to perform this operation (either use a transaction or extended persistence context)</p>
  </blockquote>
  
  <p>I want to know why we have to change this in the first place ?</p>
  
  <p>Any information, please !</p>