[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-users] lauching applications from another one with load-time weaving
|
Hi Fabio,
to launch an application from another java program it is possible using
either reflection or create another process and execute java command
with Runtime.getRuntime().exec(command);
In both cases you can implement a programmatic version of aspectj
compiler like the follow (as discussed at
http://www.eclipse.org/aspectj/doc/released/devguide/ajc-ref.html):
public class AspectWeaverImpl implements AspectWeaver {
...
public void compile(boolean debug) throws AspectWeavingException {
Main compiler = new Main();
MessageHandler m = new MessageHandler();
// call compiler parameters from XML file
XMLReader xmlp = new XMLReaderImpl(Constants.configFilename);
// call XML parser
Vector v = xmlp.getArray("aj", "compilerParam");
String[] param = Utility.vectorTOString(v);
// call ajc
compiler.run(param, m);
// print compiler verbose infos
if (debug) {
IMessage[] ms = m.getMessages(null, true);
System.out.println("messages: " + Arrays.asList(ms));
}
}
}
At this point you can chose two approaches (more complicated than using
-javaagent but effective):
1) if you want use reflection put "-d" parameter in the compiler
options. This parameter puts generated class files in a destination
directory. Then you can recall your main class instance and invoke main
method.
2) if you want use "Runtime.exec()" command you can insert "-outjar"
parameter in the compile options. This parameter creates a jar file
containing the generated output class file. So firstly you can recall
your personal AspectWeaver (with -outjar option) and then launch the
application (recall the jar file).
regards
Fabio Fagundes Silveira ha scritto:
*Hi Matthew,
Ok ... but how to get this working? I just can get this working if
I type: java -javaagent:xxx Test ... Therefore, I dont know how to
load the other application (e.g. from App1.main) using a separate
class loader ... :-(
** Would you please send me some hints (piece of code)?*
*
Thank you,
Fabio
On Thu, 26 Oct 2006 16:07:14 +0100, Matthew Webster wrote*
> Fabio,
>
> If you are using Java 5 then just use the -javaagent that comes with
AspectJ:
http://www.eclipse.org/aspectj/doc/released/devguide/ltw-agents.html.
You may want to load you test application using a separate class
loader, with it's own classpath. As each class is loaded it will
automatically get passes to AspectJ.
>
> Matthew Webster
> AOSD Project
> Java Technology Centre, MP146
> IBM Hursley Park, Winchester, SO21 2JN, England
> Telephone: +44 196 2816139 (external) 246139 (internal)
> Email: Matthew Webster/UK/IBM @ IBMGB, matthew_webster@xxxxxxxxxx
> http://w3.hursley.ibm.com/~websterm/
>
>
> To aspectj-users@xxxxxxxxxxx
> cc
> Subject [aspectj-users] lauching applications from another one with
load-time weaving
>
>
>
> Hello,
>
> To launch an application from another java program is possible using
> reflection, such as:
>
> Class cls = Class.forName("Test");
> String s[] = new String[] {};
> Object arguments[] = new Object[] { s };
> Method mainMethod = cls.getMethod("main", new Class[] {s.getClass()});
> Object result = mainMethod.invoke(null, arguments);
>
> Ok, but how to do that (ie. launching "Test" application) using
> load-time weaving? I meant, lauching Test and aspects defined to be
> applied to this class in a META-INF/aop.xml file?
>
> I've tried to find out any WeavingAdaptor tutorial or something like
> that ... but I didn't ... :-(
>
> Could you help me? :-)
>
> Regards,
> Fabio
------------------------------------------------------------------------
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users
--
Stalsy
HomePage --:. http://www.stalsy.it
Blog --:. http://blog.stalsy.com
Public Key --:. http://www.stalsy.it/key.php
E-Mail --:. stalsy@xxxxxxxxx
MSN --:. faricci@xxxxxxxx
Skype --:. www.stalsy.it