WildFly Swarm Teiid

Kylin Soong

Agenda

  • What's WildFly Swarm
  • WildFly Swarm Architecture
  • How to Develop WildFly Swarm Teiid

What's WildFly Swarm

  • Spring Boot's Success - JEE to Cloud(CloudFoundry)
  • JEE dominate the past 2 decades, What's for the next?
  • JEE Profile Vs MicroProfile(WildFly Swarm)
  • Strategic product in Red Hat Middleware Profilio
  • Production Swarm will in EAP 7.x ?

WildFly Swarm Architecture

From Wildfly to WildFly Swarm

  • Architecture Comparison
  • Pro Vs Con

WildFly Architecture

WildFly Architecture

WildFly Swarm Architecture

WildFly Swarm Architecture

Uberjar Architecture

WildFly Swarm Uberjar Architecture

Extended JBoss Modules


public class BootModuleLoader extends ModuleLoader {
    public BootModuleLoader() throws IOException {
        super(new ModuleFinder[]{
                new BootstrapClasspathModuleFinder(),
                new BootstrapModuleFinder(),
                new ClasspathModuleFinder(),
                new ContainerModuleFinder(),
                new ApplicationModuleFinder(),
                new FlattishApplicationModuleFinder(),
        });
    }

Pro Vs Con

  • Good at Move Application from WildFLy
  • JBoss Modules - class loading too complex

How to Develop Swarm Teiid

  • Develop Feature Pack
  • Develop Config API
  • Develop CDI Bean

WildFly Swarm Architecture

WildFly SwarmArchitecture

Develop Feature Pack

WildFly Build Process
  • feature pack - a lightweight artifact that contains a complete description of a set of server features
  • Maven plugin build dist from feature pack

Develop Config API

  • Depend on Runtime Server
  • Generated by Maven plugin

Develop CDI Bean


@WildFlyExtension(module = "org.jboss.teiid", classname = "org.teiid.jboss.TeiidExtension")
@MarshalDMR
public class TeiidFraction extends Teiid implements Fraction 

Develop CDI Bean


@Inject
@Named(DefaultSocketBindingGroupProducer.STANDARD_SOCKETS)
private SocketBindingGroup group;

this.group.socketBinding(new SocketBinding("teiid-jdbc").port(this.jdbcPort));
this.group.socketBinding(new SocketBinding("teiid-odbc").port(this.odbcPort));

Develop CDI Bean


@Inject
@Any
private Instance infinispan;

infinispan.cacheContainer("teiid-cache",
                cc -> cc.defaultCache("resultset")
                        .localCache("resultset-repl",
                                c -> c.lockingComponent(l -> l.isolation(LockingComponent.Isolation.READ_COMMITTED))
                                      .transactionComponent(t -> t.mode(TransactionComponent.Mode.NON_XA))
                                      .evictionComponent(e -> e.strategy(EvictionComponent.Strategy.LIRS).maxEntries(1024L))
                                      .expirationComponent(e -> e.maxIdle(7200000L)))
                        .localCache("resultset",
...

References

Question & Answer