JDK 1.4 or later is needed.
Run the sample-all task. Otherwise, follow the instructions below.
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.
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
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
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
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
.
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
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.)
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
.