30 06, 2007
Jcreater+MotoJ2SDKµÄÅäÖÃÓëʹÓÃÐĵÃ(ת)
JCreator D:Program FilesXinox SoftwareJCreator LE
motoj2sdk D:Motoj2sdk
JDK D:jdk1.3.1
×¢Ò⣺ҪÏÈ»÷»îÄ£Äâ»·¾³£¬ÔËÐÐD:MotoJ2SDKgenericscripts unConstructor.bat
Ñ¡ÔñÊÖ»úÐͺţ¬Ñ¡ÔñÓïÑÔ£¬Ñ¡Ôñnormal£¬ ÔÙ"´´½¨"¡£
Æô¶¯JcreaterÖ®ºóÎÒµÄÅäÖÃÈçÏ£º
µÚÒ»²½ Ñ¡Ôñ Configure->Options->JDK Profiles
×¢Ò⣺һ¶¨Ð½¨ profile and select ¡°D:jdk1.3.1¡±
½«Ãû×Ö¸ÄΪ¡°J2ME 388¡±
Add classes path ¡°D:Motoj2sdklib¡±
Add documentation path ¡°D:Motoj2sdkdocs¡±
·Ö±ð½«ºó¼ÓµÄÁ½ÐÐÒÆµ½×îÉÏ·½.
µÚ¶þ²½ Ñ¡Ôñ Configure->Options->JDK Tools
Ñ¡ÔñComplier
Ñ¡ÖÐ and edit it.
½« parameters ±äΪ -classpath D:/motoj2sdk/lib $[JavaFiles]
µÚÈý²½
Ñ¡Ôñ Configure->Options->Tools
µã»÷¡°New¡±Ñ¡Ôñ DOS command
Ãû×ÖΪ¡°Preverifier¡±
½« arguments »»Îª d:Motoj2sdkinpreverifier.exe -classpath "d:Motoj2sdklib" -d . .
½« initial directory ±äΪ ¡°$[PrjDir]¡±
µÚ4²½
°´ÉÏÃæµÄ·½·¨ÔÚNewÒ»¸ö DOS command
Ãû×Ö£º¡°Run Emulator¡±
½« arguments »»³É ¡°java -Djava.library.path=d:/MotoJ2SDK/lib -classpath "d:/MotoJ2SDK/bin/Emulator.jar";"d:/MotoJ2SDK/ConfigTool.jar" com.mot.tools.j2me.emulator.Emulator -classpath$[PrjDir];"d:/MotoJ2SDK/lib" -deviceFile d:/MotoJ2SDK/bin/resources/device.props javax.microedition.midlet.AppManager $[CurClass] -JSA 1 1¡±
½« initial directory »»³É ¡°d:Motoj2sdkin¡±
ok!±à¼¹¤¾ßÅäÖÃÍê±Ï£¡
н¨Ò»¸ö¹¤³Ì??Ñ¡ÔñEmpty Project
ÔÙȡһ¸öÃû×Ö ±ÈÈ磺test
Ôòjcreater×Ô¶¯ÔÚÄãµÄ¹¤×÷Ŀ¼ÖÐÉú³ÉĿ¼test
ÔÙnewÒ»¸öfileÑ¡Ôñjava File
дºÃÄãµÄÔ´úÂ룬±£´æ È磺test.java
ÔÚProjectÖÐ Ñ¡add file
È»ºóÑ¡ÖÐÄã¸Õ²ÅµÄtest.java
×¢Ò⣺²»ÒªÓÐpackage ;
±àÒë??¡·toolsÖеÄPreverifier½øÐÐÔ¤ÏÈÉóºË??¡·toolsÖеÄRun Emulator½øÐÐÄ£Äâ
test.java µÄÀý×Ó£º¹¦ÄÜÊDz¶×½¼üÅÌÊäÈëµÄascIIÂð¡£
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class test extends MIDlet implements CommandListener {;
/**
* The screen for this MIDlet
*/
private KeyEventsDemoCanvas myCanvas;
/**
* Reference to current Display
*/
private Display myDisplay;
/**
* Command to make sure soft key is not a key event
*/
private Command okCommand = new Command("OK", Command.OK, 1);
test() {;
myDisplay = Display.getDisplay(this);
myCanvas = new KeyEventsDemoCanvas();
myCanvas.addCommand(okCommand);
myCanvas.setCommandListener(this);
};
/**
* Do nothing if a command is fired
*/
public void commandAction(Command c, Displayable s) {;
};
/**
* Start the MIDlet
*/
protected void startApp() throws MIDletStateChangeException {;
myDisplay.setCurrent(myCanvas);
};
/**
* Pause the MIDlet
*/
protected void pauseApp() {;
};
/**
* Called by the framework before the application is unloaded
*/
protected void destroyApp(boolean unconditional) {;
};
/**
* The screen for this application
*/
class KeyEventsDemoCanvas extends Canvas {;
/**
* Background color (i.e. the color of the screen)
*/
public final int BACKGROUND_COLOR = 0xFFFFFF; // white
/**
* Foreground color (i.e. the color of the rectangles)
*/
public final int FOREGROUND_COLOR = 0x000000; // black
/**
* Last key that was pressed
*/
private int lastKey;
/**
* Paint the screen
*/
public void paint(Graphics g) {;
/*
* Clear the screen
*/
g.setColor(BACKGROUND_COLOR);
g.fillRect(0, 0, getWidth(), getHeight());
/*
* Paint the message
*/
g.setColor(FOREGROUND_COLOR);
g.drawString("Press a key!", 0, 0, Graphics.TOP | Graphics.LEFT);
if (lastKey != 0) {;
g.drawString("Key Code: " + lastKey, 0, g.getFont().getHeight(),
Graphics.TOP | Graphics.LEFT);
try {;
g.drawString("Action: " + getGameAction(lastKey), 0,
2 * g.getFont().getHeight(),
Graphics.TOP | Graphics.LEFT);
g.drawString("Key Name: " + getKeyName(lastKey), 0,
3 * g.getFont().getHeight(),
Graphics.TOP | Graphics.LEFT);
}; catch (Exception e) {;
// ignore since alphabet keys will throw this exception
};
};
};
/**
* Handle key press
*/
public void keyPressed(int keyCode) {;
lastKey = keyCode;
repaint();
};
/**
* Demonstrate keyRepeated events
*/
public void keyRepeated(int keyCode) {;
System.out.println("Key repeated " + keyCode);
};
};
};
30 06, 2007
°²×°J2SE(ת)
°²×°£º
ÔÚLinuxÉϰ²×°J2SE£º
ÔÚSunµÄÍøÕ¾ÓÐÁ½ÖÖ°æ±¾¿É¹©ÏÂÔØ£¬Ò»ÖÖÊÇRedHat RPM shell scriptÐÎʽ£¬Ò»ÖÖÊÇGNUZIP Tar shell scriptÐÎʽ¡£ÔÚ¿ªÊ¼°²ÞÊǰ£¬ÇëÇл»Ê¹ÓÃÕßΪsu¡£
RedHat RPM shell script£º
Ö´ÐÐÏÂÔØµÄµµ°¸£º
Çл»ÖÁ¸Ãµµ°¸µÄĿ¼£¬Ö´ÐÐ:
./j2sdk-1_3_1-linux-i386-rpm.bin
¸Ãµµ°¸ÊÇÒ»¸öshell script£¬ËùÒÔÔÚÖ´ÐÐǰÇëÏÈÈ·¶¨µµ°¸ÓÐÖ´ÐеÄȨÏÞ
chmod +x j2sdk-1_3_1-linux-i386-rpm.bin
»òÖ±½ÓÓÃ
sh j2sdk-1_3_1-linux-i386-rpm.bin
À´Ö´ÐС£
ÔÚ¿´ÍêLicenseµÄÐû¸æáᣬµ±È»ÊÇyes£¬´Ëʱ¾Í»á¿ªÊ¼½âѹËõ£¬Íê³ÉááÔÚÏàͬµÄ·¾¶Ï£¬»á³öÏÖÒ»¸örpmµÄµµ°¸jdk-1.3.1.i386.rpm£¬½Ó×ÅÔÙÖ´ÐУº
rpm -ivh jdk-1.3.1.i386.rpm
¾Í»á½øÐа²×°¡£Èô³ö´íÎóѶϢ£¬ËµÓÐdependenceµÄÎÊÌ⣬Ôò¼ÓÈë --nodepsµÄoption¼´¿É¡£
rpm -ivh jdk-1.3.1.i386.rpm --nodeps
Íê³ÉáᣬJDK±»°²×°ÔÚ/usr/java/jdk1.3.1£¬¼ÇµÃ½«/usr/java/jdk1.3.1/bin¼ÓÈëPATHŶ¡£
GNUZIP Tar shell script£º
Ö´ÐÐÏÂÔØµÄµµ°¸£º
Çл»ÖÁ¸Ãµµ°¸µÄĿ¼£¬ÔÚÖ´ÐиóÌʽ֮ǰ£¬ÇëÏȾö¶¨Òª½«JDK°²×°ÔÚʲ÷áµØ·½£¬ÒòΪִÐиÃshell scriptáᣬ»á½«jdk1.3.1°²×°ÔÚÖ´Ðа²×°µÄ·¾¶Ï¡£
ËùÒÔÇëÏȾö¶¨ËùÒÔÒª°²×°µÄ·¾¶£¬½«j2sdk-1_3_1-linux-i386.bin°áµ½¸ÃĿ¼Ï£¬Ö´ÐУº
./j2sdk-1_3_1-linux-i386.bin
Ò»ÑùÇëÏÈÈ·¶¨¸Ãµµ°¸ÊÇ·ñÓÐÖ´ÐеÄȨÏÞ¡£
¿´ÍêLicenseáᣬһÑùÊÇkeyÈëyes£¬Ôò¿ªÊ¼½âѹËõ£¬Íê³ÉááÔÙ¸öĿ¼»á¶àÁËÒ»¸öjdk1.3.1µÄĿ¼£¬¼´°²×°Íê³É¡£Ò»Ñù¼ÇµÃ½«jdk1.3.1ϵÄbin¼ÓÈëPATH¡£
ÔÚWindowsÉϰ²×°J2SE£º
windowsµÄJDK°²×°ºÜ¼òµ¥£¬Ö»ÒªÖ´ÐÐÏÂÔØµÄµµ°¸£¬²¢Ëæ×Åָʾ¼´¿ÉÍê³É£¬Ôڴ˲»¶à¼Ó׸Êö¡£
J2SEµÄĿ¼¼Ü¹¹(ÒÔwindowsΪÀý)£º
°²×°ÍêáᣬĿ¼µÄ½á¹¹Èç×ó£º
jdk1.3.1Ϊ°²×°µÄ¸ùĿ¼£¬
ÒÔÏÂÕë¶ÔÒ»Ð©ÖØÒªµÄĿ¼×÷½éÉÜ£º
jdk1.3.1in£º
ÕâÀï·ÅÖõͼÊÇ¿ª·¢ÕßËùÐèÒªµÄ¹¤¾ß£¬¶¼ÊÇ¿ÉÖ´Ðеµ£¬ÀýÈ磺java¡¢javac¡¢javah¡¢rmic¡¢rmiregistryµÈµÈ£¬ËùÒÔ×îºÃ½«Ö»Â·¾¶¼ÓÈëPATH¡£
jdk1.3.1lib£º
¿ª·¢¹¤¾ßËùÐèÒªµÄµµ°¸£¬ÀýÈ磺tools.jar£¬dt.jar£¬¶øjdk1.3.1»¹½«htmlconverter.jarÒ²·Å½øÀ´£¬¿ÉÒÔ²»ÓÃÔÚ·Ö¿ªÏÂÔØ¡£
jdk1.3.1jre£º
¹ËÃû˼Ò壬¾ÍÊÇruntimeµÄ¸ùĿ¼£¬ÔÚÖ´ÐÐjava³Ìʽʱ£¬¿É´ÓϵͳµÄproperty--java.home£¬µÃµ½¸Ã·¾¶¡£
jdk1.3.1jrelib£º
librariesºÍ¹¤¾ßËùÐèÒªµÄµµ°¸£¬ÓÐһЩ¿ÉÖ´Ðеµ£¬Ò»Ð©dllµµ¡£
jdk1.3.1jreinclassic£º
Java 2 Classic Virtual MachinenËùʹÓõÄdllµµ¡£
jdk1.3.1jreinhotspot£º
Java HotSpotTM Client Virtual MachineËùʹÓõÄdllµµ¡£
jdk1.3.1jrelib£º
Ö÷Òªjava runtime environmentËùÐèÒªµÄlibrary¡¢property¡¢ºÍresources¶¼·ÅÔÚÕâÀï¡£
jdk1.3.1jrelibext£º
ºÍÀ©³ä»úÖÆÓйأ¬·ÅһЩ¶îÍâpackageµÄjarµµ£¬»òhelperµÄjarµµ¡£·Åµ½ÕâÀïµÄjarµµ£¬µ±Ö´ÐÐjavaÊ®ËäȻûÓмÓÈëCLASSPATH£¬Ò»Ñù¿É±»ÕÒµ½¡£
jdk1.3.1jrelibsecurity£º
´æ·ÅSecurity ManagerËùʹÓõĵµ°¸£¬ÀýÈ磺java.policy£¬java.security¡£
°²×°ááµÄÉ趨£º
É趨PATH£º
ÏȽ« [JDK root]in¼ÓÈëPATH£¬Èç´ËÒ»À´£¬ÔÚÃüÁîÁÐÖ±½Ó´òjava¾ÍÄÜÖ´ÐÐjavaµÄ³ÌʽÁË¡£ÒòΪ֮ǰ˵¹ý£¬ÔÚbinÕâ¸öĿ¼Ï·ŵľÍÊÇ¿ª·¢ÕâÓõŤ¾ß£¬ÀýÈ磺java¡¢javac¡¢javadoc¡¢javah¡¢rmicµÈµÈ¡£
É趨CLASSPATH£º
Õâ¸öÉ趨ÊÇÓÃÔÚµ±Ö´ÐÐjavaµÄ³Ìʽʱ£¬VMҪȥÄÄÀïÕÒËùÒªÖ´ÐеÄclass£¬»ò³ÌʽÖÐÓõ½µÄclass£¬µÈһϻá˵Ã÷java VMѰÕÒclassµÄ»úÖÆ¡£
ËùÒÔÈç¹ûÄãÓÐһЩclassÊǾ³£ÒªÓõ½µÄ£¬»òÊÇÖ´ÐÐij¸ö³Ìʽ±ØÐëÒªÓõ½ÆäËûµÄclassʱ£¬ÔòÒªÈÃjava VM¿ÉÒÔÕÒµ½ËùÒªÒýÓõÄclass£¬×î¼òµ¥µÄ·½Ê½Êǽ«¸ÃclassдÈëCLASSPATHÖС£ÁíÍ⣬CLASSPATHͨ³£¶¼»áÉè . (¼´Ä¿Ç°Â·¾¶)£¬ÒÔ¼° ../ (Ö´Ðз¾¶µÄÉÏÒ»²ã)£¬´ËÍ⣬windowsµÄ·Ö¸ô·ûºÅΪ·ÖºÅ(£»)£¬linuxÉÏÔòΪïºÅ(£º)¡£
ÀýÈ磺
ÔÚwindowsµÄ»·¾³Ï£º
set CLASSPATH=.;../;c:MyClass.class;c:MyJar.jar
»ù±¾¹ÛÄîµÄ½éÉÜ£º
javaΪÎï¼þµ¼ÏòµÄ³ÌʽÓïÑÔ£¬¶ÔjavaÀ´Ëµ£¬ÎÒÃÇдµÄÒ»Ö§³Ìʽ£¬ÖÁÉÙ¾ÍÊÇÒ»¸öÒÔÉϵÄclass(Òâ˼ÀàËÆì¶Àà±ð£¬ÒÔÏÂÎÒÃÇ»¹ÊÇ»áÖ±½Óдclass)£¬¶øclassºÍclass¿ÉÒÔ»¥Ïà¼Ì³Ð»òÊÇÒýÓÃ(¼ÙʹËùÒªÒýÓûòÊǼ̳еÄclass²¢Ã»Óжà¼ÓÏÞÖÆµÄ»°)£¬¶øJava Platform½«classes´ó¸Å·ÖΪÈý´óÀ࣬
Bootstrap classes£º
¾ÍÊǹ¹³ÉÖ÷ÒªJava PlatformµÄ»ù±¾classes£¬°üº¬ÔÚrt.jarºÍi18n.jarÕâÁ½¸öjarµµÀ·ÅÔÚ[JDK root]jrelibĿ¼Ï¡£Ö»ÒªÖ´ÐÐjava£¬ÕâЩclasses¿ÉÒÔ×Ô¶¯±»ÕÒµ½¡£
Extension classes£º
¾ÍÊÇÔÚ[JDK root]jrelibextÏ£¬ËùÓÐ.jarµÄµµ°¸£¬ËùνµÄjarµµ£¬Æäʵ¾ÍÊÇÒ»´ó¶ÑclassesµÄ¼¯ºÏ£¬ÓÃjavaÌṩµÄtool---jar£¬½«ºÜ¶àµÄclassѹËõ³ÉÒ»¸ö.jarµÄµµ°¸¡£¹ã·ºÀ´Ëµ£¬ÆäʵjarÊÇÒ»¸öѹËõ¹¤¾ß£¬ËùÒÔ.jarÀﻹ¿ÉÒÔ·ÅÖÃÆäËûµÄµµ°¸£¬»òÊdzÌʽִÐÐʱËùÐèÒªµÄresources£¬ÀýÈ磺ͼÐεµ£¬´¿ÎÄ×Öµµ£¬É趨µµµÈµÈ¡£
¶ø·ÅÔÚ[JDK root]jrelibextϵÄjarµµ£¬Java VMÔÚÖ´ÐÐʱҲ»á×Ô¶¯ÕÒµ½¡£
(´Ë¼´ËùνµÄExtension Mechanism¡£)
User classes£º
¿ª·¢Õß»òÊÇÒ»°ãʹÓÃÕߣ¬ËùÒªÓõÄclasses£¬ÒªJava VMÕÒµ½ÕâЩclassesÓÐÁ½ÖÖ·½Ê½£¬
½«ËùÒªÓõÄclasses¼ÓÈë»·¾³±äÊýCLASSPATHÖС£
ÔÚÖ´ÐгÌʽµÄcommand line¶à¼ÓÈë²ÎÊý -classpath À´Ö¸¶¨ÆäËûµÄclasses¡£ÀýÈçÒªÖ´ÐÐMyClass.classʱ£¬ÒªÓõ½YourClass.class£¬ÎÒ½«YourClass.class·ÅÔÚc:otherclassesÏ£¬¶øMyClass.class·ÅÔÚc:myclassesÏ£¬ÔòÖ´ÐÐʱÏÂÒÔϵÄÖ¸Áî¼´¿É£º
java -classpath c:otherclasses c:myclassesMyClass
ËùÒÔµ±ÐÂдÁËÒ»¸öclass£¬ÓÃjavac±àÒëÍêáᣬÓÃjavaÖ´ÐÐʱ£¬³öÏÖClassNotFountExceptionʱ£¬¼´ËµÃ÷ÄãÒªÖ´ÐеÄclass£¬»òÊÇÒýÓõÄclass£¬Java VMÔÚÒÔÉÏÈýÀàÖÐclassesÖÐûÓÐÕÒµ½¡£½â¾öµÄ·½Ê½¾ÍÊǽ«ËùÒªÓõ½µÄclasses¼ÓÈëµÚ¶þºÍµÚÈýÀàµÄclassesÖУ¬ÔÚÖ´ÐÐÒ»´Î¼´¿É¡£
¼òµ¥µÄÀý£º
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!!");
}
}
Ëæ±ã´ò¿ªÒ»¸öÎÄ×Ö±à¼Æ÷£¬½«ÒÔÉϵijÌʽ²¢ÌùÉÏ£¬½«¸Ãµµ°¸´æ³ÉHelloWorld.java£¬×¢Òâ´óСд¶ÔjavaÀ´ËµÊÇÓвî±ðµÄ£¬´¢´æÍê±Ïááµ½consoleÏ£¬Çл»Â·¾¶µ½´æ·Åµµ°¸µÄĿ¼Ï£¬Ö´ÐУº
javac HelloWorld.java
ÔòÔÚÏàͬµÄ·¾¶Ï»á²úÉúÒ»¸öHelloWorld.classµÄµµ°¸£¬¼´ËùνµÄclassµµ£¬½Ó×ÅÔÚÖ´ÐУº
java HelloWorld
Ôò»áÔÚconsoleÊä³ö"Hello World!!"µÄ×Ö´®¡£ÈôÓÐÎÊÌ⣬²Î¿¼°²×°ááµÄÉ趨£¬ÒÔ¼°»ù±¾¹ÛÄîÁ½½Ú¡£
Jar ToolµÄ»ù±¾Ó÷¨£º
jarÊÇÓÃÀ´½«ºÜ¶àclasses°ü³ÉÒ»¸öjarµµµÄѹËõ¹¤¾ß£¬¼´»ù±¾ÔÀíºÍzipÏ൱£¬ËùÒÔÓÃÀ´½âzipµµµÄ½âѹËù¹¤¾ß£¬Ò»Ñù¿ÉÒÔ½«jarµµ½â¿ª¡£jarµÄÖ÷ҪĿµÄÊÇѹËõclasses£¬¼ÓËÙÍøÂ·ÏÂÔØÊ±¼ä¡£»ù±¾Ó÷¨£º
½«classesµµ°¸Ñ¹Ëõ
jar cvf MyJar.jar c:myclasses*.class
c --- create jar file £¬Ñ¹Ëõµµ°¸£¬²úÉújarµµ¡£
v --- verbose
f --- Ö¸¶¨µµ°¸Ãû³Æ
ÉÏÒ»¸öÖ¸ÁîµÄÒâ˼Êǽ«c:myclassesÏÂËùÓеÄclassµµ£¬°ü³ÉMyJar.jarµµ£¬²¢ÔÚ´¦ÀíµÄ¹ý³ÌÖÐÐãѶϢµ½console¡£
½«jarµµ½â¿ª£º
jar xvf MyJar.jar
x --- ½âѹËõ
v --- verbose
f --- Ö¸¶¨µµ°¸Ãû³Æ
ÉÏÒ»¸öÖ¸ÁîÊǽ«MyJar.jar½â¿ªµ½ÏÖÔÚµÄĿ¼¡£
jar tf MyJar.jar
t --- ¼ìÊÓJarµµÄÚÈÝ
f --- Ö¸¶¨µµ°¸Ãû³Æ
ÉÏÒ»¸öÖ¸Áî¼´¼ìÊÓMyJar.jarÀïµÄµµ°¸¡£
30 06, 2007
J2SE 1.4 ÖÐassertion ¹¦ÄܽéÉÜ(ת)
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
30 06, 2007
J2SE 1.5°æ±¾µÄÐÂÌØÐÔÒ»ÀÀ(ת)
¡¡¡¡µ±1.4.1£¨¿ª·¢´úºÅ¡°Hopper¡±£©ÔÚ2002Äê9Ô·¢²¼ÒÔ¼°ËüµÄºóÐø°æ±¾1.4.2£¨¿ª·¢´úºÅ¡°Mantis¡±£©ÔÚ2003Äê1ÔÂÈçÆÚ·¢²¼µÄʱºò£¬ÒѾÐÞ¸´Á˳¬¹ý4000¸öµÄbug£¬²¢ÇÒ»¹ÔÚ¼ÌÐøµÄÐÞ¸´ÖС£
¡¡¡¡ÔÚJ2SE1.5µÄÐÂÌØÐÔÖУ¬½«Ìí¼ÓһЩÖÚÈËÆÚ´ýÒѾõŦÄÜ£¬±ÈÈç¶ÔItenium CPUµÄÍêȫ֧³Ö£»SwingµÄÓû§½«¿´µ½Á½¸öȫеÄÄÚ½¨Look & Feels£¬Ò»¸öÊÇWindows XP·ç¸ñ£¬Ò»¸öGTK·ç¸ñ£»Í¬Ê±Æô¶¯Ê±¼äÉÏÒ²ÓиĽø¡£
¡¡¡¡ÔÚ·þÎñÆ÷¶ËµÄÔöÇ¿Ö÷Òª°üº¬ÁËÁ½¸öÐÂÔöµÄGC£¬Ò»¸ö²¢Ðбê¼ÇÇåɨËã·¨£¨concurrent mark and sweep algorithm£©ºÍÀàËÆÄêÇá¿Õ¼äÊÕ¼¯£¨parallel young space collector£©¡£ÕâÁ½¸öеÄGCÄÜͨ¹ý±àÒëµÄ²ÎÊýÀ´µ÷Óãº-XX:+UseConcMarkSweepGC ºÍ -XX:+UseParallelGC¡£
¡¡¡¡½ÓÏÂÀ´£¬ÈçºÎÔËÓÃÕâЩ²ÎÊýÀ´µ÷ÕûϵͳµÄ×î¼ÑÐÔÄܾÍÊÇÎÒÃÇÔÚJ2SE1.5ÖÐÐèҪѧϰºÍÀí½âµÄÁË¡£
¡¡¡¡J2SE 1.5 Release
¡¡¡¡J2SE 1.5£¨¿ª·¢´úºÅ¡°Tiger¡±£©ÊÇJavaƽ̨ºÍÓïÑÔÉϵÄÒ»¸öÖØÒªÐ޸ģ¬Ä¿Ç°Ö÷Òª°üÀ¨ÁË15¸öJSRµÄÇëÇóºÍÆäËûһЩÀàËÆµÄ¸üС£Õâ´ÎµÄReleaseÖ÷Òª¹Ø×¢ÓÚ¼¸¸ö¹Ø¼üµÄÖ÷Ì⣺Ö÷ÒªÊÇÆ·ÖÊ£¬¼àÊӺ͹ÜÀí£¬ÐÔÄܺͿÉÀ©Õ¹ÐÔ£¬ÇáËɵĿª·¢ÒÔ¼°×ÀÃæ¿Í»§¶Ë¡£
¡¡¡¡Ease of Development£¨ÇáËɵĿª·¢£©
¡¡¡¡Äã¿ÉÄÜÒѾÌýµ½¹ýÁ˹ØÓÚ¼õÇῪ·¢ÄѶȶø×öµÄJavaÓïÑÔÉϵÄÐ޸ġ£Õâ´ÎJ2SE¸ù¾ÝJSRµÄÒªÇóʵÏÖÒÔϼ¸¸öJSR£ºJSR 201 °üº¬ÁË4¸öÐ޸ģ»JSR 175µÄºËÐÄÊÇÖ§³ÖÔªÊý¾Ý£¨metadata£©£¬¶øJSR 14Ôò¹æ·¶ÁË·ºÐÍ¡£
¡¡¡¡ÔªÊý¾Ý¹¦ÄÜÌṩÁËÉùÃ÷ʽµÄ¿ª·¢£¬²¢ÇÒÈ¡´úÁËһЩ¹¤¾ßµÄ´úÂëÉú³ÉºÍά»¤¹¦ÄÜ¡£·ºÐÍÌáÉýÁËÎÞÐèÊÖ¶¯×ªÐÍ£¨manual casting£©µÄ´úÂ븴Óã¬Í¨³£manual casting¶¼»á´øÀ´ÀàÐͰ²È«ÐÔÉϵÄһЩÎÊÌâ¡£
30 06, 2007
ѧϰJ2SE¹ý³ÌÖеÄ30¸ö»ù±¾¸ÅÄî(ת)
¡¡¡¡Ä¿Ç°JavaÖ÷ÒªÓ¦ÓÃÓÚÖмä¼þµÄ¿ª·¢(middleware)---´¦Àí¿Í»§»úÓÚ·þÎñÆ÷Ö®¼äµÄͨÐż¼Êõ,ÔçÆÚµÄʵ¼ùÖ¤Ã÷,Java²»ÊʺÏpcÓ¦ÓóÌÐòµÄ¿ª·¢,Æä·¢Õ¹Öð½¥±ä³ÉÔÚ¿ª·¢ÊÖ³ÖÉ豸,»¥ÁªÍøÐÅÏ¢Õ¾,¼°³µÔؼÆËã»úµÄ¿ª·¢.JavaÓÚÆäËûÓïÑÔËù²»Í¬µÄÊdzÌÐòÔËÐÐʱÌṩÁËÆ½Ì¨µÄ¶ÀÁ¢ÐÔ,³ÆÐí¿ÉÒÔÔÚwindows,solaris,linuxÆäËû²Ù×÷ϵͳÉÏʹÓÃÍêÈ«ÏàͬµÄ´úÂë.JavaµÄÓï·¨ÓëC++Óï·¨ÀàËÆ,C++/C³ÌÐòÔ±ºÜÈÝÒ×ÕÆÎÕ,¶øÇÒJavaÊÇÍêÈ«µÄ³¹µ×µÄÃæÏò¶ÔÏóµÄ,ÆäÖÐÌá³öÁ˺ܺõÄGC(GarbageCollector)À¬»ø´¦Àí»úÖÆ,·ÀÖ¹ÄÚ´æÒç³ö.
¡¡¡¡JavaµÄ°×ƤÊéΪÎÒÃÇÌá³öÁËJavaÓïÑÔµÄ11¸ö¹Ø¼üÌØÐÔ.
¡¡¡¡(1)Easy:JavaµÄÓï·¨±ÈC++µÄÏà¶Ô¼òµ¥,ÁíÒ»¸ö·½Ãæ¾ÍÊÇJavaÄÜʹÈí¼þÔÚºÜСµÄ»úÆ÷ÉÏÔËÐÐ,»ù´¡½âÊÍÆäºÍÀà¿âµÄÖ§³ÖµÄ´óСԼΪ40kb,Ôö¼Ó»ù±¾µÄ±ê×¼¿âºÍÏß³ÌÖ§³ÖµÄÄÚ´æÐèÒªÔö¼Ó125kb.
¡¡¡¡(2)·Ö²¼Ê½:Java´øÓкÜÇ¿´óµÄTCP/IPÐÒé×åµÄÀý³Ì¿â,JavaÓ¦ÓóÌÐòÄܹ»Í¨¹ýURLÀ´´©¹ýÍøÂçÀ´·ÃÎÊÔ¶³Ì¶ÔÏó,ÓÉÓÚservlet»úÖÆµÄ³öÏÖ,ʹJava±à³Ì·Ç³£µÄ¸ßЧ,ÏÖÔÚÐí¶àµÄ´óµÄwebserver¶¼Ö§³Öservlet.
¡¡¡¡(3)OO:ÃæÏò¶ÔÏóÉè¼ÆÊǰÑÖØµã·ÅÔÚ¶ÔÏó¼°¶ÔÏóµÄ½Ó¿ÚÉϵÄÒ»¸ö±à³Ì¼¼Êõ.ÆäÃæÏò¶ÔÏóºÍC++Óкܶ಻ͬ,ÔÚÓë¶àÖØ¼Ì³ÐµÄ´¦Àí¼°JavaµÄÔÀàÄ£ÐÍ.
¡¡¡¡(4)½¡×³ÌØÐÔ:Java²ÉÈ¡ÁËÒ»¸ö°²È«Ö¸ÕëÄ£ÐÍ,ÄܼõÐ¡ÖØÐ´ÄÚ´æºÍÊý¾Ý±ÀÀ£µÄ¿ÉÄÜÐÍ
¡¡¡¡(5)°²È«:JavaÓÃÀ´Éè¼ÆÍøÂ·ºÍ·Ö²¼ÏµÍ³,Õâ´øÀ´ÁËÐµİ²È«ÎÊÌâ,Java¿ÉÒÔÓÃÀ´¹¹½¨·À²¡¶¾ºÍ·À¹¥»÷µÄSystem.ÊÂʵ֤Ã÷JavaÔÚ·À¶¾ÕâÒ»·½Ãæ×öµÄ±È½ÏºÃ.
¡¡¡¡(6)ÖÐÁ¢Ìåϵ½á¹¹:Java±àÒëÆäÉú³ÉÌåϵ½á¹¹ÖÐÁ¢µÄÄ¿±êÎļþ¸ñʽ¿ÉÒÔÔںܶദÀíÆ÷ÉÏÖ´ÐÐ,±àÒëÆ÷²úÉúµÄÖ¸Áî×Ö½ÚÂë(Javabytecode)ʵÏÖ´ËÌØÐÔ,´Ë×Ö½ÚÂë¿ÉÒÔÔÚÈκλúÆ÷ÉϽâÊÍÖ´ÐÐ.
¡¡¡¡(7)¿ÉÒÆÖ²ÐÔ:JavaÖжԻù±¾Êý¾Ý½á¹¹ÀàÐ͵ĴóСºÍËã·¨¶¼ÓÐÑϸñµÄ¹æ¶¨ËùÒÔ¿ÉÒÆÖ²ÐԺܺÃ.
¡¡¡¡(8)¶àÏß³Ì:Java´¦Àí¶àÏ̵߳Ĺý³ÌºÜ¼òµ¥,Java°Ñ¶àÏß³ÌʵÏÖ½»¸øµ×ϲÙ×÷ϵͳ»òÏ̳߳ÌÐòÍê³É.ËùÒÔ¶àÏß³ÌÊÇJava×÷Ϊ·þÎñÆ÷¶Ë¿ª·¢ÓïÑÔµÄÁ÷ÐÐÔÒòÖ®Ò»
¡¡¡¡(9)AppletºÍservlet:Äܹ»ÔÚÍøÒ³ÉÏÖ´ÐеijÌÐò½ÐApplet,ÐèÒªÖ§³ÖJavaµÄä¯ÀÀÆ÷ºÜ¶à,¶øappletÖ§³Ö¶¯Ì¬µÄÍøÒ³,ÕâÊǺܶàÆäËûÓïÑÔËù²»ÄÜ×öµ½µÄ.
¡¡»ù±¾¸ÅÄî:
¡¡¡¡1.OOPÖÐΨһ¹ØÏµµÄÊǶÔÏóµÄ½Ó¿ÚÊÇʲô,¾ÍÏñ¼ÆËã»úµÄÏúÊÛÉÌËý²»¹ÜµçÔ´ÄÚ²¿½á¹¹ÊÇÔõÑùµÄ,ËûÖ»¹ØÏµÄÜ·ñ¸øÄãÌṩµç¾ÍÐÐÁË,Ò²¾ÍÊÇÖ»ÒªÖªµÀcanornot¶ø²»ÊÇhowandwhy.ËùÓеijÌÐòÊÇÓÉÒ»¶¨µÄÊôÐÔºÍÐÐΪ¶ÔÏó×é³ÉµÄ,²»Í¬µÄ¶ÔÏóµÄ·ÃÎÊͨ¹ýº¯Êýµ÷ÓÃÀ´Íê³É,¶ÔÏó¼äËùÓеĽ»Á÷¶¼ÊÇͨ¹ý·½·¨µ÷ÓÃ,ͨ¹ý¶Ô·â×°¶ÔÏóÊý¾Ý,ºÜ´óÏÞ¶ÈÉÏÌá¸ß¸´ÓÃÂÊ.
¡¡¡¡2.OOPÖÐ×îÖØÒªµÄ˼ÏëÊÇÀà,ÀàÊÇÄ£°åÊÇÀ¶Í¼,´ÓÀàÖй¹ÔìÒ»¸ö¶ÔÏó,¼´´´½¨ÁËÕâ¸öÀàµÄÒ»¸öʵÀý(instance)
¡¡¡¡3.·â×°:¾ÍÊǰÑÊý¾ÝºÍÐÐΪ½áºÏÆðÔÚÒ»¸ö°üÖÐ)²¢¶Ô¶ÔÏóʹÓÃÕßÒþ²ØÊý¾ÝµÄʵÏÖ¹ý³Ì,Ò»¸ö¶ÔÏóÖеÄÊý¾Ý½ÐËûµÄʵÀý×Ö¶Î(instancefield)
¡¡¡¡4.ͨ¹ýÀ©Õ¹Ò»¸öÀàÀ´»ñµÃÒ»¸öÐÂÀà½Ð¼Ì³Ð(inheritance),¶øËùÓеÄÀà¶¼ÊÇÓÉObject¸ù³¬ÀàÀ©Õ¹¶øµÃ,¸ù³¬ÀàÏÂÎÄ»á×ö½éÉÜ.
¡¡¡¡5.¶ÔÏóµÄ3¸öÖ÷ÒªÌØÐÔ
¡¡¡¡behavior---˵Ã÷Õâ¸ö¶ÔÏóÄÜ×öʲô.
¡¡¡¡state---µ±¶ÔÏóÊ©¼Ó·½·¨Ê±¶ÔÏóµÄ·´Ó³.
¡¡¡¡identity---ÓëÆäËûÏàËÆÐÐΪ¶ÔÏóµÄÇø·Ö±êÖ¾.
¡¡¡¡Ã¿¸ö¶ÔÏóÓÐΨһµÄindentity¶øÕâ3ÕßÖ®¼äÏ໥ӰÏì.
¡¡¡¡6.ÀàÖ®¼äµÄ¹ØÏµ:
¡¡¡¡use-a:ÒÀÀµ¹ØÏµ
¡¡¡¡has-a:¾ÛºÏ¹ØÏµ
¡¡¡¡is-a:¼Ì³Ð¹ØÏµ--Àý:AÀà¼Ì³ÐÁËBÀà,´ËʱAÀ಻½öÓÐÁËBÀàµÄ·½·¨,»¹ÓÐÆä×Ô¼ºµÄ·½·¨.(¸öÐÔ´æÔÚÓÚ¹²ÐÔÖÐ)
¡¡¡¡7.¹¹Ôì¶ÔÏóʹÓù¹ÔìÆ÷:¹¹ÔìÆ÷µÄÌá³ö,¹¹ÔìÆ÷ÊÇÒ»ÖÖÌØÊâµÄ·½·¨,¹¹Ôì¶ÔÏó²¢¶ÔÆä³õʼ»¯.
¡¡¡¡Àý:DataÀàµÄ¹¹ÔìÆ÷½ÐData
¡¡¡¡newData()---¹¹ÔìÒ»¸öжÔÏó,ÇÒ³õʼ»¯µ±Ç°Ê±¼ä.
¡¡¡¡Datahappyday=newData()---°ÑÒ»¸ö¶ÔÏó¸³Öµ¸øÒ»¸ö±äÁ¿happyday,´Ó¶øÊ¹¸Ã¶ÔÏóÄܹ»¶à´ÎʹÓÃ,´Ë´¦ÒªÉùÃ÷µÄʹ±äÁ¿Óë¶ÔÏó±äÁ¿¶þÕßÊDz»Í¬µÄ.new·µ»ØµÄÖµÊÇÒ»¸öÒýÓÃ.
¡¡¡¡¹¹ÔìÆ÷ÌØµã:¹¹ÔìÆ÷¿ÉÒÔÓÐ0¸ö,Ò»¸ö»ò¶à¸ö²ÎÊý
¡¡¡¡¹¹ÔìÆ÷ºÍÀàÓÐÏàͬµÄÃû×Ö
¡¡¡¡Ò»¸öÀà¿ÉÒÔÓжà¸ö¹¹ÔìÆ÷
¡¡¡¡¹¹ÔìÆ÷ûÓзµ»ØÖµ
¡¡¡¡¹¹ÔìÆ÷×ÜÊǺÍnewÔËËã·ûÒ»ÆðʹÓÃ.
¡¡¡¡8.ÖØÔØ:µ±¶à¸ö·½·¨¾ßÓÐÏàͬµÄÃû×Ö¶øº¬Óв»Í¬µÄ²ÎÊýʱ,±ã·¢ÉúÖØÔØ.±àÒëÆ÷±ØÐëÌôÑ¡³öµ÷ÓÃÄĸö·½·¨.
¡¡¡¡9.°ü(package)JavaÔÊÐí°ÑÒ»¸ö»ò¶à¸öÀàÊÕ¼¯ÔÚÒ»Æð³ÉΪһ×é,³Æ×÷°ü,ÒÔ±ãÓÚ×éÖ¯ÈÎÎñ,±ê×¼Java¿â·ÖΪÐí¶à°ü.java.langjava.utiljava,netµÈ,°üÊÇ·Ö²ã´ÎµÄËùÓеÄjava°ü¶¼ÔÚjavaºÍjavax°ü²ã´ÎÄÚ.
¡¡¡¡10.¼Ì³Ð˼Ïë:ÔÊÐíÔÚÒѾ´æÔÚµÄÀàµÄ»ù´¡ÉϹ¹½¨ÐµÄÀà,µ±Äã¼Ì³ÐÒ»¸öÒѾ´æÔÚµÄÀàʱ,ÄÇôÄã¾Í¸´ÓÃÁËÕâ¸öÀàµÄ·½·¨ºÍ×Ö¶Î,ͬʱÄã¿ÉÒÔÔÚÐÂÀàÖÐÌí¼ÓÐµķ½·¨ºÍ×Ö¶Î.
¡¡11.À©Õ¹Àà:À©Õ¹Àà³ä·ÖÌåÏÖÁËis-aµÄ¼Ì³Ð¹ØÏµ.ÐÎʽΪ:class(×ÓÀà)extends(»ùÀà).
¡¡¡¡12.¶à̬:ÔÚjavaÖÐ,¶ÔÏó±äÁ¿ÊǶà̬µÄ.¶øjavaÖв»Ö§³Ö¶àÖØ¼Ì³Ð.
¡¡¡¡13.¶¯Ì¬°ó¶¨:µ÷ÓöÔÏó·½·¨µÄ»úÖÆ.
¡¡¡¡(1)±àÒëÆ÷¼ì²é¶ÔÏóÉùÃ÷µÄÀàÐͺͷ½·¨Ãû.
¡¡¡¡(2)±àÒëÆ÷¼ì²é·½·¨µ÷ÓõIJÎÊýÀàÐÍ.
¡¡¡¡(3)¾²Ì¬°ó¶¨:Èô·½·¨ÀàÐÍΪpriavtestaticfinal±àÒëÆ÷»á׼ȷ֪µÀ¸Ãµ÷ÓÃÄĸö·½·¨.
¡¡¡¡(4)µ±³ÌÐòÔËÐв¢ÇÒʹÓö¯Ì¬°ó¶¨À´µ÷ÓÃÒ»¸ö·½·¨Ê±,ÄÇôÐéÄâ»ú±ØÐëµ÷ÓÃxËùÖ¸ÏòµÄ¶ÔÏóµÄʵ¼ÊÀàÐÍÏàÆ¥ÅäµÄ·½·¨°æ±¾.
¡¡¡¡(5)¶¯Ì¬°ó¶¨:ÊǺÜÖØÒªµÄÌØÐÔ,ËüÄÜʹ³ÌÐò±äµÃ¿ÉÀ©Õ¹¶ø²»ÐèÒªÖØ±àÒëÒÑ´æ´úÂë.
¡¡¡¡14.finalÀà:Ϊ·ÀÖ¹ËûÈË´ÓÄãµÄÀàÉÏÅÉÉúÐÂÀà,´ËÀàÊDz»¿ÉÀ©Õ¹µÄ.
¡¡¡¡15.¶¯Ì¬µ÷ÓñȾ²Ì¬µ÷Óû¨·ÑµÄʱ¼äÒª³¤.
¡¡¡¡16.³éÏóÀà:¹æ¶¨Ò»¸ö»ò¶à¸ö³éÏó·½·¨µÄÀà±¾Éí±ØÐ붨ÒåΪabstract
¡¡¡¡Àý:publicabstractstringgetDescripition
¡¡¡¡17.JavaÖеÄÿһ¸öÀà¶¼ÊÇ´ÓObjectÀàÀ©Õ¹¶øÀ´µÄ.
¡¡¡¡18.objectÀàÖеÄequalºÍtoString·½·¨.
¡¡¡¡equalÓÃÓÚ²âÊÔÒ»¸ö¶ÔÏóÊÇ·ñͬÁíÒ»¸ö¶ÔÏóÏàµÈ.
¡¡¡¡toString·µ»ØÒ»¸ö´ú±í¸Ã¶ÔÏóµÄ×Ö·û´®,¼¸ºõÿһ¸öÀà¶¼»áÖØÔØ¸Ã·½·¨,ÒԱ㷵»Øµ±Ç°×´Ì¬µÄÕýÈ·±íʾ.
¡¡¡¡(toString·½·¨ÊÇÒ»¸öºÜÖØÒªµÄ·½·¨)
¡¡¡¡19.ͨÓñà³Ì:ÈκÎÀàÀàÐ͵ÄËùÓÐÖµ¶¼¿ÉÒÔͬobjectÀàÐԵıäÁ¿À´´úÌæ.
¡¡¡¡20.Êý×éÁбí:ArrayList¶¯Ì¬Êý×éÁбí,ÊÇÒ»¸öÀà¿â,¶¨ÒåÔÚjava.uitl°üÖÐ,¿É×Ô¶¯µ÷½ÚÊý×éµÄ´óС.
¡¡¡¡21.classÀàobjectÀàÖеÄgetclass·½·¨·µ»ØckassÀàÐ͵ÄÒ»¸öʵÀý,³ÌÐòÆô¶¯Ê±°üº¬ÔÚmain·½·¨µÄÀà»á±»¼ÓÔØ,ÐéÄâ»úÒª¼ÓÔØËûÐèÒªµÄËùÓÐÀà,ÿһ¸ö¼ÓÔØµÄÀà¶¼Òª¼ÓÔØËüÐèÒªµÄÀà.
¡¡¡¡22.classÀàΪ±àд¿É¶¯Ì¬²Ù×Ýjava´úÂëµÄ³ÌÐòÌṩÁËÇ¿´óµÄ¹¦ÄÜ·´Éä,ÕâÏÄÜΪJavaBeansÌØ±ðÓÐÓÃ,ʹÓ÷´ÉäJavaÄÜÖ§³ÖVB³ÌÐòԱϰ¹ßʹÓõŤ¾ß.
¡¡¡¡Äܹ»·ÖÎöÀàÄÜÁ¦µÄ³ÌÐò½Ð·´ÉäÆ÷,JavaÖÐÌṩ´Ë¹¦Äܵİü½ÐJava.lang.reflect·´Éä»úÖÆÊ®·ÖÇ¿´ó.
¡¡¡¡1.ÔÚÔËÐÐʱ·ÖÎöÀàµÄÄÜÁ¦.
¡¡¡¡2.ÔÚÔËÐÐʱ̽²ìÀàµÄ¶ÔÏó.
¡¡¡¡3.ʵÏÖͨÓÃÊý×é²Ù×Ý´úÂë.
¡¡¡¡4.Ìṩ·½·¨¶ÔÏó.
¡¡¡¡¶ø´Ë»úÖÆÖ÷ÒªÕë¶ÔÊǹ¤¾ßÕß¶ø²»ÊÇÓ¦Óü°³ÌÐò.
·´Éä»úÖÆÖеÄ×îÖØÒªµÄ²¿·ÖÊÇÔÊÐíÄã¼ì²éÀàµÄ½á¹¹.Óõ½µÄAPIÓÐ:
¡¡¡¡java.lang.reflect.Field·µ»Ø×Ö¶Î.
¡¡¡¡java.reflect.Method·µ»Ø·½·¨.
¡¡¡¡java.lang.reflect.Constructor·µ»Ø²ÎÊý.
¡¡¡¡·½·¨Ö¸Õë:javaûÓз½·¨Ö¸Õë,°ÑÒ»¸ö·½·¨µÄµØÖ·´«¸øÁíÒ»¸ö·½·¨,¿ÉÒÔÔÚºóÃæµ÷ÓÃËü,¶ø½Ó¿ÚÊǸüºÃµÄ½â¾ö·½°¸.
¡¡¡¡23.½Ó¿Ú(Interface)˵Ã÷Àà¸Ã×öʲô¶ø²»Ö¸¶¨ÈçºÎÈ¥×ö,Ò»¸öÀà¿ÉÒÔʵÏÖÒ»¸ö»ò¶à¸öinterface.
¡¡¡¡24.½Ó¿Ú²»ÊÇÒ»¸öÀà,¶øÊǶԷûºÏ½Ó¿ÚÒªÇóµÄÀàµÄÒ»Ì׹淶.
¡¡¡¡ÈôʵÏÖÒ»¸ö½Ó¿ÚÐèÒª2¸ö²½Öè:
¡¡¡¡1.ÉùÃ÷ÀàÐèҪʵÏÖµÄÖ¸¶¨½Ó¿Ú.
¡¡¡¡2.Ìṩ½Ó¿ÚÖеÄËùÓз½·¨µÄ¶¨Òå.
¡¡¡¡ÉùÃ÷Ò»¸öÀàʵÏÖÒ»¸ö½Ó¿ÚÐèҪʹÓÃimplements¹Ø¼ü×Ö
¡¡¡¡classactionBimplementsComparableÆäactionbÐèÒªÌṩCompareTo·½·¨,½Ó¿Ú²»ÊÇÀà,²»ÄÜÓÃnewʵÀý»¯Ò»¸ö½Ó¿Ú.
¡¡¡¡25.Ò»¸öÀàÖ»ÓÐÒ»¸ö³¬Àà,µ«Ò»¸öÀàÄÜʵÏÖ¶à¸ö½Ó¿Ú.JavaÖеÄÒ»¸öÖØÒª½Ó¿Ú
¡¡Cloneable
¡¡¡¡26.½Ó¿ÚºÍ»Øµ÷.±à³ÌÒ»¸ö³£ÓõÄģʽÊǻص÷ģʽ,ÔÚÕâÖÖģʽÖÐÄã¿ÉÒÔÖ¸¶¨µ±Ò»¸öÌØ¶¨Ê±¼ä·¢Éúʱ»Øµ÷¶ÔÏóÉϵķ½·¨.
¡¡¡¡Àý:ActionListener½Ó¿Ú¼àÌý.
¡¡¡¡ÀàËÆµÄAPIÓÐ:java.swing.JOptionPane
¡¡¡¡java.swing.Timer
¡¡¡¡java.awt.Tookit
¡¡¡¡27.¶ÔÏóclone:clone·½·¨ÊÇobjectÒ»¸ö±£»¤·½·¨,ÕâÒâζ×ÅÄãµÄ´úÂë²»Äܼòµ¥µÄµ÷ÓÃËü.
¡¡¡¡28.ÄÚ²¿Àà:Ò»¸öÄÚ²¿ÀàµÄ¶¨ÒåÊǶ¨ÒåÔÚÁíÒ»¸öÄÚ²¿µÄÀà
¡¡¡¡ÔÒòÊÇ:1.Ò»¸öÄÚ²¿ÀàµÄ¶ÔÏóÄܹ»·ÃÎÊ´´½¨ËüµÄ¶ÔÏóµÄʵÏÖ,°üÀ¨Ë½ÓÐÊý¾Ý
¡¡¡¡2.¶ÔÓÚͬһ¸ö°üÖÐµÄÆäËûÀàÀ´Ëµ,ÄÚ²¿ÀàÄܹ»Òþ²ØÆðÀ´.
¡¡¡¡3.ÄäÃûÄÚ²¿Àà¿ÉÒԺܷ½±ãµÄ¶¨Ò廨µ÷.
¡¡¡¡4.ʹÓÃÄÚ²¿Àà¿ÉÒԷdz£·½±ãµÄ±àдʼþÇý¶¯³ÌÐò.
¡¡¡¡29.´úÀíÀà(proxy):1.Ö¸¶¨½Ó¿ÚÒªÇóËùÓдúÂë
¡¡¡¡2.objectÀඨÒåµÄËùÓеķ½·¨(toStringequals)
¡¡¡¡30.Êý¾ÝÀàÐÍ:JavaÊÇÇ¿µ÷ÀàÐ͵ÄÓïÑÔ,ÿ¸ö±äÁ¿¶¼±ØÐëÏÈÉêÃ÷Ëü¶¼ÀàÐÍ,javaÖÐ×ܹ²ÓÐ8¸ö»ù±¾ÀàÐÍ.4ÖÖÊÇÕûÐÍ,2ÖÖÊǸ¡µãÐÍ,Ò»ÖÖÊÇ×Ö·ûÐÍ,±»ÓÃÓÚUnicode±àÂëÖеÄ×Ö·û,²¼¶ûÐÍ.
¡¡
30 06, 2007
JMX¼Ü¹¹µÄÁ˽â(ת)
Á˽âJMX¿ÉÒÔʹÄãÉîÈëÁ˽âJ2EE·þÎñÆ÷£¬ ΪʲôÎÒÃÇÆ½Ê±Ëµ "EJB"ÊǸö±È½Ï"Weight"µÄ·½°¸Ñ¡Ôñ£¬ÆäÖÐÒ»¸öÔÒòÊÇJ2EE·þÎñÆ÷Èí¼þ±¾Éí Ò²ÊÇÄãµÄϵͳÖÐÒ»²¿·Ö£¬Ëü×÷ΪÄãϵͳµÄÈÝÆ÷£¬¶ÔÄãµÄϵͳÓÐÖÁ¹ØÖØÒªµÄ×÷Óã¬Èç¹ûÎÞ·¨Ö±½Ó½éÈë ¹ÜÀí»ò¡°µ÷½Ì¡±Ëü£¬ÄÇôÎÞÒÉÄãµÄϵͳ±¾Éí´æÔÚ×ÅÒþº¬µÄΣÏÕ£¬ ÏÖÔÚ£¬Í¨¹ýJMX£¬ÄãÏÖÔÚ¿ÉÒÔÉîÈëµ½ÄãJ2EEÈÝÆ÷ÄÚ²¿µÄ¹ÜÀíÁË¡£ (ºÃÏñ¹úÄÚ³öÏÖÁ˵ÚÒ»¸ö×Ô¼ºJ2ee·þÎñÆ÷£¬²»ÖªµÀÄÇÊDz»ÊÇ»ùÓÚJMX¿ª·¢µÄ?)
J2EE²¢²»ÄܸÅÀ¨ËùÓеÄÓ¦ÓÃÁìÓò£¬±ÈÈç¶ÔËٶȺÍÐÔÄÜÒªÇ󼫸ߵÄÓÎÏ·»ò¹ÉƱÐÐÇéµÈϵͳ¾ÍÐèÒª×Ô¼ºÖ±½ÓÀ´¿ª·¢Server£¬ Èç¹ûÊÇÄܹ»»ùÓÚJMX¿ª·¢£¬ÄÇô¿ÉÒÔ˵¾Í´ó´óÌá¸ß±àд¹ÜÀí³ÌÐòµÄЧÂÊ£¬¿ÉÒÔ½«ÄãµÄÄ£¿é±ä³ÉJMXµÄMBean£¬¿ÉÒÔͨ¹ýAgentÔÚ³ÌÐòÄÚ²¿»òÕßͨ¹ý WEB¹ÜÀíÒ³Ãæ¶ÔÄãµÄMBeanÄ£¿é½øÐгõʼ»¯ ÖØÆô ÒÔ¼°²ÎÊýÉèÖá£
JMXµÄºÃ´¦»¹ÓУº¿ÉÒÔ·½±ãÕûºÏÁ¬½ÓÏÖÓеÄJava¼¼Êõ£¬ÈçJNDI JDBC JTS¼°ÆäËü¡£ÌرðÊÇÄܹ»Ê¹ÓÃJiniµÄ²éѯ ·¢ÏÖ»úÖÆÒÔ¼°ÐÒ飬ÎÒÃÇÖªµÀ,JiniÌṩÁËÒ»ÖÖ·þÎñµÄ²éѯºÍ·¢ÏÖ»úÖÆ£¬ÕâЩservices¶¼¿ÉÒÔͨ¹ýJMX À´ÊµÏÖ¹ÜÀí¡£
ÏÖÔÚÎÒÃÇ¿ªÊ¼JMXµÄÁ˽⣺
1.µ½java.sun.comÊ×Ò³µÄJMXÒ³Ãæ£¬ÏÂÔØJMXµÄ¹æ¶¨ËµÃ÷ºÍSamples³ÌÐò¡£
2.°´ÕÕJMXµÄ˵Ã÷½øÐÐÒ»´ÎTutorial£¬Á˽âÈçºÎ¼ÓÈë ɾ³ý ÅäÖÃÒ»¸öMBean£¬TutorialÖÐÊÇÒÔSimpleMBeanΪÀý£¬ÄÇôÎÒÃÇÄÜ·ñ½¨Á¢Ò»¸ö×Ô¼ºµÄMBean?
ÎÒÃÇÀ´×öÒ»¸öHello µÄMBean£¬ÕâÀïÓÐÒ»¸öС¹Ø¼üµã£¬ÄãµÄclassÈ¡ÃûÓиö¹æÔò£¬ ÐèÒªÒÔMBeanΪ½á⣬ÈçÕâÀïÎÒÃÇÈ¡ÃûΪHelloMbean:
public interface HelloMBean {
¡¡¡¡// management attributes
¡¡¡¡public String getName();
¡¡¡¡public void setName(String name);
¡¡¡¡// management operations
¡¡¡¡public void print();
}
ÔÚÕâ¸öClassÀÓÐÒ»¸öÒþº¬attributes: name, ÌṩÁËsetºÍgetµÄ·½·¨£¬Í¬Ê±ÓÐÒ»¸ö²Ù×÷·½·¨print()£º
ÔÙ¶¨ÒåÒ»¸öconcreteÀà:
public class Hello implements HelloMBean {
¡¡¡¡private String name = "";
¡¡¡¡public String getName() {
¡¡¡¡return name;
¡¡¡¡}
¡¡¡¡public void setName(String name) {
¡¡¡¡this.name = name;
¡¡¡¡}
¡¡¡¡public void print() {
¡¡¡¡System.out.println("Hello, " + name + "!!" );
¡¡¡¡}
}
ÕâÑùÒ»¸ö¼òµ¥µÄMBean¾Í×öºÃÁË£¬ÎÒÃÇ¿ÉÒÔͨ¹ýadmin½çÃæ¼ÓÈëÕâ¸öHello£¬
ÔÙ°´ TutorialÆô¶¯BaseAgent£¬ÔÚAgent AdministrationÖвο¼SimpleÌîÈ룺
Domain: Standard_Hello_MBeans
Keys : name=Hello,number=1
Java Class: Hello
½«³öÏÖCreate SuccessfulÐÅÏ¢¡£½øÈëMBean View ¸øName¸³Öµ£¬µã°´Apply £¬È»ºóÔÙ°´print£¬ÕâÊÇÄãµÄHelloÖеķ½·¨£¬ÔÚ¿ØÖÆÌ¨Äã»á¿´µ½Êä³ö¡£
ÊDz»ÊǺܾªÆæHelloÖÐµÄ attributes ºÍoperationsÄܱ»¶¯Ì¬µÄ·ÃÎʺͿØÖÆ£¿ ÒѾÒþÔ¼¸Ðµ½JMXµÄ¼Ü¹¹ÔÀíÁ˰ɣ¿
ÏÂÃæÔÙÉîÈëÃ÷ȷһЩ¸ÅÄ
ÉÏÃæHelloMBean×ÊÔ´ÊÇͨ¹ýadminÕâÑùµÄHTTP WEB½çÃæ¹ÜÀí£¬ÕâÖÖ¹ÜÀí×ÊÔ´·½Ê½ÊÇÊôÓÚJMXµÄDistributed·þÎñ²ã£¬ JMX ͨ¹ýDistributed²ãÄܹ»²¿ÊðºÍ¹ÜÀíMBean×ÊÔ´¡£¾ÍÏóÉÏÃæµÄÀý×Ó£¬ÊÇͨ¹ýHtmlAdaptorÌṩµÄHTTP WEB½çÃæÀ´·½ÃæµÄά»¤¹ÜÀíHelloMBean.
ÄÇôÎÒÃÇÄÜ·ñÔÚ³ÌÐòÖÐ×Ô¶¯¹ÜÀíºÍ²¿ÊðÎÒµÄMBean£¿µ±È»¿ÉÒÔ£¬ÕâÊÇͨ¹ýAgent²ãÀ´Íê³É£¬ÏÖÔÚÎÒÃÇÒѾÓÐÁËÕâ¸ö²ã´Î£¬MBeanËùÔÚµÄ×ÊÔ´²ã£¬
×îÍâÃæµÄDistributed·þÎñ²ã£¬Distributed·þÎñ²ãÊÇͨ¹ýAgent²ãÀ´·ÃÎÊMBean×ÊÔ´µÄ£¬¿´¿´ÏÂÃæÀ´×ÔSun¹«Ë¾JMX¹æ¶¨µÄ¼Ü¹¹Í¼£º
´ÓͼÖп´³ö£¬Agent Level(Agent²ã)°üÀ¨MBean ServerºÍAgent Services,ÄÇôÎÒÃÇÀ´×öÒ»¸öÉÏÃæÀý×ÓHelloMBeanµÄAgent£º
// CREATE the MBeanServer
//
System.out.println(" CREATE the MBeanServer.");
MBeanServer server = MBeanServerFactory.createMBeanServer();
// CREATE Registe HelloMBean
//
System.out.println(" CREATE, REGISTER a new Hello Standard_MBean:");
HelloMBean helloMBean = new Hello();
ObjectName hello_name = null;
try {
hello_name = new ObjectName("Standard_Hello_MBeans:name=Hello,number=1");
System.out.println(" OBJECT NAME = " + hello_name);
//½«HelloMBean×¢²áµ½MBeanServerÖÐÈ¥
server.registerMBean(helloMBean, hello_name);
}
catch (Exception e) {
e.printStackTrace();
return;
}
ÏòMBeanServer×¢²áºó£¬ÒÔºóJMX¾ÍÖªµÀÓÐÁËÕâ¸öHelloMBean×ÊÔ´¡£
¹ÜÀíÒ»¸öagentµÄMBean×ÊÔ´»òʹÓÃËüÌṩµÄ·þÎñ±ØÐëͨ¹ýÒ»¸öprotocol adaptor »òÕßconnector,adaptor »òÕßconnectorÊôÓÚDistributed layer level(Distributed·þÎñ²ã)£¬ÎÒÃÇÉÏÃæÀý×ÓÖÐͨ¹ýHTTP WEB½çÃæ¹ÜÀíHelloMBean¾ÍÊÇä¯ÀÀÆ÷ͨ¹ýHtmlAdaptorÕâ¸öadaptorÀ´ÊµÏֵġ£
ͨ¹ý±¾ÆªÎÄÕ£¬ÄãÓ¦¸Ã´óÌåÁ˽âÁËJMXµÄ¼Ü¹¹ºÍһЩÔÀíºÍÓ¦Óã¬ÔÙÉîÈë¿ÉÒÔÑо¿SUNµÄJMX Specification.
30 06, 2007
ʹÓÃJMX¼à¿ØÓ¦ÓóÌÐòÄÚ¡¢ÍⲿµÄ×´¿ö(ת)
Õâ¸öAPIÊÇÒ»¸öÇ¿´óµÄ¼à¿Ø¹¤¾ß¡£ÈÃÎÒÃÇÀ´¿´Ò»¸öÀý×Ó¡£ ÔÚÕâ¸öÓ¦ÓóÌÐòÖУ¬Óд󲿷ֵľ²Ì¬ÄÚÈÝ£¬Ò»Ð©ÄãµÄ¸öÐÔ»¯µÄJSPÒ³Ãæ£¬Ò»¸ö×¢²áϵͳ£¬Ò»¸ö»ùÓÚJMS£¨Java Messaging Services£¬JavaÏûÏ¢·þÎñ£©µÄÊý¾Ýϵͳ£¬ÒÔ¼°Ò»¸öС¸¶·ÑÓ¦ÓÃϵͳ¡£ÔÚÕâ¸öÓ¦ÓóÌÐòÖÐÔÚÄÄÀïʹÓÃJMX¶ÔÎÒÃÇÓÐÀûÄØ£¿ÔÚ¾²Ì¬Ò³ÃæÉÏ£¬Äã¿ÉÒÔΪFileServlet´æÈ¡ÐÅÏ¢²¢ÇÒ¿ÉÒÔ¿´µ½»¨·ÑÁ˶àÉÙʱ¼äÓÃÀ´·þÎñ¾²Ì¬ÄÚÈÝ¡£Ê±¼ä¿ÉÄܱÈÄãÔ¤ÆÚµÄÒªÉÙ£¬ÒòΪä¯ÀÀÆ÷×Ô¶¯µÄÔÚ¿Í»§¶Ë»º´æÁ˲¿·ÖÄÚÈÝ¡£´ó¶àÊý¶Ô¾²Ì¬ÄÚÈݵÄÇëÇ󽫻áÊÇHEADÇëÇó£¬ÓÃÀ´¼ì²é±ä»¯¡£¶ÔÓÚ¶¯Ì¬Ò³Ã棬ÔÚϵͳÖеÄÿ¸öservletÊDZ»·Ö±ð¼ÆËãµØ¡£Õâ¸öÊý¾Ý²»Äܺܺõķ´Ó³Óû§µÄ¾Ñé (ÒòΪÓû§ÔÚËûÃÇËͳöÇëÇóºÍ½Óµ½Ò³ÃæµÄ·µ»ØÖ®¼ä´æÔÚÑÓ³Ù)£¬µ«ÊÇÕâЩÊý¾Ý¸æÖªÁËÆ½¾ùÿ¸öservlet»¨ÔÚÒ»¸öÇëÇóÉϵÄʱ¼ä£¬ÒÔ¼°¶àÉÙ¸öÇëÇó±»Íê³É¡£ÎÒÃǵÄ×¢²áϵͳÊÇÒ»¸öʵÌåbean£¬¶ø¸¶·ÑϵͳÊÇÒ»¸öÓÉÍⲿ·þÎñ·µ»ØµÄÎÞ״̬»á»°bean¡£ Á½¸öbean¶¼Äܱ»¼à¿Ø£¬¶øÇÒͨ¹ýÕâЩ¼à¿ØÐÅÏ¢¿ÉÒÔ°ïÖúÎÒÃÇÓÃÀ´ÓÅ»¯»º´æºÍ³ØµÄ´óС¡£ÎÒÃǵÄÊý¾ÝͬÑùÄÜÓÐÖúÓÚ¾ö¶¨ÊÇ·ñÎÒÃÇÒѾµÃµ½ÁËËùÐèÒªµÄÐÅÏ¢£¬»òÊǾö¶¨¶àÉÙÓû§ÕýÔÚʹÓÃÊý¾Ý¡£ÍÌÍÂÁ¿Ò²¿ÉÒÔʹÓÃJMSµÄtopicºÍqueueÀàÐ͵ÄmbeanµÄÊôÐÔÀ´¼ÆËã¡£´ËÍ⣬ËùÓеÄJDBCÁ¬½Ó¶¼¿ÉÒÔ±»¼à¿Ø£¬¶øÇÒ´ÓËüÃǵÄmbeansÄãÄÜ·¢ÏÖ¶àÉÙÁ¬½Ó³Ø±»ÕùÓ㬾ÙÀýÀ´Ëµ£¬Õ⽫°ïÖúÄãÅжÏÊÇ·ñÐèÒª¸ü¶àµÄÊý¾Ý¿â¿Í»§¶ËÊÚȨ¡£
mbeans ÔÚWebLogic·þÎñÆ÷ÖеĵڶþÖÖÓÃ;ÊÇÓÃÓÚÅäÖÃÐÅÏ¢¡£Í¨¹ýÅäÖÃmbeans£¬ËùÓÐ×ÊÔ´µÄÅäÖö¼±»°üº¬ÔÚruntimeÖС£ÕâЩmbeans±¾ÖÊÉÏÊDZ»°üº¬ÔÚconfig.xmlÎļþÀïµÄÐÅÏ¢µÄ±íʾ¡£²¿ÊðÔÚ·þÎñÆ÷¼àÌý¶Ë¿ÚÉϵÄÓ¦ÓóÌÐòµÄËùÓÐÄÚÈݶ¼°üÀ¨ÔÚÕâЩ½Ó¿ÚÖС£´ó¶àÊý¸ö±ðµÄÊôÐÔÊÇÖ±½ÓÏà¹ØÖ±½Ó£»È»¶ø£¬ÃèÊöÒ»¸ö²¿Êðµ¥ÔªµÄÊôÐÔ¼¯ºÏÊǸ´ÔӵIJ¢ÇÒΪÁË·½±ãËüÃDZ»¼¯ºÏÔÚweblogic.DeployerÀàÖС£Ö±½Ó·ÃÎÊËüÃÇÊÇ¿ÉÄܵ쬵«ÊdzýÁË¿´ÅäÖÃÒÔ¼°²»¸Ä±äËüÖ®ÍâµÄ²Ù×÷ÊDz»±»ÍƼöµÄ¡£ÆäÓàµÄÊôÐÔÊÇËæÒâµÄ£¬µ«ÒªÐ¡ÐÄ£¬µ«Èç¹û×é¼þ£¨ÈçJDBC³Ø£©±»ÖØÐ²¿Êð»ò·þÎñÆ÷ÖØÐÂÆô¶¯£¬´ó¶àÊýÕâЩÊôÐÔʵ¼ÊÉÏÖ»¸Ä±äÔËÐÐʱµÄÐÐΪ¡£ÕâЩÅäÖÃÐÔµÄmbeans Ó¦ÓõÄ×÷Ó÷¶Î§´Ó¾ö¶¨ÎªÄ³Ò»Ìض¨Ó¦ÓÃʹÓÃ×ÊÔ´£¬µ½µ÷Õû»ùÓÚÀ´×Ô¼àmbeansµÄ·´À¡ÊýÖµ¡£
ÕýÈçÄãËù¿´µ½µÄ£¬ÕâÓÐÐí¶àÐÅÏ¢¨D¨Dµ«ÊÇÈç¹ûÄã¶ÔJMSºÍWebLogic·þÎñÆ÷¶¼²»ÊìϤ£¬ÄãÈçºÎ×ÅÊÖÄØ? Ëüʵ¼ÊÉϲ»ÄÇôÄÑ¡£ Ö»ÒªÄãÄÜʹÓÃJNDI²¢ÇÒ¿ÉÒÔÔĶÁJavaDocsÄã¾Í»á·¢ÏÖ²Ù×Ý mbeansÊÇÏ൱ÈÝÒ׵ġ£ÔÚÏÂÃæÄãËù¿´¼ûµÄ´úÂëʾÀýÖУ¬»á¸æËßÄãÈçºÎµÃµ½±¾µØ·þÎñÆ÷µÄmbean home½Ó¿ÚÒÔ¼°JDBC³Ø¡£
MBeanHome home = (MBeanHome) new
InitialContext().lookup(MBeanHome.LOCAL_JNDI_NAME);
Set pools = home.getMBeansByType("JDBCConnectionPool");
ÉÏÃæµÄ´úÂë¸ø³öÁ˶ÔÓÚJDBC£¨Java DataBase Connectivity£¬JavaÊý¾Ý¿âÁ¬½Ó£©³ØµÄÅäÖÃmbean¡£Èç¹ûÄãÏë¼à¿ØÁ¬½Ó³Ø¶ø²»¿¼ÂÇËüÃǵÄÅäÖã¬Ö»ÒªÍ¨¹ýÌí¼Ó"Runtime"À´¸Ä±ämbeanµÄÀàÐ;ͿÉÒÔÍê³É¡£´ÓÕâ¸ömbeanÄã¿ÉÒÔÈ·¶¨ÖØÒªµÄÐÅÏ¢£¬±ÈÈçÊÇ·ñÓÐÁ¬½Óй©¨D¨DÄãÉõÖÁ¿ÉÒԵõ½Ò»¸ö¶ÑÕ»×·×Ù£¬ÕÒµ½¸ÃÁ¬½ÓµÄ¾ßÌåλÖá£
Èç¹ûÄã²»Ïë×öÈκÎJava±à³Ì£¬¾ÍÏñ´ÓÒ»¸ö½Å±¾ÎļþÖÐÒ»ÑùµÄʹÓÃJMX mbeanϵͳ£¬Ôõô°ì£¿ÐÒÔ˵ÄÊÇÎÒÃÇÓÐÒ»¸öÃüÁîÐй¤¾ß£¬ËüÄÜÈÃÄãÒÔÃüÁîÐеķ½Ê½Ö±½Ó²é¿´ºÍ¸Ä±ämbean£weblogic.Admin¡£³ýÁËPINGing·þÎñÆ÷£¬µÃµ½JNDIÁÐ±í£¬ÖØÖÃÁ¬½Ó³Ø£¬ÒÔ¼°¹Ø±Õ·þÎñÆ÷Í⣬Ëü¸ø³öÁËÖ±½Ó·ÃÎÊmbeanµÄ·Ö²ã½á¹¹¡£ÔÚÏÂÃæµÄ´úÂëʾÀýÖÐÄ㽫¿´µ½ÕâÑùµÄÒ»¸öweblogic.AdminµÄÖ¸Áî¡£
java weblogic.Admin -username system -password [password] -url [url] GET
-pretty -type JDBCConnectionPool
Ïà±ÈÓÚÔÚÕâЩmbeansÉϼÓÉÏÊôÐÔµÄÀàÐÍÃèÊöÆ÷£¬Õâ¶Î´úÂë¸ø³öÁ˹ØÓÚmbeanµÄ¼òµ¥Ò×¶ÁµÄÃèÊö¡£Í¬ÑùµÄ£¬ÓÐÒ»¸öSETÃüÁî»áÔÚϵͳÖиıäÈκÎmbeanµÄÊôÐÔ¡£
ÓµÓÐÕâÖÖ¹¤¾ßÄãÓ¦¸ÃÄܹ»ÔÚJavaÄÚ²¿ÒÔ¼°´Ó½Å±¾Íⲿ¼à¿ØÄãµÄÓ¦ÓóÌÐò¡£
30 06, 2007
Designing "query by criteria"(hibernate 2.1)(ת)
new Criteria(Project.class)
.addEq("name", "Hibernate")
.addLike("description", "%ORM%")
.execute();
to this:
Criteria crit = new Criteria(Project.class)
crit.getProperty("name").eq("Hibernate);
crit.getProperty("description).like("%ORM%");
crit.execute();
I don´t like either of these approaches because the addition of new types of criterion requires the uncontrolled growth of a single central interface (Criteria, in the first case; Property in the second).
I like the second approach even less because it is very difficult to chain method calls. What should the eq() method return? Well, it seems most reasonable that it would return the receiving object (ie. the property). But it is very unusual to apply multiple criteria to the same property! So we would really prefer it to return the Criteria if we wanted to chain method calls. Well, I don´t know about you, but I think that any API that returned the receiver from two calls ago might not be considered "intuitive". So we are stuck with that evil temp variable.
I´d seriously consider improving this second approach to look like this:
new Criteria(Project.class)
.getProperty("name").eq("Hibernate)
.and()
.getProperty("description).like("%ORM%");
.execute();
Which is actually very clean. Unfortunately, the interfaces themselves are quite bizzare: and() is an operation defined by .... Criterion? The and() method returns .... the Criteria? This doesn´t feel like a very natural OO design. And I think it would confuse new users. I´ll come back to another reason why "and" and "or" should not be operations at all.
As a variation upon the first approach, I have seen the following:
new Criteria(Project.class)
.add( new Equals("name", "Hibernate") )
.add( new Like("description", "%ORM%") )
.execute();
This avoids the problem of the Criteria interface growing out of control. But I hate Java constructors almost as much as I hate temp variables! The problem with constructors in Java is that they cannot be given meaningful names. We can´t call a constructor EqualsIgnoreCase() if the class is named Equals. Secondly, once we start using constructors, we pretty much permanently nail down the Criterion class hierarchy. We tie client code directly to the concrete classes. I can´t change my mind later and decide that Equals and EqualsIgnoreCase should be different classes.
Eventually I ended up being most influenced by the Cayenne query API (whch I presume was in turn influenced by Apple´s WebObjects). Cayenne uses a class with static factory methods to create Criterion instances. Actually, Cayenne misnames the criterion class Expression and I stupidly inherited this misnaming in our (Hibernate) factory class. So, we ended up with:
session.createCriteria(Project.class)
.add( Expression.eq("name", "Hibernate") )
.add( Expression.like("description", "%ORM%") )
.list();
Notice that this code does not use any concrete classes other than the static factory class - its all interfaces!
The downside of this design is that there are more characters in "add( Expression.eq())" than in "add( new Eq())" or "addEq()". So it is certainly more verbose. It is also noisy. What stands out in the code above is the two occurrences of "Expression". But they are the least important thing in the code.
Fortunately for me, JDK1.5 will come along and give us static imports. Static imports have been very unfairly maligned in the past, so let me try to set the record straight. If I add "import net.sf.hibernate.expression.Expression.*", the code example above becomes:
session.createCriteria(Project.class)
.add( eq("name", "Hibernate") )
.add( like("description", "%ORM%") )
.list();
This is now less verbose and more readable than the version that used constructors. I´m halfway done.
A second problem is the logical combination of criterions. "and" and "or" are each associative, but a string of both "and"s and "or"s is certainly not associative. So it seemed critically important to me that the precedence of the logical operators is crystal clear from the structure of the code. I hate the following:
session.createCriteria(Project.class)
.addAnd( eq("name", "Hibernate") )
.addAnd( like("description", "%ORM%") )
.addOr( like("description", "%object/relational%") )
.list();
I´ve seen a number of APIs like this and I still don´t have a clue how the previous code is intended to be read. The same problem applies to this variation:
new Criteria(Project.class)
.getProperty("name").eq("Hibernate)
.and()
.getProperty("description).like("%ORM%")
.or()
.getProperty("description).like("%object/relational%")
.execute();
OK, OK, I actually do know that conjunction usually has a higher precendence than disjunction - but I would never, ever write code that depended upon this. It just isn´t readable. And we certainly can´t always rely upon operator precedence - we do need some way to express grouping. Anyway, I think this problem would affect any API which offers and() and or() as methods. So let´s not make and() and or() be operations at all.
By the way, worst of all is this:
new Criteria(Project.class)
.getProperty("name").eq("Hibernate)
.and( crit.getProperty("description).like("%ORM%") )
.execute();
"And" is a symmetrical operation! This symmetry should be obvious.
The solution is to treat Conjunction and Disjunction in exactly the same way as atomic Criterions. Make them Criterions, not operations.
session.createCriteria(Project.class)
.add( Expression.disjunction()
.add( eq("name", "Hibernate") )
.add( like("description", "%ORM%") )
)
.list();
Well, that´s a couple too many parentheses for my taste. I´m considering supporting something like the following in Hibernate:
session.createCriteria(Project.class)
.createDisjunction()
.add( eq("name", "Hibernate") )
.add( like("description", "%ORM%") )
.list();
My big problem here is that createDisjunction() would need to return a new instance of Criteria (wrapping a Disjunction) just so that we can call list() without needing a new temp variable. I´m not sure if I like this. Currently Expression.disjunction() just returns an instance of Disjunction directly - and Disjunction implements only the Criterion interface. I guess we´re still searching for perfection...
30 06, 2007
Hibernate ÈëÃÅ(ת)
JBuilder X
jdk 1.4.2
Mysql 4.0.11 Çý¶¯:mm.mysql-2.0.4-bin.jar(org.gjt.mm.mysql.Driver)
Hibernate 2.1
½âѹHibernate
´ò¿ªJB£¬Ð½¨¹¤³Ì£¬ÃûΪ£ºhibernate
¼ÓÈëHibernateÐèÒªµÄ°üÓëMYSQLÇý¶¯
²½Öè:file->new project->nameÖÐÊäÈëhibernate,directoryÑ¡ÔñÄãÒª´æ·Å±¾¹¤³ÌµÄ·¾¶->next
->required libraries->add->new->nameÖÐÊäÈëÄãÒªÉèÖõÄhibernate°üÃû
->add->Ñ¡ÔñÄãhibernate½âѹµ½µÄĿ¼£¬Ñ¡ÖиÃĿ¼ÏµÄhibernate2.jarÓëlibĿ¼ÏµÄËùÓÐjar°ü£¬ÔÙ°ÑÄãµÄMYSQLÇý¶¯°üÒ²¼Ó½øÈ¥
È»ºóÒ»Ö±°´OK£¬next¡£
н¨Ò»¸öÀà,ÃûΪHello_Bean.java,´úÂëÈçÏ£º
package hibernate;
import java.io.Serializable;
/**
* @author geezer
* QQ:9986986 MSN:geezer_hot@hotmail.com
*/
public class Hello_Bean implements Serializable {
private String name;//ÕâÀïnameÓëaddressºÍidµÄÃû×Ö¿ÉÒÔ×Ô¼º¶¨£¬²»»áÓÐʲôӰÏì.µ«getÓëset·½·¨²»¿ÉÒÔ¡£ÒòΪÄǵøúÊý¾Ý¿âÓëÅäÖÃÎļþ¶ÔÓ¦¡£
private String address;
private int id;
public Hello_Bean() {
}
public Hello_Bean(String name, String address) {//¹¹Ô캯Êý,¿´Íê±¾ÕÂÒÔºóÏàÐÅÄã»áÃ÷°×µÄÁË
this.name = name;
this.address = address;
}
public String getName() {//´Ë·½·¨Ãû±ØÐëÓëHello_Bean.hbm.xmlÎļþÀïµÄ¶ÔÓ¦µÄÃû×ÖÒ»Ñù£¬ÏÂÃæ»áÏêϸ½²
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {//±ØÐëµÄ·½·¨
return id;
}
public void setId(int id)//±ØÐëµÄ·½·¨
{
this.id = id;
}
}
Íê³ÉÕâÒ»²½ÒÔºó±àÒë
½«hibernate½âѹºóµÄĿ¼ÏµÄsrcÎļþ¼ÐÀïµÄhibernate.propertiesÓëlog4j.propertiesÎļþ¸´ÖƵ½ÄãµÄ¹¤³ÌĿ¼µÄclassesĿ¼ÏÂ
(ÀýÈçhibernateclassesĿ¼ÏÂ)£¬
´ò¿ªhibernate.propertiesÎļþ£¬ÕÒµ½
## HypersonicSQL
hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
hibernate.connection.driver_class org.hsqldb.jdbcDriver
hibernate.connection.username sa
hibernate.connection.password
hibernate.connection.url jdbc:hsqldb:hsql://localhost
hibernate.connection.url jdbc:hsqldb:test
hibernate.connection.url jdbc:hsqldb:.
¸ÄΪ
## HypersonicSQL
#hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
#hibernate.connection.driver_class org.hsqldb.jdbcDriver
#hibernate.connection.username sa
#hibernate.connection.password
#hibernate.connection.url jdbc:hsqldb:hsql://localhost
#hibernate.connection.url jdbc:hsqldb:test
#hibernate.connection.url jdbc:hsqldb:.
ÔÙÕÒµ½
## MySQL
#hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
#hibernate.connection.driver_class org.gjt.mm.mysql.Driver
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username root
#hibernate.connection.password
¸ÄΪ
## MySQL
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.url jdbc:mysql://localhost:3306/test
hibernate.connection.username root
hibernate.connection.password
ÉÏÃæµÄURLÇë¸ÄΪÄã×Ô¼ºµÄ
Íê³ÉÒÔºó´´½¨Ò»¸ö¿ÕµÄÎļþ£¬±£´æÔÚÄ㹤³ÌµÄÀàÎļþͬ¸öÎļþ¼ÐÀÀýÈçhibernateclasseshibernateĿ¼Ï£©£¬ÎļþÃûΪ£ºHello_Bean.hbm.xml
ÄÚÈÝÈçÏ£º
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="hibernate.Hello_Bean" table="test_hibernate" >
<id name="id" column="id">
<generator class="identity"/>
</id>
<property name="name" type="string" update="true" insert="true" column="name" />
<property name="address" type="string" update="true" insert="true" column="address" />
</class>
</hibernate-mapping>
ÉÔ΢½âÊÍÒ»ÏÂ,<class name="hibernate.Hello_Bean" table="test_hibernate" >ÀïµÄnameÖ¸ÄãµÄÉú³É±íµÄÀ࣬
tableÔòÖ¸¶¨ÄãÒª´´½¨µÄÊý¾Ý¿â±íµÄÃû×Ö£¬¿ÉÒÔ×ÔÓÉÐ޸ģ¬Ã»ÓÐÓ°Ïì.
<id name="id" column="id">ÉèÖÃÖ÷¼üID£¬ÕâÀïnameµÄÖµid¸úHello_Bean.javaÀïµÄ·½·¨getIdÓësetId¶ÔÓ¦£¬²»ÓùÜÕâ¸ö,hibernate»á×Ô¶¯µ÷Óã¬ÅäÖúþͿÉÒÔÁË£¬columnµÄֵΪҪÉú³ÉµÄ×Ö¶ÎÃû£¬¿ÉÒÔ×ÔÓÉÐ޸ģ¬Ã»ÓÐÓ°Ïì¡£
<generator class="identity"/>ÊôÐÔÈÃÖ÷¼üµÄID×ÔÔö£¨²åÈëÊý¾ÝµÄʱºò×Ô¶¯¼Ó1£©
<property name="name" type="string" update="true" insert="true" column="name" />ÕâÀïµÄnameÖµ"name"¸úHello_Bean.javaÀïµÄgetName·½·¨¶ÔÓ¦£¬columnΪҪÉú³ÉµÄ×Ö¶ÎÃû
<property name="address" type="string" update="true" insert="true" column="address" />
·Ö±ðÌí¼ÓÒ»¸ö×Ö¶ÎnameÓëaddress£¬×¢ÒâÕâÀïµÄtypeÊôÐÔÀàÐÍΪstring,Èç¹ûÕâÀïµÄÀàÐÍÓëHello_Bean.javaÀïÉèÖõÄÀàÐͲ»Ò»Ñù»á³ö´í¡£
ÐÞ¸ÄÍêÒÔºó±£´æ¡£
×îºóÔÚJBÀïн¨Ò»¸öÀ࣬Ãû×ÖΪHello.java£¬ÎÒ»áÒ»²½²½½âÊÍ£¬´úÂëÈçÏ£º
package hibernate;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
import net.sf.hibernate.Session;
import net.sf.hibernate.Query;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.type.LongType;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.ScrollableResults;
import java.util.*;
/**
* @author geezer
* QQ:9986986 MSN:geezer_hot@hotmail.com
*/
public class Hello {
public Hello() {
}
public static void main(String[] args) throws Exception {
Configuration cfg = new Configuration().addClass(Hello_Bean.class);//ÓÃHello_Bean.classÀà³õʼ»¯
SessionFactory sessions = cfg.buildSessionFactory();//ÓÃbuildSessionFactory·½·¨µÃµ½Ò»¸öSessionFactory¶ÔÏó
Session session = sessions.openSession();//ÔÙÓÃSessionFactoryµÄopenSession·½·¨µÃµ½Ò»¸ösession
new SchemaExport(cfg).create(true, true);//Õâ¾äÒâ˼ÊÇ´´½¨±í£¬µÚÒ»´ÎÔËÐÐÒԺ󣬾ÍÊÇ´´½¨Íê±íÒÔºóÔÙ°ÑÕâÐмÓÉÏ×¢ÊÍ¡£Èç¹û½¨±íÒÔºó²»°ÑÕâÒ»¾ä×¢Ê͵ôµÄ»°»áɾµôÒÔǰ´´½¨µÄ±íÔÙÖØÐ½¨Ò»¸ö¡£
Hello_Bean my_hibernate = new Hello_Bean();//µÃµ½Ò»¸öHello_Bean¶ÔÏó
my_hibernate.setName("my_name");//ÉèÖÃHello_Bean¶ÔÏóµÄnameֵΪmy_name,ÕâÀïÆäʵ¾ÍÊÇ˵°Ñ×Ö·û´®my_nameµ±×÷Êý¾Ý¿â×Ö¶ÎnameµÄÖµ.Êý¾Ý¿â×Ö¶ÎnameÓëHello_BeanÀàÀïµÄgetName,setName·½·¨ÊǶÔÓ¦µÄ¡£ÐγÉÒ»¸öÓ³Éä¹ØÏµ¡£
my_hibernate.setAddress("my_address");//ÈçÉÏ
session.save(my_hibernate);//Õâ¾äºÜÖØÒª£¬½«my_hibernate¶ÔÏóд½øÊý¾Ý¿â£¨my_hibernate¶ÔÏóÀïµÄnameÓëaddressÎÒÃǸոÕÒѾÉèÖÃÁËÖµÁË£¬»áÖ±½Ó°Ñname,addressµÄֵд½øÊý¾Ý¿âÈ¥£©
session.flush();
session.close();
//ÉÏÃæÊÇÒ»¸ö¼òµ¥µÄ²åÈëÊý¾ÝÓëµÚÒ»´ÎÔËÐн¨±íµÄ½éÉÜ£¬ÏÂÃæÎÒÔÙ½éÉÜɾ³ýÓëÐ޸ĵķ½·¨,ÏÂÃæµÄ´úÂëÎÒ¶¼¼ÓÁË×¢ÊÍ£¬×Ô¼ºÐèҪʲô·½·¨£¨É¾³ý£¬Ð޸ģ¬Ñ»·Êý¾Ý¿âµÄÖµ£©¾Í°Ñ×¢ÊÍÈ¥µô¾Í¿ÉÒÔÁË
HSQL±È½Ï¼òµ¥£¬´ó¼Ò¿´Ò»ÏÂÀý×Ó¾ÍÓ¦¸ÃÃ÷°×ÁË£¬ÕâÀï¾Í²»½²ÁË¡£
±éÀúÊý¾Ý¿âµÄ·½·¨ÓÐÈýÖÖ£¬·Ö±ðÊÇQuery,find,iterate£¬QueryºÍfind·µ»ØÒ»¸öList½Ó¿Ú£¬iterate·µ»ØÒ»¸öIterator£¬¾ßÌå·½·¨¿ÉÒԲ鿴ÕâЩÀàµÃÖª¡£
//ɾ³ýÊý¾Ý
/*
int a=session.delete("from Hello_Bean where id=1");//Èç¹ûûÓÐÕÒµ½idΪ1µÄÊý¾ÝÄÇô·µ»Ø0£¬Èç¹ûÕÒµ½·µ»Ø1,ÕâÀïµÄHello_BeanÊÇÎÒÃǵÄHello_BeanÀ࣬Ëû¸úÊý¾Ý¿â±í¶ÔÓ¦£¬ËùÒÔÎÒÃÇÔÚÕâÀïÊÇÖ±½ÓÓÃHello_BeanÀ´´úÂëÊý¾Ý¿â±íµÄ¡£
System.out.println(a);
session.flush();
session.close();
*/
//Query·½·¨²éѯÊý¾Ý
/*
Hello_Bean my_hibernate = null;
Query q = session.createQuery("from Hello_Bean");
// Query q = session.createQuery("from Hello_Bean where name=?");//ÕâÀïµÄ?¸úJDBCµÄPreparedStatement·½·¨µÄ²î²»¶à£¬Ö»²»¹ýÕâÀïµÄÊÇÒÔ0¿ªÊ¼£¬jdbcµÄÊÇ1¿ªÊ¼¡£
// q.setString(0,"my_name");
// q.setFirstResult(0);//Õâ¾ä»°µÄÒâ˼ÊÇ˵²éѯ½á¹û´ÓµÚ¼¸ÐпªÊ¼ÁгöÊý¾Ý
// q.setMaxResults(3);//Õâ¾ä»°µÄÒâ˼ÊÇÈ¡¶àÉÙÌõÊý¾Ý£¬¾Í¸úSQL SERVERµÄTOP·½·¨ºÍMYSQLµÄLIMIT·½·¨Ò»ÑùµÄÒâ˼¡£
// ScrollableResults sc=q.scroll();//µÃµ½Ò»¸öScrollableResults,¿É¹ö¶¯µÄ£¬Èç¹ûÄãµÄÊý¾Ý¿âÖ§³ÖÓαê×ÔÓÉÒÆ¶¯µÄ»°¿ÉÒÔ¼ÓÉÏ£¬Ò²¾ÍÊÇ˵¿ÉÒÔÅжϲéѯ½á¹ûÓÐûÓÐÖµ£¬»òÕßÒÆ¶¯µ½ÏÂÒ»ÐмǼµÈµÈ¡£
// if(!sc.next())
// {
// System.out.println("ûÓÐÕÒµ½ÄãÐèÒªµÄÊý¾Ý");
// }
session.flush();//Èç¹ûʹÓÃÁËScrollableResultsµÄ»°Çë°ÑÕâÐÐ×¢Ê͵ô
session.close();//Èç¹ûʹÓÃÁËScrollableResultsµÄ»°Çë°ÑÕâÐÐ×¢Ê͵ô
List l=q.list();//·µ»ØÒ»¸öList½Ó¿Ú£¬ÓÃÀ´±éÀú½á¹û¼¯
for(int i=0;i<l.size();i++){
my_hibernate = (Hello_Bean) l.get(i);//´ÓListÖÐÈ¡µÃÒ»¸ömy_hibernate¶ÔÏó
System.out.println(my_hibernate.getName());//µ÷ÓÃmy_hibernate¶ÔÏóµÄgetName·½·¨È¡µÃÊý¾Ý¿âname×ֶεÄÖµ
}
*/
//find·½·¨²éѯÊý¾Ý
/*
Hello_Bean my_hibernate = null;
List q = session.find("from Hello_Bean");
session.flush();
session.close();
for(int i=0;i<q.size();i++)
{
my_hibernate = (Hello_Bean) q.get(i);
System.out.println(my_hibernate.getName());
}
*/
//iterate·½·¨²éѯÊý¾Ý
/*
Hello_Bean my_hibernate = null;
Iterator q = session.iterate("from Hello_Bean");
while(q.hasNext())
{
my_hibernate = (Hello_Bean) q.next();
System.out.println(my_hibernate.getName());
}
*/
//ÐÞ¸ÄÊý¾Ý
/*
Query qq=session.createQuery("from Hello_Bean");
Hello_Bean my_hibernate=(Hello_Bean)session.load(Hello_Bean.class,new Integer(2));
//ÕâÀïµÄnew Integer(2)Òâ˼ÊÇÐ޸ıíÖÐidΪ2µÄÄÇÒ»ÐÐÊý¾Ý,±ØÐëÊÇÒ»¸ö°ü×°ÀàµÄ¶ÔÏó£¬Èç¹ûʹÓÃintµÄ»°»á³ö´í¡£
my_hibernate.setName("geezer");//°ÑidΪ2µÄÄÇÒ»ÐÐÊý¾ÝµÄname×Ö¶ÎÖµ¸ÄΪ"geezer"
session.flush();
session.close();
*/
}
}
×îºóÔËÐоͿÉÒÔÁË¡£
Èç¹û´ó¼ÒÓÐʲô²»Çå³þµÄ£¬¿ÉÒÔÏÂÔØÕâÆªÎÄÕµÄÀý×Ó¿´¿´£¬ÔËÐÐһϡ£
ÏÂÔØµØÖ·£ºhttp://www.phpx.com/happy/attachment.php?s=&postid=599353
ÏÂÔØÍêÒÔºóÓÃJB´ò¿ªhibernate.jpx¾Í¿ÉÒÔÁË¡£ÓÃ֮ǰ°ÑhibernateºÍMYSQLµÄÇý¶¯¼Ó½øÈ¥£¬·½·¨Èç¹û²»ÖªµÀÔÙ¿´¿´±¾Õ¿ªÍ·²¿·Ö¡£
³£¼û´íÎó£º
Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.
Èç¹û³öÏÖÕâÐдíÎó˵Ã÷ÄãµÄxmlÅäÖÃÎļþÓв»¹æ·¶µÄ×Ö·û£¬¼ì²éÏ¡£
net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml
Èç¹û³öÏÖÕâÐдíÎó˵Ã÷ÄãµÄhibernateµÄXMLÅäÖÃÎļþÓдí
net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found
Èç¹û³öÏÖÕâÐдíÎó˵Ã÷hibernateµÄXMLÅäÖÃÎļþûÓÐÕÒµ½£¬ÄãÓ¦¸Ã°ÑXMLÎļþ·ÅÔÚÓëÄãµÄÀàÎļþͬ¸öĿ¼ÏÂ,±¾ÎÄÖÐÊÇ·ÅÔÚhibernateclasseshibernateĿ¼Ï£¬Ò²¾ÍÊǸúHello_Bean.classÀàÎļþÒ»Æð¡£
net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean
Èç¹û³öÏÖÕâÐдíÎó˵Ã÷ÄãµÄxmlÎļþÀïÉèÖõÄ×Ö¶ÎÃûnameµÄÖµÓëHello_Bean.javaÀàÀïµÄgetXXX»òsetXXX·½·¨²»Ò»Ö¡£
net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
Èç¹û³öÏÖÕâÐдíÎó˵Ã÷ÄãµÄMYSQLÇý¶¯Ã»ÓмӽøJB¿âÀï»òÕß²»ÔÚCLASSPATHÀï¡£
30 06, 2007
HibernateÊÂÎñ´¦Àí»úÖÆ(ת)
Hibernate¿ÉÒÔÅäÖÃΪJDBCTransaction»òÕßÊÇJTATransaction£¬ÕâÈ¡¾öÓÚÄãÔÚhibernate.propertiesÖеÄÅäÖÃ:
#hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
#hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory
Èç¹ûÄãʲô¶¼²»ÅäÖã¬Ä¬ÈÏÇé¿öÏÂʹÓÃJDBCTransaction£¬Èç¹ûÄãÅäÖÃΪ£º
hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
½«Ê¹ÓÃJTATransaction
²»¹ÜÄã×¼±¸ÈÃHibernateʹÓÃJDBCTransaction£¬»¹ÊÇJTATransaction£¬ÎÒµÄÖÒ¸æ¾ÍÊÇʲô¶¼²»Å䣬½«ÈÃËü±£³ÖĬÈÏ״̬£¬ÈçÏ£º
#hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
#hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory
ÔÚÏÂÃæµÄ·ÖÎöÖÐÎÒ»á¸ø³öÔÒò¡£
Ò»¡¢JDBC Transaction
¿´¿´Ê¹ÓÃJDBC TransactionµÄʱºòÎÒÃǵĴúÂëÀý×Ó£º
Session session = sf.openSession();
Transaction tx = session.beginTransactioin();
...
session.flush();
tx.commit();
session.close();
ÕâÊÇĬÈϵÄÇé¿ö£¬µ±ÄãÔÚ´úÂëÖÐʹÓÃHibernateµÄTransactionµÄʱºòʵ¼ÊÉϾÍÊÇJDBCTransaction¡£ÄÇôJDBCTransaction¾¿¾¹ÊÇʲô¶«Î÷ÄØ£¿À´¿´¿´Ô´´úÂë¾ÍÇå³þÁË£º
Hibernate2.0.3Ô´´úÂëÖеÄÀà
net.sf.hibernate.transaction.JDBCTransaction:
public void begin() throws HibernateException {
...
if (toggleAutoCommit) session.connection().setAutoCommit(false);
...
}
ÕâÊÇÆô¶¯TransactionµÄ·½·¨£¬¿´µ½ connection().setAutoCommit(false) ÁËÂð£¿ÊDz»ÊǺÜÊìϤ£¿
ÔÙÀ´¿´
public void commit() throws HibernateException {
...
try {
if ( session.getFlushMode()!=FlushMode.NEVER ) session.flush();
try {
session.connection().commit();
committed = true;
}
...
toggleAutoCommit();
}
ÕâÊÇÌá½»·½·¨£¬¿´µ½connection().commit() ÁËÂð£¿ÏÂÃæ¾Í²»ÓÃÎÒ¶à˵ÁË£¬Õâ¸öÀà´úÂë·Ç³£¼òµ¥Ò×¶®£¬Í¨¹ýÔĶÁʹÎÒÃÇÃ÷°×HibernateµÄTransaction¶¼ÔÚ¸ÉÁËЩʲô£¿ÎÒÏÖÔÚ°ÑÓÃHibernateдµÄÀý×Ó·Òë³ÉJDBC£¬´ó¼Ò¾ÍһĿÁËÈ»ÁË£º
Connection conn = ...; <--- session = sf.openSession();
conn.setAutoCommit(false); <--- tx = session.beginTransactioin();
... <--- ...
conn.commit(); <--- tx.commit(); (¶ÔÓ¦×ó±ßµÄÁ½¾ä)
conn.setAutoCommit(true);
conn.close(); <--- session.close();
¿´Ã÷°×Á˰ɣ¬HibernateµÄJDBCTransaction¸ù±¾¾ÍÊÇconn.commit¶øÒÑ£¬¸ù±¾ºÁÎÞÉñÃØ¿ÉÑÔ£¬Ö»²»¹ýÔÚHibernateÖУ¬Session´ò¿ªµÄʱºò£¬¾Í»á×Ô¶¯conn.setAutoCommit(false)£¬²»ÏñÒ»°ãµÄJDBC£¬Ä¬È϶¼ÊÇtrue£¬ËùÒÔÄã×îºó²»Ð´commitҲûÓйØÏµ£¬ÓÉÓÚHibernateÒѾ°ÑAutoCommit¸ø¹ØµôÁË£¬ËùÒÔÓÃHibernateµÄʱºò£¬ÄãÔÚ³ÌÐòÖв»Ð´TransactionµÄ»°£¬Êý¾Ý¿â¸ù±¾¾ÍûÓз´Ó¦¡£
¶þ¡¢JTATransaction
Èç¹ûÄãÔÚEJBÖÐʹÓÃHibernate£¬»òÕß×¼±¸ÓÃJTAÀ´¹ÜÀí¿çSessionµÄ³¤ÊÂÎñ£¬ÄÇô¾ÍÐèҪʹÓÃJTATransaction£¬ÏÈ¿´Ò»¸öÀý×Ó£º
javax.transaction.UserTransaction tx = new InitialContext().lookup("javax.transaction.UserTransaction");
Session s1 = sf.openSession();
...
s1.flush();
s1.close();
...
Session s2 = sf.openSession();
...
s2.flush();
s2.close();
tx.commit();
ÕâÊDZê×¼µÄʹÓÃJTAµÄ´úÂëÆ¬¶Ï£¬TransactionÊÇ¿çSessionµÄ£¬ËüµÄÉúÃüÖÜÆÚ±ÈSessionÒª³¤¡£Èç¹ûÄãÔÚEJBÖÐʹÓÃHibernate£¬ÄÇôÊÇ×î¼òµ¥²»¹ýµÄÁË£¬ÄãʲôTransaction´úÂëͳͳ¶¼²»ÒªÐ´ÁË£¬Ö±½ÓÔÚEJBµÄ²¿ÊðÃèÊö·ûÉÏÅäÖÃijij·½·¨ÊÇ·ñʹÓÃÊÂÎñ¾Í¿ÉÒÔÁË¡£
ÏÖÔÚÎÒÃÇÀ´·ÖÎöÒ»ÏÂJTATransactionµÄÔ´´úÂ룬 net.sf.hibernate.transaction.JTATransaction:
public void begin(InitialContext context, ...
...
ut = (UserTransaction) context.lookup(utName);
...
¿´Çå³þÁËÂ𣿠ºÍÎÒÉÏÃæÐ´µÄ´úÂë tx = new Initial Context?().lookup("javax.transaction.UserTransaction"); ÊDz»ÊÇÍêȫһÑù£¿
public void commit() ...
...
if (newTransaction) ut.commit();
...
JTATransactionµÄ¿ØÖÆÉÔ΢¸´ÔÓ£¬²»¹ýÈÔÈ»¿ÉÒÔºÜÇå³þµÄ¿´³öÀ´HibernateÊÇÈçºÎ·â×°JTAµÄTransaction´úÂëµÄ¡£
µ«ÊÇÄãÏÖÔÚÊÇ·ñ¿´µ½ÁËʲôÎÊÌ⣿ ×ÐϸÏëһϣ¬Hibernate TransactionÊÇ´ÓSessionÖлñµÃµÄ£¬tx = session.beginTransaction()£¬×îºóÒªÏÈÌá½»tx£¬È»ºóÔÙsession.close£¬ÕâÍêÈ«·ûºÏJDBCµÄTransactionµÄ²Ù×÷˳Ðò£¬µ«ÊÇÕâ¸ö˳ÐòÊǺÍJTAµÄTransactioin²Ù×÷˳Ðò³¹µ×ì¶ÜµÄ£¡£¡£¡ JTAÊÇÏÈÆô¶¯Transaction£¬È»ºóÆô¶¯Session£¬¹Ø±ÕSession£¬×îºóÌá½»Transaction£¬Òò´Ëµ±ÄãʹÓÃJTAµÄTransactionµÄʱºò£¬ÄÇô¾ÍǧÍò²»ÒªÊ¹ÓÃHibernateµÄTransaction£¬¶øÊÇÓ¦¸ÃÏñÎÒÉÏÃæµÄJTAµÄ´úÂëÆ¬¶ÏÄÇÑùʹÓòÅÐС£
×ܽ᣺
1¡¢ÔÚJDBCÉÏʹÓÃHibernate
±ØÐëдÉÏHibernate Transaction´úÂ룬·ñÔòÊý¾Ý¿âûÓз´Ó¦¡£´ËʱHibernateµÄTransaction¾ÍÊÇConnection.commit¶øÒÑ
2¡¢ÔÚJTAÉÏʹÓÃHibernate
дJTAµÄTransaction´úÂ룬²»ÒªÐ´HibernateµÄTransaction´úÂ룬·ñÔò³ÌÐò»á±¨´í
3¡¢ÔÚEJBÉÏʹÓÃHibernate
ʲôTransactioin´úÂë¶¼²»ÒªÐ´£¬ÔÚEJBµÄ²¿ÊðÃèÊö·ûÀïÃæÅäÖÃ
|---CMT(Container Managed Transaction)
|
|---BMT(Bean Managed Transaction)
|
|----JDBC Transaction
|
|----JTA Transaction
--------------------------------------------------------------------------------
ÌáÎÊ£º
javax.transaction.UserTransaction tx = new InitialContext().lookup("javax.transaction.UserTransaction");
Session s1 = sf.openSession();
...
s1.flush();
s1.close();
...
Session s2 = sf.openSession();
...
s2.flush();
s2.close();
tx.commit();
s1²»¹Ø±Õ£¬Ê¹ÓÃs2½øÐвÙ×÷µÄ´úÂëÖÐʹÓÃs1¿É²»¿ÉÒÔ£¨ÎÒ¾õµÃÕâÑù¸ü¼Ó½ÚÔ¼×ÊÔ´£¬²»ÐèÒª·´¸´µÄÁ¬½Ó¡¢¹Ø±Õ£©
µ«sf.opengSession()ʱ£¬²¢Ã»ÓÐsetAutoCommit(false)£¬ÎÒÏëÎʵÄÊÇ£¬Èç¹û²»±àдÈκÎÊÂÎñ´úÂ룬È磺
Session s = sf.openSession();
......
s.close();
Êý¾Ý¿â»á²»»áÓз´Ó¦£¨´ËʱӦ¸ÃÊÇĬÈÏAutoCommitΪtrue£©¡£
²»»áÓз´Ó¦¡£ÔÚsf.openSession() ´´½¨SessionʵÀýµÄʱºò£¬¾ÍÒѾµ÷ÓÃÁËconn.setAutoCommit(false)ÁË¡£
ÁíÍ⣬ÎÒÏëÎÊһϣº
1. s.flush()ÊDz»ÊDZØÐëµÄ
2. s.close()ÊDz»ÊÇÒ»¶¨Òª¹Ø±Õ
--------------------------------------------------------------------------------
»Ø´ð£º
s.flush²»ÊDZØÐëµÄ£¬s.close()»áµ÷ÓÃÒ»´Îs.flush()
s.close()Õý³£Çé¿öÏÂÓ¦¸Ã¹Ø±Õ£¬³ý·ÇÄãÊÇÓÃThreadLocal¹ÜÀíSession¡£
s1²»¹Ø±Õ£¬Ê¹ÓÃs2½øÐвÙ×÷µÄ´úÂëÖÐʹÓÃs1¿É²»¿ÉÒÔ£¨ÎÒ¾õµÃÕâÑù¸ü¼Ó½ÚÔ¼×ÊÔ´£¬²»ÐèÒª·´¸´µÄÁ¬½Ó¡¢¹Ø±Õ£©
ÔÚÕâ¸öÀý×ÓÖп´²»³öÀ´JTAµÄ×÷Óá£
¼ÙÉè
Class A {
find() {
Session s1 = sf.openSession();
...
s1.flush();
s1.close();
}
}
Class B {
find() {
Session s2 = sf.openSession();
...
s2.flush();
s2.close();
}
}
Main {
tx = ...;
A.find();
B.find();
tx.commit();
}
30 06, 2007
ÈçºÎѧϰHibernate(ת)
????ÎÒ¶ÔHibernate µÄÄÇЩÅäÖÃÒ²²»ÊÇÌØ±ð´¿Ê죬ÿ´Îдhbm£¬¶¼Òª¶ÔÕÕÎĵµÒ»µãµãµÄ¼ì²é£»Ààµ÷ÓòÎÊýÒ²²»Ì«¼ÇµÃ£¬Ð´´úÂëÒ²ÒªJava docËæÊ±±¸²é¡£µ«ÊÇÎÒÔÚѧϰHibernateµÄʱºò¼´¼¯ÖÐËùÓо«Á¦À´Àí½âHibernateµÄÔËÐÐÔÀí£¬¼¯Öо«Á¦À´ÕÆÎճ־òãÉè¼ÆÓ¦¸Ã°ÑÎÕµÄÔÔòºÍ¼¼ÇÉ£¬ÕâЩ²Å¶ÔÎÒÊÇ×îÖØÓõĶ«Î÷¡£ºÁ²»¿äÕŵÄ˵£¬Ñ§Ï°ÍêHibernate£¬ÎÒ¶ÔJDBCµÄ±à³ÌÒ²Ìá¸ßÁËÒ»´ó½Ø£¬¸ü²»ÒªËµ¶ÔÓÚJ2EE¼Ü¹¹µÄ³Ö¾Ã²ãµÄ¿ò¼ÜÉè¼Æ£¬»ù±¾ÉÏÊÇÁËÈ»ÓÚÐØÁË£¬¼´Ê¹½«À´»»ÁËAPI£¬²»ÓÃHibernateµÄ£¬¸ÄÓÃJDO£¬CastorʲôµÄ£¬ÕâЩ¾ÑéÒ»ÑùÕÕÓá£
????ѧϰHibernateÖ÷Òª²»ÊÇÔÚѧϰHibernatÔõôÅäÖã¬Óù¤¾ßÔõôÉú³ÉhbmÎļþ£¬Èç¹ûÄã°ÑÖØµã·ÅÔÚÕâÀ»ù±¾ÉϵÈÓÚ°×ѧÁËHibernate¡£HibernateµÄ¾«»ªÔÚÓÚÎÞÓëÂױȵÄÁéÇɵĶÔÏó³Ö¾Ã²ãÉè¼Æ£¬ÕâЩ³Ö¾Ã²ãÉè¼Æ¾Ñé²»»áÒòΪÄã²»ÓÃHibernate¶øÉ¥Ê§µô£¬ÎÒ×Ô¼ºÑ§Ï°Hibernate£¬ÒѾÃ÷ÏԸоõµ½¶Ô³Ö¾Ã²ãÉè¼ÆÄÜÁ¦ÒѾ³¤Á˺ܶà¾ÑéÖµÁË£¬ÕâЩ¾ÑéÉõÖÁ²»¹â¿ÉÒÔÓÃÔÚJavaÉÏ£¬ÓÃÔÚ.netÉÏÒ²ÊÇÒ»Ñù¡£ËùÒÔHibernateÅäÖõÄѧϰ£¬ÎÒÖ»ÊǼòµ¥¿´¿´£¬ÓõÄʱºòÖªµÀµ½ÄÇÀïÈ¥²é¾ÍÐÐÁË£¬Ò»¶Ñ¸´ÔÓµÄÉú³É¹¤¾ßÎÒ¸ù±¾¾Í¿´¶¼²»È¥¿´£¬ÕâÑùËãÏÂÀ´£¬ÕÆÎÕHibernateµÄÅäÖ㬿ÉÒÔÓÃHibernateÀ´Ìæ´úJDBCд³ÌÐò£¬²»¹ý»¨ÉÏ3Ììʱ¼ä¾Í×ã¹»ÁË¡£ÎÒÏë3Ììʱ¼ä¶ÔÄãÀ´Ëµ²»ËãºÜÉݳ޵Äѧϰ´ú¼Û°É¡£
????ΪʲôÎÒÕâôǿµ÷ѧϰHibernateµÄ¶ÔÏó³Ö¾Ã²ãÉè¼ÆÀíÄîÄØ£¿ÄǾͿ´ÄãµÄÀíÏëÊÇÏëÒ»±²×Ó×öÒ»¸ö³ÌÐòÔ±ÄØ£¿»¹ÊÇÏëÏò¸ü¸ßµÄ·½Ïò·¢Õ¹ÄØ£¿´Ó´¿×ö¼¼ÊõµÄ½Ç¶ÈÀ´Ëµ£¬Ö°Òµ·¢Õ¹µÄ×î¸ßµãÊÇ¡°ÏµÍ³¼Ü¹¹Ê¦¡±£¬Bill Gates²»ÊÇ»¹½Ð×ö΢ÈíµÄÊ×ϯϵͳ¼Ü¹¹Ê¦Âð£¿System ArchitectְλÐèÒªµÄÊÇÄãµÄѧϰºÍÁìÎòÄÜÁ¦£¬Èç¹ûÄã²»ÄܰÑѧϰHibernateµÃµ½µÄÉè¼Æ¾ÑéÔËÓõ½ÆäËüµØ·½£¬ÄÇôÄãÊÇʧ°ÜµÄ£¬Ò²Ã»ÓÐ×ʸñ×ö System Architect¡£
????²»¹ÜJDOÒ²ºÃ£¬HibernateÒ²ºÃ£¬TopLinkÒ²ºÃ£¬CocoBaseÒ²ºÃ£¬»¹ÊÇ Castor£¬»¹ÊÇʲôTorque£¬OJB£¬Èí¼þµÄʹÓúÍÅäÖ÷½·¨¿ÉÒÔ¸÷Ò죬µ«±¾ÖÊÉ϶¼ÊÇORM£¬¶¼ÊǶÔJDBCµÄ¶ÔÏó³Ö¾Ã²ã·â×°£¬ËùÒÔÍò±ä²»ÀëÆä×Ú£¬Èç¹ûÄãÍêÕûµÄѧϰºÍÕÆÎÕHibernate»¨ÁË1¸öÔµÄʱ¼ä£¬ÄÇôÄãÔÙѧϰOJBµÄʱ¼ä²»Ó¦¸Ã³¬¹ý1¸öÐÇÆÚ£¬ÒòΪÄãÒѾ°Ñ¶ÔÏó³Ö¾Ã²ãÉè¼Æ¶¼ÁËÈ»ÓÚÐØÁË£¬ÄãÐèÒªµÄÖ»ÊÇÊìϤһÏÂOJBµÄAPIºÍÅäÖðÕÁË£¬ÖÁÓÚÔõôÔËÓÃOJB½øÐг־òãµÄ¿ª·¢ÄãÔç¾ÍÒѾÊìϤÁË¡£
????ËùÒÔµ±ÄãÕÆÎÕÁËÁ½ÖÖÒÔÉϵÄORM£¬ÄãÓ¦¸ÃÄܹ»²»¾ÐÓÚʹÓõÄORMÈí¼þµÄÏÞÖÆ£¬Éè¼Æ³öÊʺÏÓÚÄãµÄÏîÄ¿µÄ³Ö¾Ã²ãÀ´£¬Õâ²ÅÊÇSystem ArchitectµÄË®×¼¡£ÓýðӹС˵À´´ò¸ö±È·½À´Ëµ°É£¬ÕÅÎÞ¼Éѧ̫¼«½££¬Ö»¼Ç½£Ò⣬²»¼Ç½£ÕУ¬Õâ²ÅÊÇÕæÕýµÄ¸ßÊÖ£¬¶øµÍÊÖ¾ÍÖ»»áȥѧϰ½£ÕУ¬¶ø²»È¥Áì»á½£Õб³ºóÔ̺¬µÄ½£Ò⣬ËùÒÔÒ»±²×Ó¶¼ÊǵÍÊÖ£¬ÓÀÔ¶²»ÄÜÕæÕýѧ»áÌ«¼«½£¡£ËùÒÔÖܵ߿´µ½ÕÅÈý·áµÚ¶þ´ÎÑÝʾ̫¼«½££¬ÕÐʽÍêÈ«²»Í¬¾ÍÒÔΪÊÇÁíÒ»Ì×¶«Î÷£¬Æäʵ±¾ÖÊÉ϶¼Ò»Ñù¡£Ñ§Ï°HibernateÒ²²»ÒªÉá±¾ÖðÄ©µÄȥѧ¸÷ÖÖÎ廨°ËÃŵŤ¾ß£¬ÖصãÕÆÎÕËüµÄ¶ÔÏó³Ö¾Ã²ãÉè¼ÆÀíÄî¡£
30 06, 2007
×î¼òµ¥µÄHibernateÈëÃżò½é(ת)
ÔÚÕâÆªÎÄÕ½«²»Éæ¼°Eclipse, log4j, Struts, Tomcat, XDoclet£¬ºÍJBoss¡£±¾ÎĵÄÄ¿µÄÊÇÑÝʾһÏÂHibernateµÄ°²×°¹ý³ÌÒÔ¼°×î»ù±¾µÄ¹¦ÄÜ£¬´Ó¶ø¸ø³õѧÕßÒ»¸öµÍµÃ²»ÄÜÔٵ͵ÄÈëÃÅÃż÷¡£
ÏÂÔØÎļþ ÄãÐèÒªJava SDK¡¢ Hibernate°ü¡¢Ant°ü¡¢ºÍJDBC Driver¡£
1¡¢Hibernate°üÏÂÔØµØÖ·:
http://prdownloads.sourceforge.net/hibernate /?sort_by=date&sort=desc
2¡¢Ant°üÏÂÔØµØÖ·:
http://apache.130th.net/ant/binaries /apache-ant-1.6.1-bin.zip
3¡¢JDBC DriverÒª¸ù¾ÝÄãÓõÄdatabaseÀ´¶¨£¬Ò»°ãdatabase¹Ù·½ÍøÕ¾É϶¼»áÓС£ HibernateÖ§³Ö³£ÓõÄdatabase£¬±ÈÈç MySQL, Oracle, PostgreSQL, ºÍMS-SQL Server¡£
ÕâЩÊý¾Ý¿â¶¼ÓÐJDBC Driver: Oracle JDBC DriverÏÂÔØµØÖ·(ÏÂÔØÇ°±ØÐëͬÒâOracleÐÒéÊé)
http://otn.oracle.com/software/htdocs/ distlic.html?/software/tech/java/sqlj_jdbc /htdocs/jdbc9201.html
MySQL JDBC DriverÏÂÔØµØÖ·
http://dev.mysql.com/downloads/connector/j/3.0.html
PostgreSQL JDBC DriverÏÂÔØµØÖ·
http://jdbc.postgresql.org/download.html
MS-SQL Server JDBC DriverÏÂÔØµØÖ·
http://www.microsoft.com/downloads/ details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c- 0fc5bf05bf71&displaylang=en
4¡¢½«Hibernate°üºÍAnt°ü·Ö±ð½âѹÖÁc:devÏÂ(´ËĿ¼²»ÖØÒª£¬Äã¿ÉÒÔ»»ÆäËüÈκÎĿ¼)¡£
ÅäÖû·¾³:
1¡¢ÄãÐèÒªÌí¼ÓÒ»¸öÐµĻ·¾³±äÁ¿:
ANT_HOME£¬ÈÃËüÖ¸Ïòc:dev<ÄãµÄANT°üËùÔÚĿ¼>¡£²¢ÔÚPATH»·¾³±äÁ¿ÀïÌí¼Ó%ANT_HOME%in¡£
2¡¢ÄãÐèÒªÌí¼ÓÒ»¸öÐµĻ·¾³±äÁ¿:
JAVA_HOME£¬ÈÃËüÖ¸ÏòÄãµÄj2sdk¸ùĿ¼¡£²¢ÔÚPATH»·¾³±äÁ¿ÀïÌí¼Ó%JAVA_HOME%in¡£
3¡¢´´½¨Ò»¸öÏîĿĿ¼£¬±ÈÈçc:workspaceMy1stHibernate¡£ ÔÚÏîĿĿ¼Ï£¬ÁíÍâ´´½¨Èý¸öĿ¼: src, classes, lib¡£ ÔÚlibĿ¼Ï£¬´´½¨Á½¸öĿ¼: hibernateºÍdb¡£ ÕâÑùÄãÓÐÁËÈçϵÄÎļþ½á¹¹:
| c:workspaceMy1stHibernate c:workspaceMy1stHibernatesrc c:workspaceMy1stHibernateclasses c:workspaceMy1stHibernatelib c:workspaceMy1stHibernatelibhibernate c:workspaceMy1stHibernatelibdb |
4¡¢½«c:dev<ÄãµÄHibernate°üËùÔÚĿ¼>
hibernate2.jarÎļþcopyµ½c:workspaceMy1stHibernate
libhibernateÏ¡£
½«c:dev<ÄãµÄHibernate°üËùÔÚĿ¼>lib
ϵÄËùÓÐÎļþͬÑùcopyµ½c:workspaceMy1stHibernatelibhibernateÏ¡£
½«ÄãµÄJDBC DriverÎļþ(Ò»°ãÊÇÒ»¸öjarÎļþ)copyµ½c:
workspaceMy1stHibernatelibdbÏ¡£ ´´½¨Êý¾Ý¿â
1¡¢ÓÃÄã×îϲ°®µÄdatabaseÈí¼þ£¬´´½¨Ò»¸öhibernate_testµÄÊý¾Ý¿â¡£ 2¡¢ÔÚ´ËÊý¾Ý¿âÏ£¬Ð½¨Ò»¸ötableÃûΪCUSTOMER
CREATE TABLE CUSTOMER ( CID INTEGER NOT NULL PRIMARY KEY, USERNAME VARCHAR(12) NOT NULL, PASSWORD VARCHAR(12) ); ±àдJavaÎļþ public class Customer { private int id; private String username; private String password; public int getId() { return id; } public String getPassword() { return password; } public String getUsername() { return username; } public void setId(int id) { this.id = id; } public void setPassword(String password) { this.password = password; } public void setUsername(String username) { this.username = username; } } |
½«´ËÀà´æÎªc:workspaceMy1stHibernatesrcCustomer.javaÎļþ¡£
±àдTestÀà
import net.sf.hibernate.*; import net.sf.hibernate.cfg.*; public class Test { public static void main(String[] args) { try { SessionFactory sf = new Configuration() .configure().buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); for (int i = 0; i < 200; i++) { Customer customer = new Customer(); customer.setUsername("customer" + i); customer.setPassword("customer"); session.save(customer); } tx.commit(); session.close(); } catch (HibernateException e) { e.printStackTrace(); } } } |
½«´ËÀà´æÎªc:workspaceMy1stHibernatesrcTest.javaÎļþ¡£
´´½¨HibernateÓ³ÉäÎļþ ÒòΪÕâÀïÖ»ÓÐÒ»¸öClass --- Customer
ºÍÒ»¸öTable --- CUSTOMER£¬ÄãÖ»ÐèÒª½¨Á¢Ò»¸öÓ³ÉäÎļþ--- Customer.hbm.xml£¬À´¶ÔÓ¦CustomerÀàºÍCUSTOMER±íÖ®¼äµÄ¹ØÏµ¡£
| <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net /hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="Customer" table="CUSTOMER"> <id name="id" column="CID"> <generator class="increment" /> </id> <property name="username" column="USERNAME" /> <property name="password" column="PASSWORD" /> </class> </hibernate-mapping> |
°Ñ´ËÎļþ´æÎªc:workspaceMy1stHibernatesrcCustomer.hbm.xml£¬ºÍCustomer.java·ÅÔÚͬһĿ¼Ï¡£
±àдAnt build.xmlÎļþÄã²»Ò»¶¨ÒªÖªµÀÕâ¸öbuild.xmlµÄϸ½Ú£¬ÆäʵAntÒ²²»ÊÇHibernateËù±ØÐëµÄ¡£ÕâÀïÓÃAntÊÇΪÁ˼ò»¯Ò»Ð©ÈÎÎñ£¬±ÈÈç: ±àÒë¡¢copy¡¢ÔËÐеȡ£
| <?xml version="1.0" ?> <project name="My1stHibernate" default="build" basedir="."> <property name="base.dir" value="." /> <property name="src.dir" value="src" /> <property name="lib.dir" value="lib" /> <property name="build.dir" value="classes" /> <path id="myclasspath"> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> <pathelement location="${build.dir}" /> </path> <target name="init"> <mkdir dir="${build.dir}" /> </target> <target name="build" depends="init" description="compile the source files"> <javac classpathref="myclasspath" srcdir="${src.dir}" destdir="${build.dir}" /> <copy todir="${build.dir}" > <fileset dir="${src.dir}" > <exclude name="**/*.java"/> </fileset> </copy> </target> <target name="run" depends="build"> <java classpathref="myclasspath" classname="Test" fork="true" /> </target> <target name="clean"> <delete includeEmptyDirs="true"> <fileset dir="${build.dir}" /> </delete> </target> </project> |
ÅäÖÃHibernateÃèÊöÎļþ HibernateÃèÊöÎļþ¿ÉÒÔÊÇÒ»¸öproperties»òxmlÎļþ£¬ÆäÖÐ×îÖØÒªµÄÊǶ¨ÒåÊý¾Ý¿âµÄÁ¬½Ó¡£ÎÒÕâÀïÁгöµÄÊÇÒ»¸öXML¸ñʽµÄhibernate.cfg.xmlÃèÊöÎļþ¡£
| <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net /hibernate-configuration-2.0.dtd"> <hibernate-configuration> <session-factory name="java:/hibernate/HibernateFactory"> <property name="show_sql">true</property> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver <!-- ÕâÀïÊÇOracle 9iµÄJDBC driver classÃû --> </property> <property name="connection.url"> jdbc:oracle:oci8:@hibernate_test <!--ÕâÀïÊÇOracleµÄhibernate_testÊý¾Ý¿âURL --> </property> <property name="connection.username"> ÄãµÄÊý¾Ý¿âÓû§Ãû </property> <property name="connection.password"> ÄãµÄÊý¾Ý¿âÃÜÂë </property> <property name="dialect"> net.sf.hibernate.dialect.Oracle9Dialect <!-- ÕâÀïÊÇOracle 9iµÄDialect --> </property> <mapping resource="Customer.hbm.xml" /> <!-- Ö¸¶¨CustomerµÄÓ³ÉäÎļþ --> </session-factory> </hibernate-configuration> |
Èç¹ûÄãÓõIJ»ÊÇOracle 9i£¬¿Éµ½C:dev<ÄãµÄHibernate°üËùÔÚĿ¼>
srchibernate.propertiesÎļþÀïÕÒµ½ÄãµÄÊý¾Ý¿â£¬È»ºóÌæ»»ÒÔÉÏÏà¶ÔÓ¦µÄÖµ¡£¿ªÊ¼ÔËÐе½c:workspaceMy1stHibernateÏ£¬ÔËÐÐant run¡£Èç¹ûÄãÑϸñÒÀÕÕÒÔÉϲ½Ö裬Ӧ¸Ã¿´µ½ run:
| [java] log4j: WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). [java] log4j:WARN Please initialize the log4j system properly. [java] Hibernate: insert into CUSTOMER (USERNAME, PASSWORD, CID) values (?, ?, ?) BUILD SUCCESSFUL |
µ½ÄãµÄhibernate_testÊý¾Ý¿â¿´Ò»Ï£¬ÔÚCUSTMOR±íÀïÐÂÌíÁË200Ìõ¼Ç¼£¬µ«ÄãûÓÐдÈκÎJDBC code¡£ÒÔºóÈç¹ûÄãÒª¸ü»»Êý¾Ý¿â£¬Ö»ÐèÒª¸Ä±ähibernate.cfg.xmlÃèÊöÎļþÀïÏàÓ¦µÄÖµ¼´¿É¡£
½áÂÛ ´ËÎÄÊÇһƪÃÅ


