diff options
Diffstat (limited to 'Examples.md')
-rw-r--r-- | Examples.md | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/Examples.md b/Examples.md new file mode 100644 index 00000000..f174546f --- /dev/null +++ b/Examples.md @@ -0,0 +1,204 @@ +How to run program examples +--------------------------- + +JDK 1.4 or later is needed. + +### 0. If you have Apache Ant + +Run the sample-all task. +Otherwise, follow the instructions below. + +### 1. Move to the directory where this Readme.html file is located. + +In the following instructions, we assume that the `javassist.jar` +file is included in the class path. +For example, the javac and java commands must receive +the following `classpath` option: + +``` +-classpath ".:javassist.jar" +``` + +If the operating system is Windows, the path +separator must be not `:` (colon) but +`;` (semicolon). The java command can receive +the `-cp` option +as well as `-classpath`. + +If you don't want to use the class-path option, you can make +`javassist.jar` included in the `CLASSPATH` +environment: + +``` +export CLASSPATH=.:javassist.jar +``` + +or if the operating system is Windows: + +``` +set CLASSPATH=.;javassist.jar +``` + +Otherwise, you can copy `javassist.jar` to the directory +<_java-home_>`/jre/lib/ext`. + + +<_java-home_> depends on the system. It is usually +`/usr/local/java` or `c:\j2sdk1.4\`, etc. + +### 2. `sample/Test.java` + +This is a very simple program using Javassist. + +To run, type the commands: + +``` +% javac sample/Test.java +% java sample.Test +``` + +For more details, see `sample/Test.java` + +### 3. `sample/reflect/*.java` + +This is the "verbose metaobject" example well known in reflective +programming. This program dynamically attaches a metaobject to +a Person object. The metaobject prints a message if a method +is called on the Person object. + +To run, type the commands: + +``` +% javac sample/reflect/*.java +% java javassist.tools.reflect.Loader sample.reflect.Main Joe +``` + +Compare this result with that of the regular execution without reflection: + +``` +% java sample.reflect.Person Joe +``` + +For more details, see sample/reflect/Main.java + +Furthermore, the Person class can be statically modified so that +all the Person objects become reflective without sample.reflect.Main. +To do this, type the commands: + +``` +% java javassist.tools.reflect.Compiler sample.reflect.Person -m sample.reflect.VerboseMetaobj +``` + +Then, + +``` +% java sample.reflect.Person Joe +``` + +### 4. `sample/duplicate/*.java` + +This is another example of reflective programming. +To run, type the commands: + +``` +% javac sample/duplicate/*.java +% java sample.duplicate.Main +``` + +Compare this result with that of the regular execution without reflection: + +``` +% java sample.duplicate.Viewer +``` + +For more details, see +`sample/duplicate/Main.java` + +### 5. `sample/vector/*.java` + +This example shows the use of Javassit for producing a class representing +a vector of a given type at compile time. + +To run, type the commands: + +``` +% javac sample/vector/*.java +% java sample.preproc.Compiler sample/vector/Test.j +% javac sample/vector/Test.java +% java sample.vector.Test +``` + +Note: `javassist.jar` is unnecessary to compile and execute +`sample/vector/Test.java`. +For more details, see +`sample/vector/Test.j` and `sample/vector/VectorAssistant.java`. + +### 6. `sample/rmi/*.java` + +This demonstrates the `javassist.rmi` package. +To run, type the commands: + +``` +% javac sample/rmi/*.java +% java sample.rmi.Counter 5001 +``` + +The second line starts a web server listening to port 5001. + +Then, open sample/rmi/webdemo.html +with a web browser running +on the local host. (`webdemo.html` trys to fetch an applet from +`http://localhost:5001/`, which is the web server we started above.) + +Otherwise, run `sample.rmi.CountApplet` as an application: + +``` +% java javassist.web.Viewer localhost 5001 sample.rmi.CountApplet +``` + +### 7. `sample/evolve/*.java` + +This is a demonstration of the class evolution mechanism implemented +with Javassist. This mechanism enables a Java program to reload an +existing class file under some restriction. + +To run, type the commands: + +``` +% javac sample/evolve/*.java +% java sample.evolve.DemoLoader 5003 +``` + +The second line starts a class loader DemoLoader, which runs a web +server DemoServer listening to port 5003. + +Then, open `http://localhost:5003/demo.html` with a web browser running +on the local host. +(Or, see sample/evolve/start.html.) + +### 8. `sample/hotswap/*.java` + +This shows dynamic class reloading by the JPDA. It needs JDK 1.4 or later. +To run, first type the following commands: + +``` +% cd sample/hotswap +% javac *.java +% cd logging +% javac *.java +% cd .. +``` + +If your Java is 1.4, then type: + +``` +% java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 Test +``` + +If you are using Java 5, then type: + +``` +% java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 Test +``` + +Note that the class path must include `JAVA_HOME/lib/tools.jar`. |