0

Too simple, this is my setup :

Jakarta : 9.1     
Liberty Application Server : 22.0.0.10      

server.xml :

<?xml version="1.0" encoding="UTF-8"?>
<server description="Tutorial server">
    <featureManager>
        <feature>managedBeans-2.0</feature>
        <feature>enterpriseBeansHome-4.0</feature>
        <feature>mpOpenAPI-3.0</feature>
        <feature>cdi-3.0</feature>
        <feature>concurrent-2.0</feature>
        <feature>enterpriseBeansLite-4.0</feature>
        <feature>restfulWS-3.0</feature>
        <feature>servlet-5.0</feature>
        <feature>json-1.0</feature>
        <feature>jsonb-2.0</feature>
        <feature>jsonp-2.0</feature>
        <feature>persistence-3.0</feature>
        <feature>beanValidation-3.0</feature>
    </featureManager>

    <library id="project-libs">
        <fileset dir="${server.config.dir}/lib/global/" includes="*.jar"/>
    </library>

    <dataSource jndiName="jdbc/jta-datasource" transactional="true">
        <jdbcDriver id="database-driver" libraryRef="project-libs"/>
        <properties databaseName="${database.name}" serverName="${database.hostname}" portNumber="${database.port}"
                    user="${database.username}" password="${database.password}"/>
    </dataSource>


    <basicRegistry id="basic" realm="BasicRealm"/>
    <httpSession securityIntegrationEnabled="false"/>
    <httpEndpoint id="defaultHttpEndpoint" host="${default.hostname}" httpPort="${default.http.port}"
                  httpsPort="${default.https.port}">
        <httpOptions http2="enabled"/>
    </httpEndpoint>
    <webContainer disableXPoweredBy="true"/>
    <applicationManager autoExpand="true"/>
    <applicationMonitor updateTrigger="mbean"/>
</server>

My EJB :

import jakarta.ejb.LocalBean;
import jakarta.ejb.Singleton;
import jakarta.ejb.TransactionManagement;
import jakarta.ejb.TransactionManagementType;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.transaction.Transactional;

@Singleton
@LocalBean
@TransactionManagement(TransactionManagementType.CONTAINER)
public class ClientRepository {

    @PersistenceContext
    private EntityManager em;

    @Transactional
    public void insert(Client client) {
        em.persist(client);
    }
}

Why Can not use @Transactional on EJB classes ?
I receive this error on application server :

[INFO] [ERROR   ] CWWKZ0002E: An exception occurred while starting the application javaee-rest1. The exception message was: com.ibm.ws.container.service.state.StateChangeException: java.lang.IllegalStateException: CWOWB2000E: The annotation @jakarta.transacti
on.Transactional(value=REQUIRED, rollbackOn={}, dontRollbackOn={}) is not allowed on EJB: ClientRepository
[INFO] [AUDIT   ] CWWKF0012I: The server installed the following features: [beanValidation-3.0, cdi-3.0, concurrent-2.0, enterpriseBeansHome-4.0, enterpriseBeansLite-4.0, expressionLanguage-4.0, jdbc-4.2, jndi-1.0, json-1.0, jsonb-2.0, jsonp-2.0, managedBeans
-2.0, mpConfig-3.0, mpOpenAPI-3.0, persistence-3.0, persistenceContainer-3.0, restfulWS-3.0, restfulWSClient-3.0, servlet-5.0, xmlBinding-3.0].
mah454
  • 1,571
  • 15
  • 38
  • 3
    All business methods in EJB are by default transactional. The `@Transactional` annotation is only for CDI managed beans (pojos) to make them transactional. On Ejb methods you can use annotations like `@Required`, `@RequiresNew`, `@Supports` and `@Unsupported` – Gas Oct 14 '22 at 07:52

0 Answers0