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].