Compilación de código Java en memoria sobre la marcha para Java 5 y Java 6

¿Cómo puedo compilar código Java de una cadena arbitraria (en memoria) en Java 5 y Java 6, cargarlo y ejecutar un método específico en él (predefinido)?

Antes de que llame esto, revisé las implementaciones existentes:

La mayoría confía en la API del compilador Java 6. Aquellos que no lo hacen, confíe en trucos. Sí, revisé commons-jci. O soy demasiado denso para entender cómo funciona, o simplemente no lo hace. No pude encontrar cómo alimentar al compilador mi ruta de clase actual (que es bastante grande).En la implementación que funcionó (en Java 6), no pude encontrar cómo cargar correctamente las clases internas (o clases anónimas internas). Me gustaría que todo estuviera en la memoria, ya que funciona en múltiples entornos.

Estoy seguro de que esto se ha resuelto antes, pero no puedo encontrar nada que se vea ni siquiera a la mitad de la calidad de producción en Google (excepto jci, que, como he dicho antes, no he logrado usar).

Editar

Revisé JavaAssist: necesito clases internas, soporte de nivel de lenguaje Java 5.0 y compilación con todo el classpath. Además, me gustaría crear nuevas clases sobre la marcha. Podría estar equivocado, pero no pude encontrar cómo hacer esto con JavaAssit. Estoy dispuesto a usar una solución basada en el sistema de archivos (llamando a javac) pero no sé cómo adivinar el classpath, ni cómo cargar luego los archivos (que no están en mi classpath) con un cargador de clases especial que puede ser reciclado para múltiples invocaciones. Si bien sé cómo investigarlo, preferiría una solución lista.

Edit2: Por ahora, estoy contento con BeanShell "evaluar". Aparentemente hace todo lo que necesito (obtener una cadena, evaluarla en el contexto de la ruta de clase 'actual'. Echa de menos algunas de las características de Java 5, pero puede usar enumeraciones (no definir) y compiladas 'genéricas' (borradas ) clases, por lo que debería ser suficiente para lo que quiero.

No quiero marcar la respuesta como aceptada todavía, ya que espero que surja una mejor solución.

Edit3: Acepté la sugerencia de beanhell, realmente funciona de maravilla.

Respuestas a la pregunta(6)

Su respuesta a la pregunta