From: David M. <Dav...@te...> - 2001-12-08 07:42:13
|
In one case, I am interested in using Jython to dynamically create a = java class at runtime and I would like to explore this with you. The general idea is that I want to dynamically (at runtime) create a = java class that implements a certain interface, then instantiate that = class and call its methods. I'm inventing a contrived example here = because it is hard to explain in a few words the exact application. = Suppose the java interface looks something like (its late so please = avoid syntax:): Interface MyCallInterface: { public int doCall(); } Now I want to generate a new class implementing the above interface, and = with some specific logic in the doCall() method , based on some = properties that occur at runtime (including some user input). The = doCall method has to act on other java objects based on some = configuration data, so normally it would have to do reflection to look = up the method names (configurable) and then call them. But, that is = slower than I want it to be and so is using dynamic proxies. =20 What I would like to do is something like this: 0) I would rather implement an interface than extend and existing java = class if possible. 1) Build a string that contains the class definition (that inherits from = MyCallInterface) and the method code for the doCall() method. 2) Pass that string into jython in some manner so that I get a class = back that I can instantiate the object from. 3) Instantiate the newly defined object. 4) Call its doCall() method repeatedly during program operation until = parameters change, at which point I would generate a new class = definition and get a new object. What I am hoping is that the performance using this approach (after the = initial class compile) would be faster than reflection and dynamic = calls, since they have more overhead than direct method calls. Would my = approach be faster or is there a lot of overhead the jython introduces? Also, I can't see clearly how to do what I want. Could anyone post a = very short but complete hello world type example of how to do this from = within a java program? This has all kinds of neat implications for custom configurators and = dynamic execution policies, but it should be really really fast. Also, I have heard of some code from a GNU or Apache project that would = generate bytecode for classes on the fly (or something like that) and = that is the type of functionality I need (without myself having to = understand the byte code). If the jython approach won't work, can = someone point me to the code I mentioned here? THANKS!! David |