<commit_before># JooFlux: a Java agent for dynamic aspect-oriented middlewares

JooFlux a JVM agent that allows both the dynamic replacement of method implementations and the
application of aspect advices. Compared to existing approaches, JooFlux takes a novel route by
taking advantage of the new `invokedynamic` instruction added in Java SE 7. The runtime overhead of
JooFlux is marginal for method invocations, and fairly limited when aspects are being injected. In
any case, JooFlux shows interesting performance compared to related approaches such as AOP tools or
dynamic languages that rely on dynamic dispatch. More interestingly, JooFlux does not involve
reloading whole classes on either method replacement or advice injection, which keeps a large range
of just-in-time compilation optimizations valid.

JooFlux is being developed as part of a [larger academic research group](http://dynamid.citi-lab.fr/)
that focuses on the design and implementation of middlewares for dynamic environments.

## Current status

We demonstrated initial developments of JooFlux at the [Devoxx France 2012 conference](http://www.devoxx.fr/).

The current iteration of the source code is only a proof-of-concept of leveraging `invokedynamic`
for aspect-oriented programming and live code patching. **It is not production-ready**, and
further developments need to be made to turn JooFlux into a usable product.

While it is our intention to turn it into something easier to use, we opted to release the initial
developments source code to support the reproducibility and dissemination of our research results.

Please pardon the raw state of JooFlux, but the system we are in pushes us to publish research papers
first before focusing on the technology transfer of prototypes :-)

## Funding the JooFlux development

Our very own ability to progress on dynamic code replacement and aspect injection with JooFlux
depends on funding.

We have no external funding for the JooFlux project at the moment, so if you feel like sustaining
our research on this project, feel-free to contact us!

## License

The initial work was conducted at [INSA-Lyon](http://www.insa-lyon.fr/) in the
[CITI laboratory](http://www.citi-lab.fr/).

JooFlux is made available under the terms of the
[Mozilla Public License, v 2.0](http://mozilla.org/MPL/2.0/).

### Header notice

Any source file must carry the following header:

    JooFlux
    
    Copyright (c) 2012 Institut National des Sciences Appliquées de Lyon (INSA-Lyon)
    Copyright (c) 2012 <NAME>, INSA-Lyon
    Copyright (c) 2012 <NAME>, INSA-Lyon

    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
    file, You can obtain one at http://mozilla.org/MPL/2.0/.

### Third-party dependencies

JooFlux embeds the following libraries:

* [ASM](http://asm.ow2.org/), [BSD-style licensed](http://asm.ow2.org/license.html)<commit_msg>Added a publications section in the README<commit_after># JooFlux: a Java agent for dynamic aspect-oriented middlewares

JooFlux a JVM agent that allows both the dynamic replacement of method implementations and the
application of aspect advices. Compared to existing approaches, JooFlux takes a novel route by
taking advantage of the new `invokedynamic` instruction added in Java SE 7. The runtime overhead of
JooFlux is marginal for method invocations, and fairly limited when aspects are being injected. In
any case, JooFlux shows interesting performance compared to related approaches such as AOP tools or
dynamic languages that rely on dynamic dispatch. More interestingly, JooFlux does not involve
reloading whole classes on either method replacement or advice injection, which keeps a large range
of just-in-time compilation optimizations valid.

JooFlux is being developed as part of a [larger academic research group](http://dynamid.citi-lab.fr/)
that focuses on the design and implementation of middlewares for dynamic environments.

## Current status

The current iteration of the source code is only a proof-of-concept of leveraging `invokedynamic`
for aspect-oriented programming and live code patching. **It is not production-ready**, and
further developments need to be made to turn JooFlux into a usable product.

While it is our intention to turn it into something easier to use, we opted to release the initial
developments source code to support the reproducibility and dissemination of our research results.

Please pardon the raw state of JooFlux, but the system we are in pushes us to publish research papers
first before focusing on the technology transfer of prototypes :-)

## Funding the JooFlux development

Our very own ability to progress on dynamic code replacement and aspect injection with JooFlux
depends on funding.

We have no external funding for the JooFlux project at the moment, so if you feel like sustaining
our research on this project, feel-free to contact us!

## Publications

* <NAME> and <NAME>. JooFlux : modification de code à chaud et injection d’aspects
  directement dans une JVM 7. In Proceedings of Conférence d’informatique en Parallélisme, Architecture
  et Système (ComPAS) - Conférence Française en Systèmes d’Exploitation (CFSE). Grenoble, January 2013.
  [HAL INRIA entry](http://hal.inria.fr/hal-00759402).
* <NAME> and <NAME>. JooFlux: Hijacking Java 7 InvokeDynamic To Support Live Code Modifications. 2012. [Research report on arXiv](http://fr.arxiv.org/abs/1210.1039)
* We demonstrated initial developments of JooFlux at the [Devoxx France 2012 conference](http://www.devoxx.fr/).

## License

The initial work was conducted at [INSA-Lyon](http://www.insa-lyon.fr/) in the
[CITI laboratory](http://www.citi-lab.fr/).

JooFlux is made available under the terms of the
[Mozilla Public License, v 2.0](http://mozilla.org/MPL/2.0/).

### Header notice

Any source file must carry the following header:

    JooFlux
    
    Copyright (c) 2012 Institut National des Sciences Appliquées de Lyon (INSA-Lyon)
    Copyright (c) 2012 <NAME>, INSA-Lyon
    Copyright (c) 2012 <NAME>, INSA-Lyon

    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
    file, You can obtain one at http://mozilla.org/MPL/2.0/.

### Third-party dependencies

JooFlux embeds the following libraries:

* [ASM](http://asm.ow2.org/), [BSD-style licensed](http://asm.ow2.org/license.html)
{'fraction_non_alphanumeric': 0.06316767301439852, 'fraction_numerical': 0.012385818238117356, 'mean_word_length': 4.424013434089001, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 6, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1724200', 'n_tokens_mistral': 1841, 'n_tokens_neox': 1706, 'n_words': 874}