MetaObjects Features

Comprehensive metadata-driven development capabilities designed for enterprise-scale applications.

🎯

Metadata-First Architecture

Define your object structures, validation rules, and relationships through rich metadata definitions rather than scattered annotations.

🚀

Cross-Language Generation

Generate type-safe code for Java, TypeScript, C#, Python, and SQL from a single metadata definition.

Runtime Adaptation

Change system behavior without redeployment through dynamic metadata interpretation.

🔧

Framework Integration

Native support for Spring Boot, OSGi, and other enterprise frameworks without forcing dependencies.

🛡️

Type-Safe Constraints

Comprehensive validation system that enforces rules at metadata definition time.

📈

Performance Optimized

Built on a READ-OPTIMIZED pattern with microsecond performance and thread-safe concurrent access.

Detailed Capabilities

Metadata-First Development

MetaObjects revolutionizes development by putting metadata at the center. Define your object structures, validation rules, and relationships through rich JSON metadata definitions.

  • Centralized object definitions in JSON format
  • Rich attribute system with inheritance
  • Complex constraint definitions
  • Relationship mapping and validation
{
  "metadata": {
    "children": [
      {
        "object": {
          "name": "User",
          "type": "pojo",
          "@dbTable": "users",
          "children": [
            {
              "field": {
                "name": "email",
                "type": "string",
                "@required": true,
                "@maxLength": 255,
                "@pattern": "^[\\w._%+-]+@[\\w.-]+\\.[A-Za-z]{2,}$"
              }
            },
            {
              "field": {
                "name": "profile",
                "type": "UserProfile",
                "@cascade": "ALL"
              }
            }
          ]
        }
      }
    ]
  }
}

Cross-Language Code Generation

Generate consistent, type-safe code across multiple programming languages and frameworks from a single metadata definition.

  • Java: POJOs, JPA entities, builders, validators
  • TypeScript: Interfaces, classes, React components
  • C#: Classes, entities, validation attributes
  • SQL: Database schemas, constraints, indexes
@Entity
@Table(name = "users")
public class User {
    @Column(name = "email", nullable = false, length = 255)
    @Pattern(regexp = "^[\\w._%+-]+@[\\w.-]+\\.[A-Za-z]{2,}$")
    private String email;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "profile_id")
    private UserProfile profile;

    // Generated getters, setters, builders...
}
export interface User {
  email: string;
  profile: UserProfile;
}

export class UserValidator {
  static validate(user: User): ValidationResult {
    const errors: string[] = [];

    if (!user.email || user.email.length > 255) {
      errors.push("Email is required and must be ≤ 255 characters");
    }

    const emailPattern = /^[\w._%+-]+@[\w.-]+\.[A-Za-z]{2,}$/;
    if (!emailPattern.test(user.email)) {
      errors.push("Invalid email format");
    }

    return { valid: errors.length === 0, errors };
  }
}
[Table("users")]
public class User
{
    [Column("email")]
    [Required]
    [MaxLength(255)]
    [RegularExpression(@"^[\w._%+-]+@[\w.-]+\.[A-Za-z]{2,}$")]
    public string Email { get; set; }

    [ForeignKey("ProfileId")]
    public UserProfile Profile { get; set; }
}

Runtime Adaptation

Modify system behavior dynamically without redeployment through metadata interpretation at runtime.

  • Dynamic field addition and modification
  • Runtime validation rule changes
  • Business logic adaptation
  • Zero-downtime configuration updates
// Load and modify metadata at runtime
MetaData userMetadata = registry.getMetaData("User");

// Add new field dynamically
Field phoneField = new StringField("phone");
phoneField.setAttribute("maxLength", 20);
phoneField.setAttribute("pattern", "\\+?[1-9]\\d{1,14}");
userMetadata.addField(phoneField);

// Update validation rules
Field emailField = userMetadata.getField("email");
emailField.setAttribute("required", false);

// Changes take effect immediately
registry.updateMetaData(userMetadata);

Performance & Scalability

Designed for enterprise-scale applications with massive concurrent access requirements.

  • Load once: 100ms-1s during startup
  • Read thousands of times: 1-10μs performance
  • Thread-safe: No synchronization overhead
  • Memory efficient: 10-50MB footprint
// READ-OPTIMIZED WITH CONTROLLED MUTABILITY
// Similar to java.lang.Class reflection system

// Startup: Load metadata once
MetaDataRegistry registry = new MetaDataRegistry();
registry.loadMetaData("user-objects.json"); // ~100ms

// Runtime: Thousands of concurrent reads
// No locks, no synchronization needed
for (int i = 0; i < 1_000_000; i++) {
    MetaData user = registry.getMetaData("User"); // ~1-10μs
    Field email = user.getField("email");         // ~1-5μs

    // Process with microsecond performance
}

Framework Integration

Spring Boot

Native Spring integration with auto-configuration and component scanning.

<dependency>
    <groupId>com.metaobjects</groupId>
    <artifactId>metaobjects-core-spring</artifactId>
    <version>6.2.5-SNAPSHOT</version>
</dependency>

Plain Java

Standalone usage without framework dependencies.

<dependency>
    <groupId>com.metaobjects</groupId>
    <artifactId>metaobjects-core</artifactId>
    <version>6.2.5-SNAPSHOT</version>
</dependency>

OSGi Bundle

Full OSGi support with proper lifecycle management.

<dependency>
    <groupId>com.metaobjects</groupId>
    <artifactId>metaobjects-metadata</artifactId>
    <version>6.2.5-SNAPSHOT</version>
</dependency>

Ready to Transform Your Development?

Start building with MetaObjects today and experience the power of metadata-driven development.