Semantic-driven aspect oriented programming of distributed applications