The WeakReference class, monitoring memory leak and garbage collection in a Java application

Image
 Below is a Stack implementation that uses an internal resizeable array structure.  public class MyStack< T > implements Stack< T > { private static final int CAPACITY = 100 ; private Object[] array ; private int pos = 0 ; public MyStack () { this . array = new Object[ CAPACITY ] ; } @Override public void push ( T item) { if ( pos >= array . length / 2 ) { Object[] newArray = new Object[ pos * 2 ] ; System. arraycopy ( array , 0 , newArray , 0 , array . length ) ; array = newArray ; } array [ pos ++] = item ; } @Override public T pop () { if (isEmpty()) { throw new RuntimeException( "empty stack" ) ; } @SuppressWarnings ( "unchecked" ) T item = ( T ) array [ pos - 1 ] ; pos -= 1 ; return item ; } @Override @SuppressWarnings ( "unchecked" ) public T peek...

Revisiting the Axon Framework


Axon is a CQRS Framework for scalable and high-performance applications. Lets look at the evolution of the API from Axon 1 to Axon 3:


With Axon 3, Aggregate  interface is introduced and we pass the method to the execute() method:

Axon 1:

@CommandHandler
public void handle(final ChangeClientNameCommand command, UnitOfWork unitOfWork) {

    Client client = clientRepository.load(new StringAggregateIdentifier(command.getClientIdentifier()));

    client.changeNameAs(command.getNewName());
}


Axon 3:

@CommandHandler
public void handle(final ChangeClientNameCommand command) {

    Aggregate client = clientRepository.load(command.getClientIdentifier().toString());

    client.execute(aggregateRoot -> aggregateRoot.changeNameAs(command.getNewName()));
}



In the past Client entity was derived from a class called "AbstractAnnotatedAggregateRoot". Now in Axon 3, it is just a POJO and the Repository does not return a Client entity but an "aggregate". We pass the function as a parameter. At the time of Axon 1.0, Java language did not have support for lambda expressions.

Axon 1:

public class Client extends AbstractAnnotatedAggregateRoot {
    private String name;
    private Address address;
    private String phoneNumber;

Axon 3:

@AggregateRootpublic class Client {

    @AggregateIdentifier    private ClientId companyId;

    private String name;
    private Address address;
    private String phoneNumber;


Domain entities are not dependent to a base class anymore. We see this pattern in many frameworks like Unit Test frameworks. There is even a project called Lombok that uses annotations for simpler code.

To be continued..





Comments

Popular posts from this blog

My Crappy Looking Solution to "Binary Tree Common Ancestor" Problem

The WeakReference class, monitoring memory leak and garbage collection in a Java application

A Pattern Recognition Problem: Finding Line Segments Effectively In Java