|
From: <jue...@we...> - 2003-09-12 12:14:06
|
SGkgQ29saW4sDQogDQpZb3VyIGlzc3VlIGlzIGNhdXNlZCBieSB0aGUgcmVsaWFuY2Ugb2YgeW91 ciBIaWJlcm5hdGUgYWNjZXNzIGNvZGUgb24gSGliZXJuYXRlSW50ZXJjZXB0b3IgZm9yIGNvcnJl Y3QgcmVzb3VyY2Ugb3BlbmluZyBhbmQgY2xvc2luZy4gWW91IHNob3VsZCBhcHBseSBIaWJlcm5h dGVJbnRlcmNlcHRvciBldmVuIHdoZW4gdXNpbmcgSGliZXJuYXRlVHJhbnNhY3Rpb25NYW5hZ2Vy LCB0byBiZSBhYmxlIHRvIHN3aXRjaCB0byBKdGFUcmFuc2FjdGlvbk1hbmFnZXIgd2l0aG91dCBo YXNzbGUuDQogDQpOb3RlIHRoYXQgd2hlbiB1c2luZyBIaWJlcm5hdGVUZW1wbGF0ZSB3aXRoIGFs bG93Q3JlYXRlPXRydWUgKHRoZSBkZWZhdWx0KSwgYSBuZXcgU2Vzc2lvbiB3aWxsIGF1dG9tYXRp Y2FsbHkgZW5saXN0IGl0c2VsZiB3aXRoIHRoZSB0cmFuc2FjdGlvbiBzeW5jaHJvbml6YXRpb24g Y2FwYWJpbGl0aWVzIG9mIEp0YVRyYW5zYWN0aW9uTWFuYWdlcjogSXQgd2lsbCBiZSBjcmVhdGVk IG9uIGZpcnN0IGFjY2VzcywgcmV1c2VkIHRocm91Z2hvdXQgdGhlIGN1cnJlbnQgdHJhbnNhY3Rp b24sIGFuZCBjbG9zZWQgb24gdHJhbnNhY3Rpb24gY29tcGxldGlvbi4gVGhpcyBndWFyYW50ZWVz IGNvcnJlY3QgSlZNLWxldmVsIHJlYWQtd3JpdGUgY2FjaGluZyB3aXRoIEpUQSwgYW5kIHNlYW1s ZXNzIHN3aXRjaGluZyBiZXR3ZWVuIEhpYmVybmF0ZVRyYW5zYWN0aW9uTWFuYWdlciBhbmQgSnRh VHJhbnNhY3Rpb25NYW5hZ2VyLg0KIA0KSW4geW91ciBjYXNlLCBJIHdvdWxkIGluZGVlZCBoYXZl IHN1Z2dlc3RlZCB0byBnbyB0aGUgc3RhbmRhcmQgUHJveHlGYWN0b3J5QmVhbiByb3V0ZSBhbmQg YXBwbHkgYSBIaWJlcm5hdGVJbnRlcmNlcHRvciBhZnRlciB0aGUgVHJhbnNhY3Rpb25JbnRlcmNl cHRvciAoYWZ0ZXIgaXMgc2VtYW50aWNhbGx5IGNsZWFyZXIgdGhhbiBiZWZvcmUsIElNTykuIFBy b3h5RmFjdG9yeUJlYW4gaXMgdGhlIGNvcnJlY3QgY2hvaWNlIGZvciBhcHBseWluZyBtdWx0aXBs ZSBpbnRlcmNlcHRvcnMuIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbiBpcyBqdXN0IG1lYW50 IGZvciBkZWNsYXJhdGl2ZSB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IHdpdGhvdXQgd29ycnlpbmcg YWJvdXQgQU9QIGNvbmNlcHRzLg0KIA0KT2J2aW91c2x5LCBUcmFuc2FjdGlvblByb3h5RmFjdG9y eUJlYW4gY291bGQgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGludGVyY2VwdG9y cyBmb3IgaXRzIHRhcmdldCBiZWFuLiBJIHdvdWxkIHJlc3RyaWN0IHRoaXMgdG8gdHJhbnNhY3Rp b25hbCBtZXRob2RzIHRob3VnaDogRXhlY3V0aW5nIG90aGVyIG1ldGhvZHMgd2l0aCBhIEhpYmVy bmF0ZSBTZXNzaW9uIGlzIHJlYWxseSBub3QgdGhlIHRhc2sgb2YgVHJhbnNhY3Rpb25Qcm94eUZh Y3RvcnkgQmVhbiAtIEkgY29uc2lkZXIgYSBnZW5lcmljIFByb3h5RmFjdG9yeUJlYW4gYXBwcm9w cmlhdGUgaGVyZS4gQW5kIHlvdSBjYW4gYWx3YXlzIGRlZmluZSBtZXRob2RzIGFzIHRyYW5zYWN0 aW9uYWwgYnV0IHdpdGggcHJvcGFnYXRpb24gInN1cHBvcnRzIiBpbnN0ZWFkIG9mICJyZXF1aXJl ZCIuDQogDQpTdWNoIGEgaG9vayBpbiBUcmFuc2FjdGlvblByb3h5RmFjdG9yeUJlYW4gc2hvdWxk IHByb2JhYmx5IGJlIG1vZGVsbGVkIGFzICJhZGRpdGlvbmFsSW50ZXJjZXB0b3JzIiBwcm9wZXJ0 eSwgdGFraW5nIGEgbGlzdCBvZiBJbnRlcmNlcHRvciBpbnN0YW5jZXMsIGdldHRpbmcgYXBwbGll ZCBhZnRlciB0aGUgaW1wbGljaXQgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBmb3IgdHJhbnNhY3Rp b25hbCBtZXRob2RzLiBUaGlzIGNhbiB0YWtlIGEgSGliZXJuYXRlSW50ZXJjZXB0b3Igb3IgSmRv SW50ZXJjZXB0b3Igb3IgdGhlIGxpa2UuIEFnYWluLCBhbiBhZGRpdGlvbmFsIEhpYmVybmF0ZUlu dGVyY2VwdG9ycyBkb2Vzbid0IGh1cnQgZXZlbiB3aXRoIEhpYmVybmF0ZVRyYW5zYWN0aW9uTWFu YWdlciAtIGl0IHdpbGwgc2ltcGx5IHBhcnRpY2lwYXRlIGluIHRoZSBleGlzdGluZyB0aHJlYWQt YmluZGluZy4NCiANCkp1ZXJnZW4NCiANCg0KCS0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tIA0K CUZyb206IENvbGluIFNhbXBhbGVhbnUgW21haWx0bzpjb2xpbm1sMUBleGlzLmNvbV0gDQoJU2Vu dDogVGh1IDkvNC8yMDAzIDExOjEwIFBNIA0KCVRvOiBzcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVy QGxpc3RzLnNvdXJjZWZvcmdlLm5ldCANCglDYzogDQoJU3ViamVjdDogW1NwcmluZ2ZyYW1ld29y ay1kZXZlbG9wZXJdIHdyYXBwaW5nIGFuIGludGVyY2VwdG9yIGFuZCBIaWJlcm5hdGUgc3BlY2lm aWMgVHJhbnNhY3Rpb25Qcm94eUZhY3RvcnlCZWFuDQoJDQoJDQoNCglJIHdhcyB1c2luZyB0aGUg VHJhbnNhY3Rpb25Qcm94eUZhY3RvcnlCZWFuIHdpdGggdGhlDQoJSGliZXJuYXRlVHJhbnNhY3Rp b25NYW5hZ2VyLCBidXQgd2hlbiBJIHN3aXRjaGVkIHRvIHRoZQ0KCUpUQVRyYW5zYWN0aW9uTWFu YWdlciwgZ290IGJpdHRlbiBieSB0aGUgZmFjdCB0aGF0IEkgbm8gbG9uZ2VyIGhhZA0KCWFueXRo aW5nIGNyZWF0aW5nIGEgSGliZXJuYXRlIHNlc3Npb24gYW5kIGJpbmRpbmcgaXQgdG8gdGhlIGN1 cnJlbnQNCgl0aHJlYWQsIGFzIEhpYmVybmF0ZVRyYW5zYWN0aW9uTWFuYWdlciB1c2VkIHRvIGRv IGJ5IGRlZmF1bHQuDQoJDQoJT25lIHZlcmJvc2Ugc29sdXRpb24gd291bGQgaGF2ZSBiZWVuIHRv IGhhdmUgZ29uZSBiYWNrIHRvIHRoZSBvbGQNCglQcm94eUZhY3RvcnlCZWFuIG1lY2hhbmlzbSBm b3IgaGFuZGxpbmcgdHJhbnNhY3Rpb25zLCBhbmQganVzdCBzdGFjayBhDQoJSGliZXJuYXRlSW50 ZXJjZXB0b3IgaW4gZnJvbnQgb2YgdGhlIHRyYW5zYWN0aW9uIGludGVyY2VwdG9yLg0KCQ0KCUkg ZGVjaWRlZCBpbnN0ZWFkIHRvIG1ha2UgYSBIaWJlcm5hdGUgc3BlY2lmaWMgdmVyaXNvbiBvZg0K CVRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbi4gQWxsIGl0IGRvZXMgaXMgdGFrZSBhIG5ldw0K CUhpYmVybmF0ZUludGVyY2VwdG9yIHByb3BlcnR5LCBhbmQgaW4gYWZ0ZXJQcm9wZXJ0aWVzU2V0 IGFkZCB0aGUNCglpbnRlcmNlcHRvciBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIG9uZSAoaG93ZXZl ciwgdW5saWtlIHRoZSB0cmFuc2FjdGlvbg0KCW9uZSwgaXQgd2lsbCBleGVjdXRlIG9uIGFsbCBp bnZvY2F0aW9ucywgc2luY2UgeW91IG1heSB3YW50IHRvIHJ1biBzb21lDQoJbWV0aG9kcyB3aXRo IGEgaGliZXJuYXRlIHNlc3Npb24sIGJ1dCBubyB0cmFuc2FjdGlvbnMuDQoJICAgICAgICAvLyBh bGx3YXlzIGludm9rZSB0aGUgSGliZXJuYXRlIEludGVyY2VwdG9yDQoJICAgICAgICBhZGRJbnRl cmNlcHRvcihoaWJlcm5hdGVJbnRlcmNlcHRvcik7DQoJICAgICAgICAuLi4gZXhpc3RpbmcgY29k ZSB0byBzZXQgdXAgdGhlIFRyYW5zYWN0aW9uIGludGVyY2VwdG9yDQoJDQoJTm93IG15IHF1ZXN0 aW9uczoNCgkxOiBpcyBpdCB3b3J0aCBjaGVja2luZyBzb21ldGhpbmcgbGlrZSB0aGlzIGluPyBJ IG1hZGUgYSBjdXQgYW5kIHBhc3QNCgljb3B5IG9mIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVh biwgYW5kIGFkZGVkIHRoZSBuZXcgcHJvcGVydHkgYW5kDQoJbW9kaWZpZWQgdGhlIGFmdGVyUHJv cGVydGllc1NldC4gT2J2aW91c2x5LCBJIGNvdWxkIGFsc28gaGF2ZSBqdXN0DQoJc3ViY2xhc3Nl cyB0aGUgZXhpc3RpbmcgY2xhc3MgYW5kIG92ZXJyaWRlbiBhZnRlclByb3BlcnRpZXNTZXQuIFRo YXQncw0KCXByb2JhYmx5IGEgYmV0dGVyIGNob2ljZSwgYnV0IG1heWJlIGEgYml0IG1vcmUgZGFu Z2Vyb3VzIGlmIHNvbWV0aGluZw0KCWNoYW5nZXMgaW4gdGhlIHBhcmVudCBtZXRob2Qgd2hpY2gg aXMgbm8gbG9uZ2VyIGNhbGxlZCBhdCBhbGwuDQoJMjogaXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9m IGRvaW5nIHRoaXM/IEkgc3VwcG9zZWQgSSBjb3VsZCBoYXZlIHdyYXBwZWQNCgl0aGUgcHJveHkg aW4gYW5vdGhlciBwcm94eSB0byBhZGQgdGhlIGhpYmVybmF0ZSBpbnRlcmNlcHRvci4gVGhpcyB3 b3VsZA0KCW5vdCBoYXZlIHJlcXVpcmVkIGFueSBjb2RlIGNoYW5nZXMsIGJ1dCB3b3VsZCBoYXZl IG1hZGUgZm9yIGEgbG90IG1vcmUNCgl0eXBpbmcgaW4gdGhlIGNvbnRleHQuICBBbm90aGVyIG9w dGlvbiB3b3VsZCBiZSB0byBhZGQgb3B0aW9uYWwgYmVmb3JlDQoJYW5kIGFmdGVyLCAnYWx3YXlz IGludm9rZScgaW50ZXJjZXB0b3IgcHJvcGVydGllcyB0byB0aGUNCglUcmFuc2FjdGlvblByb3h5 RmFjdG9yeUJlYW4sIHNvIHNvbWV0aGluZyBsaWtlIHRoaXMgY2FuIGJlIGFkZGVkLg0KCQ0KCVJl Z2FyZHMsDQoJQ29saW4NCgkNCgkNCgkNCgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoJVGhpcyBzZi5uZXQgZW1haWwgaXMgc3BvbnNvcmVk IGJ5OlRoaW5rR2Vlaw0KCVdlbGNvbWUgdG8gZ2VlayBoZWF2ZW4uDQoJaHR0cDovL3RoaW5rZ2Vl ay5jb20vc2YNCglfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xw0KCVNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXIgbWFpbGluZyBsaXN0DQoJU3ByaW5nZnJhbWV3 b3JrLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCglodHRwczovL2xpc3RzLnNvdXJj ZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyDQoJDQoN Cg== |
|
From: <jue...@we...> - 2003-09-29 11:37:59
|
SGkgQ29saW4sDQoNCkFjdHVhbGx5LCBJIGNvbXBsZXRlbHkgYWdyZWU6IEl0IGlzbid0IGV2ZW4g cG9zc2libGUgdG8gYXBwbHkgYWRkaXRpb25hbCBpbnRlcmNlcHRvcnMganVzdCBmb3IgdHJhbnNh Y3Rpb25hbCBtZXRob2RzLCBhcyB0aGUgdHJhbnNhY3Rpb24gc2VtYW50aWNzIG9mIGEgbWV0aG9k IGFyZSBkZXRlcm1pbmVkIHdpdGhpbiB0aGUgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciBpbXBsZW1l bnRhdGlvbiB3aGVyZSB3ZSBjYW4ndCBob29rIGFueSBhZGRpdGlvbmFsIGludGVyY2VwdG9ycyBp bi4gU28gYm90aCBpbiB0ZXJtcyBvZiBjbGVhcm5lc3MgYW5kIHNpbXBsZSBpbXBsZW1lbnRhdGlv biwgbGV0J3MgaW50cm9kdWNlIGFuICJhZGRpdGlvbmFsSW50ZXJjZXB0b3JzIiBwcm9wZXJ0eSBv ZiB0eXBlICJJbnRlcmNlcHRvcltdIiwgZ2V0dGluZyBhcHBsaWVkIF9hZnRlcl8gdGhlIFRyYW5z YWN0aW9uSW50ZXJjZXB0b3IuIEkndmUganVzdCBpbXBsZW1lbnRlZCB0aGF0OyBJJ2xsIGNoZWNr IGl0IGluIGxhdGVyIHRoaXMgYWZ0ZXJub29uLg0KDQpKdWVyZ2VuDQoNCg0KLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCkZyb206IENvbGluIFNhbXBhbGVhbnUgW21haWx0bzpjb2xpbm1sMUBl eGlzLmNvbV0NClNlbnQ6IFN1bmRheSwgU2VwdGVtYmVyIDI4LCAyMDAzIDEwOjMwIFBNDQpUbzog asO8cmdlbiBow7ZsbGVyIFt3ZXJrM0FUXQ0KQ2M6IHNwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJA bGlzdHMuc291cmNlZm9yZ2UubmV0DQpTdWJqZWN0OiBSZTogW1NwcmluZ2ZyYW1ld29yay1kZXZl bG9wZXJdIHdyYXBwaW5nIGFuIGludGVyY2VwdG9yIGFuZA0KSGliZXJuYXRlIHNwZWNpZmljIFRy YW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbg0KDQoNCkrDvHJnZW4sDQoNCihOb3cgdGhhdCB5b3Ug YXJlIGJhY2sgSSBjYW4gd3JpdGUgc29tZSBtb3JlICdmcml2b2xvdXMnIGVtYWlscyA6LSkgKS4N Cg0KVy9yZWdhcmRzIHRvIGFkZGluZyBhZGRpdGlvbmFsIGludGVyY2VwdG9yIHN1cHBvcnQgdG8g DQpUcmFuc2FjdGlvblByb3h5RmFjdG9yeUJlYW4sIEknbSBub3Qgc3VyZSBJIGZ1bGx5IGFncmVl IHRoYXQgaXQncyANCmluaGVyZW50bHkgYmV0dGVyIG9yICdjbGVhbmVyJyB0byBhcHBseSB0aGVz ZSB0byB0cmFuc2FjdGlvbmFsIG1ldGhvZHMgDQpvbmx5LiBUaGF0IGlzLCB3aGVuIHRoaW5raW5n LCAnd2hhdCBpcyBUcmFuc2FjdGlvblByb3h5RmFjdG9yeUJlYW4gKGluIA0KdGhpcyBtb2RpZmll ZCB2ZXJzaW9uKT8nLCB5b3UgY291bGQgY29uc2lkZXIgaXQgYXMgYSB2YXJpYW50IG9mIA0KUHJv eHlGYWN0b3J5QmVhbiB0aGF0IGltcGxpY2l0bHkgYXBwbGllcyBhIFRyYW5zYWN0aW9uIGludGVy Y2VwdG9yIA0KKGJlZm9yZSwgYWZ0ZXIsIG9yIGluIGJldHdlZW4gb3RoZXIgaW50ZXJjZXB0b3Jz LCBhcyB3ZSBkZWNpZGUgbWFrZXMgdGhlIA0KbW9zdCBzZW5zZSkuIFRob3NlIG90aGVyIGludGVy Y2VwdG9ycyBjYW4gdGhlbXNlbHZlcyBkZWNpZGUgaWYgdGhleSANCmFwcGx5LCBhcyB3aXRoIFBy b3h5RmFjdG9yeUJlYW4uLi4NCg0KVGhlcmUgaXMgYSB1c2VjYXNlIGZvciBjYWxsaW5nIEhpYmVy bmF0ZSBjb2RlIChuZWVkaW5nIGEgc2Vzc2lvbiksIA0Kd2l0aG91dCBuZWVkaW5nIHRyYW5zYWN0 aW9ucywgYW5kIHRoYXQncyBtb3N0bHkgZm9yIHJlYWQtb25seSBkYXRhIA0KKHdoZXJlIHRoZXJl IGlzIG5vIG5lZWQgZm9yIGlzb2xhdGlvbiBwcm92aWRlZCBieSBhIHRyYW5zYWN0aW9uKS4gSSAN CnJlYWxpemUgdGhhdCBJIGNvdWxkIGp1c3QgdXNlIGEgcmVndWxhciBQcm94eUZhY3RvcnlCZWFu LCBidXQgdGhpcyBpcyANCmFsbCBhYm91dCByZWR1Y2luZyBieSBtYXliZSA0MC01MCUgYSBidW5j aCBvZiBhbG1vc3QgaWRlbnRpY2FsIGNvbnRleHQgDQpjb25maWcgZGF0YSB0byBzZXQgdXAgdGhl IGludGVyY2VwdG9ycy4gSW4gYSBkZWNlbnQgc2l6ZSBhcHAsIHRoaXMgaXMgYSANCmxvdCBvZiBl eHRyYSB0eXBpbmcgYW5kIG1haW50ZW5hbmNlLiBJZiB0aGUgYWRkaXRpb25hbCBpbnRlcmNlcHRv cnMgDQphcHBsaWVkIHRvIG9ubHkgdHJhbnNhY3Rpb25hbCBtZXRob2RzLCB0aGVuIHlvdSB3b3Vs ZCBvbiBhIGNhc2UgYnkgY2FzZSANCm1ldGhvZCBoYXZlIHRvIGRlY2lkZSB3aGV0aGVyIG9yIG5v dCB0byB1c2UgUHJveHlGYWN0b3J5QmVhbiBvciANClRyYW5zYWN0aW9uUHJveHlGYWN0b3J5LCBv ciBlbHNlIGFsd2F5cyB1c2UgdGhlICdzdXBwb3J0cycgdHJhbnNhY3Rpb24gDQphdHRyaWJ1dGUs IHdoaWNoIGRvZXNuJ3Qgc2VlbSB0aGF0IGNsZWFuIHRvIG1lLg0KDQpSZWdhcmRzLA0KQ29saW4N Cg0KasO8cmdlbiBow7ZsbGVyIFt3ZXJrM0FUXSB3cm90ZToNCg0KPkhpIENvbGluLA0KPiANCj5Z b3VyIGlzc3VlIGlzIGNhdXNlZCBieSB0aGUgcmVsaWFuY2Ugb2YgeW91ciBIaWJlcm5hdGUgYWNj ZXNzIGNvZGUgb24gSGliZXJuYXRlSW50ZXJjZXB0b3IgZm9yIGNvcnJlY3QgcmVzb3VyY2Ugb3Bl bmluZyBhbmQgY2xvc2luZy4gWW91IHNob3VsZCBhcHBseSBIaWJlcm5hdGVJbnRlcmNlcHRvciBl dmVuIHdoZW4gdXNpbmcgSGliZXJuYXRlVHJhbnNhY3Rpb25NYW5hZ2VyLCB0byBiZSBhYmxlIHRv IHN3aXRjaCB0byBKdGFUcmFuc2FjdGlvbk1hbmFnZXIgd2l0aG91dCBoYXNzbGUuDQo+IA0KPk5v dGUgdGhhdCB3aGVuIHVzaW5nIEhpYmVybmF0ZVRlbXBsYXRlIHdpdGggYWxsb3dDcmVhdGU9dHJ1 ZSAodGhlIGRlZmF1bHQpLCBhIG5ldyBTZXNzaW9uIHdpbGwgYXV0b21hdGljYWxseSBlbmxpc3Qg aXRzZWxmIHdpdGggdGhlIHRyYW5zYWN0aW9uIHN5bmNocm9uaXphdGlvbiBjYXBhYmlsaXRpZXMg b2YgSnRhVHJhbnNhY3Rpb25NYW5hZ2VyOiBJdCB3aWxsIGJlIGNyZWF0ZWQgb24gZmlyc3QgYWNj ZXNzLCByZXVzZWQgdGhyb3VnaG91dCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgYW5kIGNsb3Nl ZCBvbiB0cmFuc2FjdGlvbiBjb21wbGV0aW9uLiBUaGlzIGd1YXJhbnRlZXMgY29ycmVjdCBKVk0t bGV2ZWwgcmVhZC13cml0ZSBjYWNoaW5nIHdpdGggSlRBLCBhbmQgc2VhbWxlc3Mgc3dpdGNoaW5n IGJldHdlZW4gSGliZXJuYXRlVHJhbnNhY3Rpb25NYW5hZ2VyIGFuZCBKdGFUcmFuc2FjdGlvbk1h bmFnZXIuDQo+IA0KPkluIHlvdXIgY2FzZSwgSSB3b3VsZCBpbmRlZWQgaGF2ZSBzdWdnZXN0ZWQg dG8gZ28gdGhlIHN0YW5kYXJkIFByb3h5RmFjdG9yeUJlYW4gcm91dGUgYW5kIGFwcGx5IGEgSGli ZXJuYXRlSW50ZXJjZXB0b3IgYWZ0ZXIgdGhlIFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IgKGFmdGVy IGlzIHNlbWFudGljYWxseSBjbGVhcmVyIHRoYW4gYmVmb3JlLCBJTU8pLiBQcm94eUZhY3RvcnlC ZWFuIGlzIHRoZSBjb3JyZWN0IGNob2ljZSBmb3IgYXBwbHlpbmcgbXVsdGlwbGUgaW50ZXJjZXB0 b3JzLiBUcmFuc2FjdGlvblByb3h5RmFjdG9yeUJlYW4gaXMganVzdCBtZWFudCBmb3IgZGVjbGFy YXRpdmUgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IEFPUCBj b25jZXB0cy4NCj4gDQo+T2J2aW91c2x5LCBUcmFuc2FjdGlvblByb3h5RmFjdG9yeUJlYW4gY291 bGQgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGludGVyY2VwdG9ycyBmb3IgaXRz IHRhcmdldCBiZWFuLiBJIHdvdWxkIHJlc3RyaWN0IHRoaXMgdG8gdHJhbnNhY3Rpb25hbCBtZXRo b2RzIHRob3VnaDogRXhlY3V0aW5nIG90aGVyIG1ldGhvZHMgd2l0aCBhIEhpYmVybmF0ZSBTZXNz aW9uIGlzIHJlYWxseSBub3QgdGhlIHRhc2sgb2YgVHJhbnNhY3Rpb25Qcm94eUZhY3RvcnkgQmVh biAtIEkgY29uc2lkZXIgYSBnZW5lcmljIFByb3h5RmFjdG9yeUJlYW4gYXBwcm9wcmlhdGUgaGVy ZS4gQW5kIHlvdSBjYW4gYWx3YXlzIGRlZmluZSBtZXRob2RzIGFzIHRyYW5zYWN0aW9uYWwgYnV0 IHdpdGggcHJvcGFnYXRpb24gInN1cHBvcnRzIiBpbnN0ZWFkIG9mICJyZXF1aXJlZCIuDQo+IA0K PlN1Y2ggYSBob29rIGluIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbiBzaG91bGQgcHJvYmFi bHkgYmUgbW9kZWxsZWQgYXMgImFkZGl0aW9uYWxJbnRlcmNlcHRvcnMiIHByb3BlcnR5LCB0YWtp bmcgYSBsaXN0IG9mIEludGVyY2VwdG9yIGluc3RhbmNlcywgZ2V0dGluZyBhcHBsaWVkIGFmdGVy IHRoZSBpbXBsaWNpdCBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGZvciB0cmFuc2FjdGlvbmFsIG1l dGhvZHMuIFRoaXMgY2FuIHRha2UgYSBIaWJlcm5hdGVJbnRlcmNlcHRvciBvciBKZG9JbnRlcmNl cHRvciBvciB0aGUgbGlrZS4gQWdhaW4sIGFuIGFkZGl0aW9uYWwgSGliZXJuYXRlSW50ZXJjZXB0 b3JzIGRvZXNuJ3QgaHVydCBldmVuIHdpdGggSGliZXJuYXRlVHJhbnNhY3Rpb25NYW5hZ2VyIC0g aXQgd2lsbCBzaW1wbHkgcGFydGljaXBhdGUgaW4gdGhlIGV4aXN0aW5nIHRocmVhZC1iaW5kaW5n Lg0KPiANCj5KdWVyZ2VuDQo+IA0KPg0KPgktLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLSANCj4J RnJvbTogQ29saW4gU2FtcGFsZWFudSBbbWFpbHRvOmNvbGlubWwxQGV4aXMuY29tXSANCj4JU2Vu dDogVGh1IDkvNC8yMDAzIDExOjEwIFBNIA0KPglUbzogc3ByaW5nZnJhbWV3b3JrLWRldmVsb3Bl ckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgDQo+CUNjOiANCj4JU3ViamVjdDogW1NwcmluZ2ZyYW1l d29yay1kZXZlbG9wZXJdIHdyYXBwaW5nIGFuIGludGVyY2VwdG9yIGFuZCBIaWJlcm5hdGUgc3Bl Y2lmaWMgVHJhbnNhY3Rpb25Qcm94eUZhY3RvcnlCZWFuDQo+CQ0KPgkNCj4NCj4JSSB3YXMgdXNp bmcgdGhlIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbiB3aXRoIHRoZQ0KPglIaWJlcm5hdGVU cmFuc2FjdGlvbk1hbmFnZXIsIGJ1dCB3aGVuIEkgc3dpdGNoZWQgdG8gdGhlDQo+CUpUQVRyYW5z YWN0aW9uTWFuYWdlciwgZ290IGJpdHRlbiBieSB0aGUgZmFjdCB0aGF0IEkgbm8gbG9uZ2VyIGhh ZA0KPglhbnl0aGluZyBjcmVhdGluZyBhIEhpYmVybmF0ZSBzZXNzaW9uIGFuZCBiaW5kaW5nIGl0 IHRvIHRoZSBjdXJyZW50DQo+CXRocmVhZCwgYXMgSGliZXJuYXRlVHJhbnNhY3Rpb25NYW5hZ2Vy IHVzZWQgdG8gZG8gYnkgZGVmYXVsdC4NCj4JDQo+CU9uZSB2ZXJib3NlIHNvbHV0aW9uIHdvdWxk IGhhdmUgYmVlbiB0byBoYXZlIGdvbmUgYmFjayB0byB0aGUgb2xkDQo+CVByb3h5RmFjdG9yeUJl YW4gbWVjaGFuaXNtIGZvciBoYW5kbGluZyB0cmFuc2FjdGlvbnMsIGFuZCBqdXN0IHN0YWNrIGEN Cj4JSGliZXJuYXRlSW50ZXJjZXB0b3IgaW4gZnJvbnQgb2YgdGhlIHRyYW5zYWN0aW9uIGludGVy Y2VwdG9yLg0KPgkNCj4JSSBkZWNpZGVkIGluc3RlYWQgdG8gbWFrZSBhIEhpYmVybmF0ZSBzcGVj aWZpYyB2ZXJpc29uIG9mDQo+CVRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbi4gQWxsIGl0IGRv ZXMgaXMgdGFrZSBhIG5ldw0KPglIaWJlcm5hdGVJbnRlcmNlcHRvciBwcm9wZXJ0eSwgYW5kIGlu IGFmdGVyUHJvcGVydGllc1NldCBhZGQgdGhlDQo+CWludGVyY2VwdG9yIGJlZm9yZSB0aGUgdHJh bnNhY3Rpb24gb25lIChob3dldmVyLCB1bmxpa2UgdGhlIHRyYW5zYWN0aW9uDQo+CW9uZSwgaXQg d2lsbCBleGVjdXRlIG9uIGFsbCBpbnZvY2F0aW9ucywgc2luY2UgeW91IG1heSB3YW50IHRvIHJ1 biBzb21lDQo+CW1ldGhvZHMgd2l0aCBhIGhpYmVybmF0ZSBzZXNzaW9uLCBidXQgbm8gdHJhbnNh Y3Rpb25zLg0KPgkgICAgICAgIC8vIGFsbHdheXMgaW52b2tlIHRoZSBIaWJlcm5hdGUgSW50ZXJj ZXB0b3INCj4JICAgICAgICBhZGRJbnRlcmNlcHRvcihoaWJlcm5hdGVJbnRlcmNlcHRvcik7DQo+ CSAgICAgICAgLi4uIGV4aXN0aW5nIGNvZGUgdG8gc2V0IHVwIHRoZSBUcmFuc2FjdGlvbiBpbnRl cmNlcHRvcg0KPgkNCj4JTm93IG15IHF1ZXN0aW9uczoNCj4JMTogaXMgaXQgd29ydGggY2hlY2tp bmcgc29tZXRoaW5nIGxpa2UgdGhpcyBpbj8gSSBtYWRlIGEgY3V0IGFuZCBwYXN0DQo+CWNvcHkg b2YgVHJhbnNhY3Rpb25Qcm94eUZhY3RvcnlCZWFuLCBhbmQgYWRkZWQgdGhlIG5ldyBwcm9wZXJ0 eSBhbmQNCj4JbW9kaWZpZWQgdGhlIGFmdGVyUHJvcGVydGllc1NldC4gT2J2aW91c2x5LCBJIGNv dWxkIGFsc28gaGF2ZSBqdXN0DQo+CXN1YmNsYXNzZXMgdGhlIGV4aXN0aW5nIGNsYXNzIGFuZCBv dmVycmlkZW4gYWZ0ZXJQcm9wZXJ0aWVzU2V0LiBUaGF0J3MNCj4JcHJvYmFibHkgYSBiZXR0ZXIg Y2hvaWNlLCBidXQgbWF5YmUgYSBiaXQgbW9yZSBkYW5nZXJvdXMgaWYgc29tZXRoaW5nDQo+CWNo YW5nZXMgaW4gdGhlIHBhcmVudCBtZXRob2Qgd2hpY2ggaXMgbm8gbG9uZ2VyIGNhbGxlZCBhdCBh bGwuDQo+CTI6IGlzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzPyBJIHN1cHBvc2Vk IEkgY291bGQgaGF2ZSB3cmFwcGVkDQo+CXRoZSBwcm94eSBpbiBhbm90aGVyIHByb3h5IHRvIGFk ZCB0aGUgaGliZXJuYXRlIGludGVyY2VwdG9yLiBUaGlzIHdvdWxkDQo+CW5vdCBoYXZlIHJlcXVp cmVkIGFueSBjb2RlIGNoYW5nZXMsIGJ1dCB3b3VsZCBoYXZlIG1hZGUgZm9yIGEgbG90IG1vcmUN Cj4JdHlwaW5nIGluIHRoZSBjb250ZXh0LiAgQW5vdGhlciBvcHRpb24gd291bGQgYmUgdG8gYWRk IG9wdGlvbmFsIGJlZm9yZQ0KPglhbmQgYWZ0ZXIsICdhbHdheXMgaW52b2tlJyBpbnRlcmNlcHRv ciBwcm9wZXJ0aWVzIHRvIHRoZQ0KPglUcmFuc2FjdGlvblByb3h5RmFjdG9yeUJlYW4sIHNvIHNv bWV0aGluZyBsaWtlIHRoaXMgY2FuIGJlIGFkZGVkLg0KPgkNCj4JUmVnYXJkcywNCj4JQ29saW4N Cj4JDQo+DQoNCg0KDQo= |
|
From: Colin S. <col...@ex...> - 2003-09-30 21:17:04
|
I see this hasn't made it into cvs yet. No hurry there, but I was just thinking that in terms of making a generic mechanism out of this class, it may make more sense to allow both 'pre' and 'post' interceptors around the implicit transaction interceptor. Some kinds of interception, such as performance logging, probably belong before, for example... jürgen höller [werk3AT] wrote: >Hi Colin, > >Actually, I completely agree: It isn't even possible to apply additional interceptors just for transactional methods, as the transaction semantics of a method are determined within the TransactionInterceptor implementation where we can't hook any additional interceptors in. So both in terms of clearness and simple implementation, let's introduce an "additionalInterceptors" property of type "Interceptor[]", getting applied _after_ the TransactionInterceptor. I've just implemented that; I'll check it in later this afternoon. > >Juergen > > >-----Original Message----- >From: Colin Sampaleanu [mailto:col...@ex...] >Sent: Sunday, September 28, 2003 10:30 PM >To: jürgen höller [werk3AT] >Cc: spr...@li... >Subject: Re: [Springframework-developer] wrapping an interceptor and >Hibernate specific TransactionProxyFactoryBean > > >Jürgen, > >(Now that you are back I can write some more 'frivolous' emails :-) ). > >W/regards to adding additional interceptor support to >TransactionProxyFactoryBean, I'm not sure I fully agree that it's >inherently better or 'cleaner' to apply these to transactional methods >only. That is, when thinking, 'what is TransactionProxyFactoryBean (in >this modified version)?', you could consider it as a variant of >ProxyFactoryBean that implicitly applies a Transaction interceptor >(before, after, or in between other interceptors, as we decide makes the >most sense). Those other interceptors can themselves decide if they >apply, as with ProxyFactoryBean... > >There is a usecase for calling Hibernate code (needing a session), >without needing transactions, and that's mostly for read-only data >(where there is no need for isolation provided by a transaction). I >realize that I could just use a regular ProxyFactoryBean, but this is >all about reducing by maybe 40-50% a bunch of almost identical context >config data to set up the interceptors. In a decent size app, this is a >lot of extra typing and maintenance. If the additional interceptors >applied to only transactional methods, then you would on a case by case >method have to decide whether or not to use ProxyFactoryBean or >TransactionProxyFactory, or else always use the 'supports' transaction >attribute, which doesn't seem that clean to me. > >Regards, >Colin > >jürgen höller [werk3AT] wrote: > > > >>Hi Colin, >> >>Your issue is caused by the reliance of your Hibernate access code on HibernateInterceptor for correct resource opening and closing. You should apply HibernateInterceptor even when using HibernateTransactionManager, to be able to switch to JtaTransactionManager without hassle. >> >>Note that when using HibernateTemplate with allowCreate=true (the default), a new Session will automatically enlist itself with the transaction synchronization capabilities of JtaTransactionManager: It will be created on first access, reused throughout the current transaction, and closed on transaction completion. This guarantees correct JVM-level read-write caching with JTA, and seamless switching between HibernateTransactionManager and JtaTransactionManager. >> >>In your case, I would indeed have suggested to go the standard ProxyFactoryBean route and apply a HibernateInterceptor after the TransactionInterceptor (after is semantically clearer than before, IMO). ProxyFactoryBean is the correct choice for applying multiple interceptors. TransactionProxyFactoryBean is just meant for declarative transaction management without worrying about AOP concepts. >> >>Obviously, TransactionProxyFactoryBean could be extended to support additional interceptors for its target bean. I would restrict this to transactional methods though: Executing other methods with a Hibernate Session is really not the task of TransactionProxyFactory Bean - I consider a generic ProxyFactoryBean appropriate here. And you can always define methods as transactional but with propagation "supports" instead of "required". >> >>Such a hook in TransactionProxyFactoryBean should probably be modelled as "additionalInterceptors" property, taking a list of Interceptor instances, getting applied after the implicit TransactionInterceptor for transactional methods. This can take a HibernateInterceptor or JdoInterceptor or the like. Again, an additional HibernateInterceptors doesn't hurt even with HibernateTransactionManager - it will simply participate in the existing thread-binding. >> >>Juergen >> >> >> -----Original Message----- >> From: Colin Sampaleanu [mailto:col...@ex...] >> Sent: Thu 9/4/2003 11:10 PM >> To: spr...@li... >> Cc: >> Subject: [Springframework-developer] wrapping an interceptor and Hibernate specific TransactionProxyFactoryBean >> >> >> >> I was using the TransactionProxyFactoryBean with the >> HibernateTransactionManager, but when I switched to the >> JTATransactionManager, got bitten by the fact that I no longer had >> anything creating a Hibernate session and binding it to the current >> thread, as HibernateTransactionManager used to do by default. >> >> One verbose solution would have been to have gone back to the old >> ProxyFactoryBean mechanism for handling transactions, and just stack a >> HibernateInterceptor in front of the transaction interceptor. >> >> I decided instead to make a Hibernate specific verison of >> TransactionProxyFactoryBean. All it does is take a new >> HibernateInterceptor property, and in afterPropertiesSet add the >> interceptor before the transaction one (however, unlike the transaction >> one, it will execute on all invocations, since you may want to run some >> methods with a hibernate session, but no transactions. >> // allways invoke the Hibernate Interceptor >> addInterceptor(hibernateInterceptor); >> ... existing code to set up the Transaction interceptor >> >> Now my questions: >> 1: is it worth checking something like this in? I made a cut and past >> copy of TransactionProxyFactoryBean, and added the new property and >> modified the afterPropertiesSet. Obviously, I could also have just >> subclasses the existing class and overriden afterPropertiesSet. That's >> probably a better choice, but maybe a bit more dangerous if something >> changes in the parent method which is no longer called at all. >> 2: is there a better way of doing this? I supposed I could have wrapped >> the proxy in another proxy to add the hibernate interceptor. This would >> not have required any code changes, but would have made for a lot more >> typing in the context. Another option would be to add optional before >> and after, 'always invoke' interceptor properties to the >> TransactionProxyFactoryBean, so something like this can be added. >> >> Regards, >> Colin >> >> >> >> > > > > > |
|
From: <jue...@we...> - 2003-10-01 05:25:42
|
VW5mb3J0dW5hdGVseSwgeW91J3JlIHJpZ2h0IC0gSSBoYXZlbid0IGNoZWNrZWQgaXQgaW4geWV0 IGR1ZSB0byBzb21lIGNvbnZlbmllbmNlIHJlZmluZW1lbnQgaW4gQU9QIHByb3h5IGdlbmVyYXRp b24gdGhhdCBhbHNvIGVmZmVjdHMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgcmVtb3Rpbmcg cHJveGllcy4gSSdsbCBjaGVjayB0aGF0IHdob2xlIGJ1bmNoIGluIGFzIHNvb24gYXMgcG9zc2li bGUuDQogDQpUaGUgaWRlYSB3aXRoICJwcmUiIGFuZCAicG9zdCIgaW50ZXJjZXB0b3JzIHNvdW5k cyByZWFzb25hYmxlIC0gbWF5YmUgYSAicHJlSW50ZXJjZXB0b3JzIiBhbmQgInBvc3RJbnRlcmNl cHRvcnMiIHByb3BlcnR5PyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IFRyYW5zYWN0aW9uUHJv eHlGYWN0b3J5QmVhbiBkb2Vzbid0IGdyb3cgdG8gYSByZXBsYWNlbWVudCBvZiB0aGUgZ2VuZXJh bCBBT1AgUHJveHlGYWN0b3J5QmVhbiBqdXN0IHdpdGggc3BlY2lhbCB0cmVhdG1lbnQgb2YgdGhl IFRyYW5zYWN0aW9uSW50ZXJjZXB0b3IsIHRob3VnaC4NCiANCkp1ZXJnZW4NCiANCg0KCS0tLS0t VXJzcHLDvG5nbGljaGUgTmFjaHJpY2h0LS0tLS0gDQoJVm9uOiBDb2xpbiBTYW1wYWxlYW51IFtt YWlsdG86Y29saW5tbDFAZXhpcy5jb21dIA0KCUdlc2VuZGV0OiBEaSAzMC4wOS4yMDAzIDIzOjE2 IA0KCUFuOiBqw7xyZ2VuIGjDtmxsZXIgW3dlcmszQVRdOyBzcHJpbmdmcmFtZXdvcmstZGV2ZWxv cGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCANCglDYzogDQoJQmV0cmVmZjogUmU6IFtTcHJpbmdm cmFtZXdvcmstZGV2ZWxvcGVyXSB3cmFwcGluZyBhbiBpbnRlcmNlcHRvciBhbmQgSGliZXJuYXRl IHNwZWNpZmljIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbg0KCQ0KCQ0KDQoJSSBzZWUgdGhp cyBoYXNuJ3QgbWFkZSBpdCBpbnRvIGN2cyB5ZXQuIE5vIGh1cnJ5IHRoZXJlLCBidXQgSSB3YXMg anVzdA0KCXRoaW5raW5nIHRoYXQgaW4gdGVybXMgb2YgbWFraW5nIGEgZ2VuZXJpYyBtZWNoYW5p c20gb3V0IG9mIHRoaXMgY2xhc3MsDQoJaXQgbWF5IG1ha2UgbW9yZSBzZW5zZSB0byBhbGxvdyBi b3RoICdwcmUnIGFuZCAncG9zdCcgaW50ZXJjZXB0b3JzDQoJYXJvdW5kIHRoZSBpbXBsaWNpdCB0 cmFuc2FjdGlvbiBpbnRlcmNlcHRvci4gU29tZSBraW5kcyBvZiBpbnRlcmNlcHRpb24sDQoJc3Vj aCBhcyBwZXJmb3JtYW5jZSBsb2dnaW5nLCBwcm9iYWJseSBiZWxvbmcgYmVmb3JlLCBmb3IgZXhh bXBsZS4uLg0KCQ0KCQ0KCWrDvHJnZW4gaMO2bGxlciBbd2VyazNBVF0gd3JvdGU6DQoJDQoJPkhp IENvbGluLA0KCT4NCgk+QWN0dWFsbHksIEkgY29tcGxldGVseSBhZ3JlZTogSXQgaXNuJ3QgZXZl biBwb3NzaWJsZSB0byBhcHBseSBhZGRpdGlvbmFsIGludGVyY2VwdG9ycyBqdXN0IGZvciB0cmFu c2FjdGlvbmFsIG1ldGhvZHMsIGFzIHRoZSB0cmFuc2FjdGlvbiBzZW1hbnRpY3Mgb2YgYSBtZXRo b2QgYXJlIGRldGVybWluZWQgd2l0aGluIHRoZSBUcmFuc2FjdGlvbkludGVyY2VwdG9yIGltcGxl bWVudGF0aW9uIHdoZXJlIHdlIGNhbid0IGhvb2sgYW55IGFkZGl0aW9uYWwgaW50ZXJjZXB0b3Jz IGluLiBTbyBib3RoIGluIHRlcm1zIG9mIGNsZWFybmVzcyBhbmQgc2ltcGxlIGltcGxlbWVudGF0 aW9uLCBsZXQncyBpbnRyb2R1Y2UgYW4gImFkZGl0aW9uYWxJbnRlcmNlcHRvcnMiIHByb3BlcnR5 IG9mIHR5cGUgIkludGVyY2VwdG9yW10iLCBnZXR0aW5nIGFwcGxpZWQgX2FmdGVyXyB0aGUgVHJh bnNhY3Rpb25JbnRlcmNlcHRvci4gSSd2ZSBqdXN0IGltcGxlbWVudGVkIHRoYXQ7IEknbGwgY2hl Y2sgaXQgaW4gbGF0ZXIgdGhpcyBhZnRlcm5vb24uDQoJPg0KCT5KdWVyZ2VuDQoJPg0KCT4NCgk+ LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCgk+RnJvbTogQ29saW4gU2FtcGFsZWFudSBbbWFp bHRvOmNvbGlubWwxQGV4aXMuY29tXQ0KCT5TZW50OiBTdW5kYXksIFNlcHRlbWJlciAyOCwgMjAw MyAxMDozMCBQTQ0KCT5UbzogasO8cmdlbiBow7ZsbGVyIFt3ZXJrM0FUXQ0KCT5DYzogc3ByaW5n ZnJhbWV3b3JrLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCgk+U3ViamVjdDogUmU6 IFtTcHJpbmdmcmFtZXdvcmstZGV2ZWxvcGVyXSB3cmFwcGluZyBhbiBpbnRlcmNlcHRvciBhbmQN Cgk+SGliZXJuYXRlIHNwZWNpZmljIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbg0KCT4NCgk+ DQoJPkrDvHJnZW4sDQoJPg0KCT4oTm93IHRoYXQgeW91IGFyZSBiYWNrIEkgY2FuIHdyaXRlIHNv bWUgbW9yZSAnZnJpdm9sb3VzJyBlbWFpbHMgOi0pICkuDQoJPg0KCT5XL3JlZ2FyZHMgdG8gYWRk aW5nIGFkZGl0aW9uYWwgaW50ZXJjZXB0b3Igc3VwcG9ydCB0bw0KCT5UcmFuc2FjdGlvblByb3h5 RmFjdG9yeUJlYW4sIEknbSBub3Qgc3VyZSBJIGZ1bGx5IGFncmVlIHRoYXQgaXQncw0KCT5pbmhl cmVudGx5IGJldHRlciBvciAnY2xlYW5lcicgdG8gYXBwbHkgdGhlc2UgdG8gdHJhbnNhY3Rpb25h bCBtZXRob2RzDQoJPm9ubHkuIFRoYXQgaXMsIHdoZW4gdGhpbmtpbmcsICd3aGF0IGlzIFRyYW5z YWN0aW9uUHJveHlGYWN0b3J5QmVhbiAoaW4NCgk+dGhpcyBtb2RpZmllZCB2ZXJzaW9uKT8nLCB5 b3UgY291bGQgY29uc2lkZXIgaXQgYXMgYSB2YXJpYW50IG9mDQoJPlByb3h5RmFjdG9yeUJlYW4g dGhhdCBpbXBsaWNpdGx5IGFwcGxpZXMgYSBUcmFuc2FjdGlvbiBpbnRlcmNlcHRvcg0KCT4oYmVm b3JlLCBhZnRlciwgb3IgaW4gYmV0d2VlbiBvdGhlciBpbnRlcmNlcHRvcnMsIGFzIHdlIGRlY2lk ZSBtYWtlcyB0aGUNCgk+bW9zdCBzZW5zZSkuIFRob3NlIG90aGVyIGludGVyY2VwdG9ycyBjYW4g dGhlbXNlbHZlcyBkZWNpZGUgaWYgdGhleQ0KCT5hcHBseSwgYXMgd2l0aCBQcm94eUZhY3RvcnlC ZWFuLi4uDQoJPg0KCT5UaGVyZSBpcyBhIHVzZWNhc2UgZm9yIGNhbGxpbmcgSGliZXJuYXRlIGNv ZGUgKG5lZWRpbmcgYSBzZXNzaW9uKSwNCgk+d2l0aG91dCBuZWVkaW5nIHRyYW5zYWN0aW9ucywg YW5kIHRoYXQncyBtb3N0bHkgZm9yIHJlYWQtb25seSBkYXRhDQoJPih3aGVyZSB0aGVyZSBpcyBu byBuZWVkIGZvciBpc29sYXRpb24gcHJvdmlkZWQgYnkgYSB0cmFuc2FjdGlvbikuIEkNCgk+cmVh bGl6ZSB0aGF0IEkgY291bGQganVzdCB1c2UgYSByZWd1bGFyIFByb3h5RmFjdG9yeUJlYW4sIGJ1 dCB0aGlzIGlzDQoJPmFsbCBhYm91dCByZWR1Y2luZyBieSBtYXliZSA0MC01MCUgYSBidW5jaCBv ZiBhbG1vc3QgaWRlbnRpY2FsIGNvbnRleHQNCgk+Y29uZmlnIGRhdGEgdG8gc2V0IHVwIHRoZSBp bnRlcmNlcHRvcnMuIEluIGEgZGVjZW50IHNpemUgYXBwLCB0aGlzIGlzIGENCgk+bG90IG9mIGV4 dHJhIHR5cGluZyBhbmQgbWFpbnRlbmFuY2UuIElmIHRoZSBhZGRpdGlvbmFsIGludGVyY2VwdG9y cw0KCT5hcHBsaWVkIHRvIG9ubHkgdHJhbnNhY3Rpb25hbCBtZXRob2RzLCB0aGVuIHlvdSB3b3Vs ZCBvbiBhIGNhc2UgYnkgY2FzZQ0KCT5tZXRob2QgaGF2ZSB0byBkZWNpZGUgd2hldGhlciBvciBu b3QgdG8gdXNlIFByb3h5RmFjdG9yeUJlYW4gb3INCgk+VHJhbnNhY3Rpb25Qcm94eUZhY3Rvcnks IG9yIGVsc2UgYWx3YXlzIHVzZSB0aGUgJ3N1cHBvcnRzJyB0cmFuc2FjdGlvbg0KCT5hdHRyaWJ1 dGUsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0aGF0IGNsZWFuIHRvIG1lLg0KCT4NCgk+UmVnYXJkcywN Cgk+Q29saW4NCgk+DQoJPmrDvHJnZW4gaMO2bGxlciBbd2VyazNBVF0gd3JvdGU6DQoJPg0KCT4g DQoJPg0KCT4+SGkgQ29saW4sDQoJPj4NCgk+PllvdXIgaXNzdWUgaXMgY2F1c2VkIGJ5IHRoZSBy ZWxpYW5jZSBvZiB5b3VyIEhpYmVybmF0ZSBhY2Nlc3MgY29kZSBvbiBIaWJlcm5hdGVJbnRlcmNl cHRvciBmb3IgY29ycmVjdCByZXNvdXJjZSBvcGVuaW5nIGFuZCBjbG9zaW5nLiBZb3Ugc2hvdWxk IGFwcGx5IEhpYmVybmF0ZUludGVyY2VwdG9yIGV2ZW4gd2hlbiB1c2luZyBIaWJlcm5hdGVUcmFu c2FjdGlvbk1hbmFnZXIsIHRvIGJlIGFibGUgdG8gc3dpdGNoIHRvIEp0YVRyYW5zYWN0aW9uTWFu YWdlciB3aXRob3V0IGhhc3NsZS4NCgk+Pg0KCT4+Tm90ZSB0aGF0IHdoZW4gdXNpbmcgSGliZXJu YXRlVGVtcGxhdGUgd2l0aCBhbGxvd0NyZWF0ZT10cnVlICh0aGUgZGVmYXVsdCksIGEgbmV3IFNl c3Npb24gd2lsbCBhdXRvbWF0aWNhbGx5IGVubGlzdCBpdHNlbGYgd2l0aCB0aGUgdHJhbnNhY3Rp b24gc3luY2hyb25pemF0aW9uIGNhcGFiaWxpdGllcyBvZiBKdGFUcmFuc2FjdGlvbk1hbmFnZXI6 IEl0IHdpbGwgYmUgY3JlYXRlZCBvbiBmaXJzdCBhY2Nlc3MsIHJldXNlZCB0aHJvdWdob3V0IHRo ZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBhbmQgY2xvc2VkIG9uIHRyYW5zYWN0aW9uIGNvbXBsZXRp b24uIFRoaXMgZ3VhcmFudGVlcyBjb3JyZWN0IEpWTS1sZXZlbCByZWFkLXdyaXRlIGNhY2hpbmcg d2l0aCBKVEEsIGFuZCBzZWFtbGVzcyBzd2l0Y2hpbmcgYmV0d2VlbiBIaWJlcm5hdGVUcmFuc2Fj dGlvbk1hbmFnZXIgYW5kIEp0YVRyYW5zYWN0aW9uTWFuYWdlci4NCgk+Pg0KCT4+SW4geW91ciBj YXNlLCBJIHdvdWxkIGluZGVlZCBoYXZlIHN1Z2dlc3RlZCB0byBnbyB0aGUgc3RhbmRhcmQgUHJv eHlGYWN0b3J5QmVhbiByb3V0ZSBhbmQgYXBwbHkgYSBIaWJlcm5hdGVJbnRlcmNlcHRvciBhZnRl ciB0aGUgVHJhbnNhY3Rpb25JbnRlcmNlcHRvciAoYWZ0ZXIgaXMgc2VtYW50aWNhbGx5IGNsZWFy ZXIgdGhhbiBiZWZvcmUsIElNTykuIFByb3h5RmFjdG9yeUJlYW4gaXMgdGhlIGNvcnJlY3QgY2hv aWNlIGZvciBhcHBseWluZyBtdWx0aXBsZSBpbnRlcmNlcHRvcnMuIFRyYW5zYWN0aW9uUHJveHlG YWN0b3J5QmVhbiBpcyBqdXN0IG1lYW50IGZvciBkZWNsYXJhdGl2ZSB0cmFuc2FjdGlvbiBtYW5h Z2VtZW50IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgQU9QIGNvbmNlcHRzLg0KCT4+DQoJPj5PYnZp b3VzbHksIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbiBjb3VsZCBiZSBleHRlbmRlZCB0byBz dXBwb3J0IGFkZGl0aW9uYWwgaW50ZXJjZXB0b3JzIGZvciBpdHMgdGFyZ2V0IGJlYW4uIEkgd291 bGQgcmVzdHJpY3QgdGhpcyB0byB0cmFuc2FjdGlvbmFsIG1ldGhvZHMgdGhvdWdoOiBFeGVjdXRp bmcgb3RoZXIgbWV0aG9kcyB3aXRoIGEgSGliZXJuYXRlIFNlc3Npb24gaXMgcmVhbGx5IG5vdCB0 aGUgdGFzayBvZiBUcmFuc2FjdGlvblByb3h5RmFjdG9yeSBCZWFuIC0gSSBjb25zaWRlciBhIGdl bmVyaWMgUHJveHlGYWN0b3J5QmVhbiBhcHByb3ByaWF0ZSBoZXJlLiBBbmQgeW91IGNhbiBhbHdh eXMgZGVmaW5lIG1ldGhvZHMgYXMgdHJhbnNhY3Rpb25hbCBidXQgd2l0aCBwcm9wYWdhdGlvbiAi c3VwcG9ydHMiIGluc3RlYWQgb2YgInJlcXVpcmVkIi4NCgk+Pg0KCT4+U3VjaCBhIGhvb2sgaW4g VHJhbnNhY3Rpb25Qcm94eUZhY3RvcnlCZWFuIHNob3VsZCBwcm9iYWJseSBiZSBtb2RlbGxlZCBh cyAiYWRkaXRpb25hbEludGVyY2VwdG9ycyIgcHJvcGVydHksIHRha2luZyBhIGxpc3Qgb2YgSW50 ZXJjZXB0b3IgaW5zdGFuY2VzLCBnZXR0aW5nIGFwcGxpZWQgYWZ0ZXIgdGhlIGltcGxpY2l0IFRy YW5zYWN0aW9uSW50ZXJjZXB0b3IgZm9yIHRyYW5zYWN0aW9uYWwgbWV0aG9kcy4gVGhpcyBjYW4g dGFrZSBhIEhpYmVybmF0ZUludGVyY2VwdG9yIG9yIEpkb0ludGVyY2VwdG9yIG9yIHRoZSBsaWtl LiBBZ2FpbiwgYW4gYWRkaXRpb25hbCBIaWJlcm5hdGVJbnRlcmNlcHRvcnMgZG9lc24ndCBodXJ0 IGV2ZW4gd2l0aCBIaWJlcm5hdGVUcmFuc2FjdGlvbk1hbmFnZXIgLSBpdCB3aWxsIHNpbXBseSBw YXJ0aWNpcGF0ZSBpbiB0aGUgZXhpc3RpbmcgdGhyZWFkLWJpbmRpbmcuDQoJPj4NCgk+Pkp1ZXJn ZW4NCgk+Pg0KCT4+DQoJPj4gICAgICAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KCT4+ICAg ICAgRnJvbTogQ29saW4gU2FtcGFsZWFudSBbbWFpbHRvOmNvbGlubWwxQGV4aXMuY29tXQ0KCT4+ ICAgICAgU2VudDogVGh1IDkvNC8yMDAzIDExOjEwIFBNDQoJPj4gICAgICBUbzogc3ByaW5nZnJh bWV3b3JrLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCgk+PiAgICAgIENjOg0KCT4+ ICAgICAgU3ViamVjdDogW1NwcmluZ2ZyYW1ld29yay1kZXZlbG9wZXJdIHdyYXBwaW5nIGFuIGlu dGVyY2VwdG9yIGFuZCBIaWJlcm5hdGUgc3BlY2lmaWMgVHJhbnNhY3Rpb25Qcm94eUZhY3RvcnlC ZWFuDQoJPj4gICAgIA0KCT4+ICAgICANCgk+Pg0KCT4+ICAgICAgSSB3YXMgdXNpbmcgdGhlIFRy YW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbiB3aXRoIHRoZQ0KCT4+ICAgICAgSGliZXJuYXRlVHJh bnNhY3Rpb25NYW5hZ2VyLCBidXQgd2hlbiBJIHN3aXRjaGVkIHRvIHRoZQ0KCT4+ICAgICAgSlRB VHJhbnNhY3Rpb25NYW5hZ2VyLCBnb3QgYml0dGVuIGJ5IHRoZSBmYWN0IHRoYXQgSSBubyBsb25n ZXIgaGFkDQoJPj4gICAgICBhbnl0aGluZyBjcmVhdGluZyBhIEhpYmVybmF0ZSBzZXNzaW9uIGFu ZCBiaW5kaW5nIGl0IHRvIHRoZSBjdXJyZW50DQoJPj4gICAgICB0aHJlYWQsIGFzIEhpYmVybmF0 ZVRyYW5zYWN0aW9uTWFuYWdlciB1c2VkIHRvIGRvIGJ5IGRlZmF1bHQuDQoJPj4gICAgIA0KCT4+ ICAgICAgT25lIHZlcmJvc2Ugc29sdXRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGhhdmUgZ29uZSBi YWNrIHRvIHRoZSBvbGQNCgk+PiAgICAgIFByb3h5RmFjdG9yeUJlYW4gbWVjaGFuaXNtIGZvciBo YW5kbGluZyB0cmFuc2FjdGlvbnMsIGFuZCBqdXN0IHN0YWNrIGENCgk+PiAgICAgIEhpYmVybmF0 ZUludGVyY2VwdG9yIGluIGZyb250IG9mIHRoZSB0cmFuc2FjdGlvbiBpbnRlcmNlcHRvci4NCgk+ PiAgICAgDQoJPj4gICAgICBJIGRlY2lkZWQgaW5zdGVhZCB0byBtYWtlIGEgSGliZXJuYXRlIHNw ZWNpZmljIHZlcmlzb24gb2YNCgk+PiAgICAgIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbi4g QWxsIGl0IGRvZXMgaXMgdGFrZSBhIG5ldw0KCT4+ICAgICAgSGliZXJuYXRlSW50ZXJjZXB0b3Ig cHJvcGVydHksIGFuZCBpbiBhZnRlclByb3BlcnRpZXNTZXQgYWRkIHRoZQ0KCT4+ICAgICAgaW50 ZXJjZXB0b3IgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBvbmUgKGhvd2V2ZXIsIHVubGlrZSB0aGUg dHJhbnNhY3Rpb24NCgk+PiAgICAgIG9uZSwgaXQgd2lsbCBleGVjdXRlIG9uIGFsbCBpbnZvY2F0 aW9ucywgc2luY2UgeW91IG1heSB3YW50IHRvIHJ1biBzb21lDQoJPj4gICAgICBtZXRob2RzIHdp dGggYSBoaWJlcm5hdGUgc2Vzc2lvbiwgYnV0IG5vIHRyYW5zYWN0aW9ucy4NCgk+PiAgICAgICAg ICAgICAgLy8gYWxsd2F5cyBpbnZva2UgdGhlIEhpYmVybmF0ZSBJbnRlcmNlcHRvcg0KCT4+ICAg ICAgICAgICAgICBhZGRJbnRlcmNlcHRvcihoaWJlcm5hdGVJbnRlcmNlcHRvcik7DQoJPj4gICAg ICAgICAgICAgIC4uLiBleGlzdGluZyBjb2RlIHRvIHNldCB1cCB0aGUgVHJhbnNhY3Rpb24gaW50 ZXJjZXB0b3INCgk+PiAgICAgDQoJPj4gICAgICBOb3cgbXkgcXVlc3Rpb25zOg0KCT4+ICAgICAg MTogaXMgaXQgd29ydGggY2hlY2tpbmcgc29tZXRoaW5nIGxpa2UgdGhpcyBpbj8gSSBtYWRlIGEg Y3V0IGFuZCBwYXN0DQoJPj4gICAgICBjb3B5IG9mIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVh biwgYW5kIGFkZGVkIHRoZSBuZXcgcHJvcGVydHkgYW5kDQoJPj4gICAgICBtb2RpZmllZCB0aGUg YWZ0ZXJQcm9wZXJ0aWVzU2V0LiBPYnZpb3VzbHksIEkgY291bGQgYWxzbyBoYXZlIGp1c3QNCgk+ PiAgICAgIHN1YmNsYXNzZXMgdGhlIGV4aXN0aW5nIGNsYXNzIGFuZCBvdmVycmlkZW4gYWZ0ZXJQ cm9wZXJ0aWVzU2V0LiBUaGF0J3MNCgk+PiAgICAgIHByb2JhYmx5IGEgYmV0dGVyIGNob2ljZSwg YnV0IG1heWJlIGEgYml0IG1vcmUgZGFuZ2Vyb3VzIGlmIHNvbWV0aGluZw0KCT4+ICAgICAgY2hh bmdlcyBpbiB0aGUgcGFyZW50IG1ldGhvZCB3aGljaCBpcyBubyBsb25nZXIgY2FsbGVkIGF0IGFs bC4NCgk+PiAgICAgIDI6IGlzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBkb2luZyB0aGlzPyBJIHN1 cHBvc2VkIEkgY291bGQgaGF2ZSB3cmFwcGVkDQoJPj4gICAgICB0aGUgcHJveHkgaW4gYW5vdGhl ciBwcm94eSB0byBhZGQgdGhlIGhpYmVybmF0ZSBpbnRlcmNlcHRvci4gVGhpcyB3b3VsZA0KCT4+ ICAgICAgbm90IGhhdmUgcmVxdWlyZWQgYW55IGNvZGUgY2hhbmdlcywgYnV0IHdvdWxkIGhhdmUg bWFkZSBmb3IgYSBsb3QgbW9yZQ0KCT4+ICAgICAgdHlwaW5nIGluIHRoZSBjb250ZXh0LiAgQW5v dGhlciBvcHRpb24gd291bGQgYmUgdG8gYWRkIG9wdGlvbmFsIGJlZm9yZQ0KCT4+ICAgICAgYW5k IGFmdGVyLCAnYWx3YXlzIGludm9rZScgaW50ZXJjZXB0b3IgcHJvcGVydGllcyB0byB0aGUNCgk+ PiAgICAgIFRyYW5zYWN0aW9uUHJveHlGYWN0b3J5QmVhbiwgc28gc29tZXRoaW5nIGxpa2UgdGhp cyBjYW4gYmUgYWRkZWQuDQoJPj4gICAgIA0KCT4+ICAgICAgUmVnYXJkcywNCgk+PiAgICAgIENv bGluDQoJPj4gICAgIA0KCT4+DQoJPj4gICANCgk+Pg0KCT4NCgk+DQoJPg0KCT4gDQoJPg0KCQ0K CQ0KCQ0KDQo= |
|
From: Colin S. <col...@ex...> - 2003-09-28 20:30:12
|
Jürgen, (Now that you are back I can write some more 'frivolous' emails :-) ). W/regards to adding additional interceptor support to TransactionProxyFactoryBean, I'm not sure I fully agree that it's inherently better or 'cleaner' to apply these to transactional methods only. That is, when thinking, 'what is TransactionProxyFactoryBean (in this modified version)?', you could consider it as a variant of ProxyFactoryBean that implicitly applies a Transaction interceptor (before, after, or in between other interceptors, as we decide makes the most sense). Those other interceptors can themselves decide if they apply, as with ProxyFactoryBean... There is a usecase for calling Hibernate code (needing a session), without needing transactions, and that's mostly for read-only data (where there is no need for isolation provided by a transaction). I realize that I could just use a regular ProxyFactoryBean, but this is all about reducing by maybe 40-50% a bunch of almost identical context config data to set up the interceptors. In a decent size app, this is a lot of extra typing and maintenance. If the additional interceptors applied to only transactional methods, then you would on a case by case method have to decide whether or not to use ProxyFactoryBean or TransactionProxyFactory, or else always use the 'supports' transaction attribute, which doesn't seem that clean to me. Regards, Colin jürgen höller [werk3AT] wrote: >Hi Colin, > >Your issue is caused by the reliance of your Hibernate access code on HibernateInterceptor for correct resource opening and closing. You should apply HibernateInterceptor even when using HibernateTransactionManager, to be able to switch to JtaTransactionManager without hassle. > >Note that when using HibernateTemplate with allowCreate=true (the default), a new Session will automatically enlist itself with the transaction synchronization capabilities of JtaTransactionManager: It will be created on first access, reused throughout the current transaction, and closed on transaction completion. This guarantees correct JVM-level read-write caching with JTA, and seamless switching between HibernateTransactionManager and JtaTransactionManager. > >In your case, I would indeed have suggested to go the standard ProxyFactoryBean route and apply a HibernateInterceptor after the TransactionInterceptor (after is semantically clearer than before, IMO). ProxyFactoryBean is the correct choice for applying multiple interceptors. TransactionProxyFactoryBean is just meant for declarative transaction management without worrying about AOP concepts. > >Obviously, TransactionProxyFactoryBean could be extended to support additional interceptors for its target bean. I would restrict this to transactional methods though: Executing other methods with a Hibernate Session is really not the task of TransactionProxyFactory Bean - I consider a generic ProxyFactoryBean appropriate here. And you can always define methods as transactional but with propagation "supports" instead of "required". > >Such a hook in TransactionProxyFactoryBean should probably be modelled as "additionalInterceptors" property, taking a list of Interceptor instances, getting applied after the implicit TransactionInterceptor for transactional methods. This can take a HibernateInterceptor or JdoInterceptor or the like. Again, an additional HibernateInterceptors doesn't hurt even with HibernateTransactionManager - it will simply participate in the existing thread-binding. > >Juergen > > > -----Original Message----- > From: Colin Sampaleanu [mailto:col...@ex...] > Sent: Thu 9/4/2003 11:10 PM > To: spr...@li... > Cc: > Subject: [Springframework-developer] wrapping an interceptor and Hibernate specific TransactionProxyFactoryBean > > > > I was using the TransactionProxyFactoryBean with the > HibernateTransactionManager, but when I switched to the > JTATransactionManager, got bitten by the fact that I no longer had > anything creating a Hibernate session and binding it to the current > thread, as HibernateTransactionManager used to do by default. > > One verbose solution would have been to have gone back to the old > ProxyFactoryBean mechanism for handling transactions, and just stack a > HibernateInterceptor in front of the transaction interceptor. > > I decided instead to make a Hibernate specific verison of > TransactionProxyFactoryBean. All it does is take a new > HibernateInterceptor property, and in afterPropertiesSet add the > interceptor before the transaction one (however, unlike the transaction > one, it will execute on all invocations, since you may want to run some > methods with a hibernate session, but no transactions. > // allways invoke the Hibernate Interceptor > addInterceptor(hibernateInterceptor); > ... existing code to set up the Transaction interceptor > > Now my questions: > 1: is it worth checking something like this in? I made a cut and past > copy of TransactionProxyFactoryBean, and added the new property and > modified the afterPropertiesSet. Obviously, I could also have just > subclasses the existing class and overriden afterPropertiesSet. That's > probably a better choice, but maybe a bit more dangerous if something > changes in the parent method which is no longer called at all. > 2: is there a better way of doing this? I supposed I could have wrapped > the proxy in another proxy to add the hibernate interceptor. This would > not have required any code changes, but would have made for a lot more > typing in the context. Another option would be to add optional before > and after, 'always invoke' interceptor properties to the > TransactionProxyFactoryBean, so something like this can be added. > > Regards, > Colin > > |