Jakarta Annotations defines a collection of annotations representing common semantic concepts that enable a declarative style of programming that applies across a variety of Java technologies.
npx @tessl/cli install tessl/maven-jakarta-annotation--jakarta-annotation-api@3.0.0Jakarta Annotations defines a collection of annotations representing common semantic concepts that enable a declarative style of programming that applies across a variety of Java technologies. This API provides annotations for resource injection, lifecycle callbacks, security annotations, and generated code marking.
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>3.0.0</version>
</dependency>import jakarta.annotation.*;
import jakarta.annotation.security.*;
import jakarta.annotation.sql.*;For specific annotations:
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.annotation.Resource;
import jakarta.annotation.security.RolesAllowed;
import jakarta.annotation.sql.DataSourceDefinition;import jakarta.annotation.*;
import jakarta.annotation.security.*;
@RolesAllowed({"admin", "user"})
public class UserService {
@Resource(name = "jdbc/UserDB")
private DataSource dataSource;
@PostConstruct
public void initialize() {
// Initialization logic after dependency injection
System.out.println("UserService initialized");
}
@PreDestroy
public void cleanup() {
// Cleanup logic before instance destruction
System.out.println("UserService cleanup");
}
@RolesAllowed("admin")
public void deleteUser(String userId) {
// Admin-only operation
}
@PermitAll
public List<User> getUsers() {
// Public operation
return userRepository.findAll();
}
}Jakarta Annotations provides three main functional areas:
jakarta.annotation): Lifecycle management, resource injection, nullability constraints, code generation markers, and priority orderingjakarta.annotation.security): Declarative authorization and role-based access control for methods and classesjakarta.annotation.sql): Database DataSource configuration and JNDI registrationThe annotations are designed to work across the Jakarta EE ecosystem, providing consistent behavior in application servers, dependency injection frameworks, and other Jakarta EE-compliant containers.
Fundamental annotations for lifecycle management, resource injection, nullability, code generation, and priority ordering. These form the foundation for dependency injection and container-managed components.
@PostConstruct
public void methodName() { }
@PreDestroy
public void methodName() { }
@Resource(name = "resource/name")
private ResourceType resource;
@Generated(value = "com.example.Generator")
public class GeneratedClass { }
@Priority(100)
public class PriorityComponent { }
@Nonnull
public String nonNullMethod(@Nullable String param) { }Declarative security annotations for role-based access control. These annotations enable method-level and class-level authorization without programmatic security checks.
@RolesAllowed({"admin", "user"})
public class SecureService { }
@DenyAll
public void restrictedMethod() { }
@PermitAll
public void publicMethod() { }
@RunAs("system")
public class SystemService { }
@DeclareRoles({"admin", "user", "guest"})
public class Application { }Annotations for defining and configuring database DataSources with JNDI registration. These annotations enable declarative database configuration without external configuration files.
@DataSourceDefinition(
name = "java:global/MyDataSource",
className = "com.mysql.cj.jdbc.MysqlDataSource",
url = "jdbc:mysql://localhost:3306/mydb",
user = "user",
password = "password"
)
public class DatabaseConfig { }
@DataSourceDefinitions({
@DataSourceDefinition(name = "java:global/DB1", className = "..."),
@DataSourceDefinition(name = "java:global/DB2", className = "...")
})
public class MultiDatabaseConfig { }