Author: markt
Date: Wed Jan 27 20:27:04 2016
New Revision: 1727179
URL: http://svn.apache.org/viewvc?rev=1727179&view=rev
Log:
Ensure that when sessions are loaded from the Store that the correct
class loader is used. In most cases it was already set but some code
paths from early in the processing chain (e.g. the Adaptor) could
trigger the loading of a session without setting the TCCL.
Modified:
tomcat/tc6.0.x/trunk/ (props changed)
tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/FileStore.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/JDBCStore.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StoreBase.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/valves/PersistentValve.java
Propchange: tomcat/tc6.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jan 27 20:27:04 2016
@@ -1,3 +1,3 @@
-/tomcat/tc7.0.x/trunk:1190476,1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989
,1668541,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717107,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722645,1722801,1723151,1724435,1724553,1724675,1724797,1724806,1725931,1726631,1726808,1726813,1726815,1726817,1726819,1726917,1726919,1726922-1726924,1727043,1727158
-/tomcat/tc8.0.x/trunk:1637685,1637709,1640674,1641726,1641729-1641730,1643513,1643539,1643571,1643581-1643582,1644018,1648816,1656300,1658801-1658803,1658811,1659522,1663997,1664175,1665086,1666967,1666988,1668634,1669801,1676556,1681182,1681840,1681864,1685827,1689921,1693108,1694291,1694427,1694873,1696379,1701944,1710347,1712618,1712655,1713872,1713998,1714004,1714538,1715207,1716216-1716217,1716414,1717208-1717209,1720235,1720396,1720442,1720463,1721813,1721882,1722800,1723130,1724434,1724674,1724792,1724803,1725929,1725963-1725965,1725970,1725974,1726172,1726175,1726179-1726182,1726195-1726198,1726226,1726576,1726630,1727037
-/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770
809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265
,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907727,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,94
8057,950164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1
094069,1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1190474,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,145311
2,1456666-1456678,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1628978,1631155,1631520,1632584,1634117,1634130,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,166
6966,1666985,1668630,1669800,1676552,1681837-1681838,1681854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716640,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1722807,1722824,1722828-1722829,1722831,1722859,1723127,1723707,1723736,1724427,1724433,1724673,1724788,1724863,1725113,1725183,1725199,1725202,1725204,1725207,1725263-1725264,1725266,1725278,1725282,1725405,1725646,1725649-1725652,1725926,1726177,1726628,1726676
+/tomcat/tc7.0.x/trunk:1190476,1224802,1243045,1298635,1304471,1311997,1312007,1331772,1333164,1333176,1348992,1354866,1371298,1371302,1371620,1402110,1409014,1413553,1413557,1413563,1430083,1438415,1446641-1446660,1447013,1453106,1453119,1484919,1486877,1500065,1503852,1505844,1513151,1521040,1526470,1536524,1539176-1539177,1544469,1544473,1552805,1558894,1558917,1561368,1561382,1561386,1561552,1561561,1561636,1561641,1561643,1561737,1562748,1564317,1568922,1570163,1577328,1577464-1577465,1578814,1586659,1586897,1586960,1588199,1588997,1589740,1589851,1589997,1590019,1590028,1590337,1590492,1590651,1590838,1590845,1590848,1590912,1593262,1593288,1593371,1593835,1594230,1595174,1595366,1600956,1601333,1601856,1601909,1609079,1609606,1617364,1617374,1617433,1617457-1617458,1624249,1626579,1627420,1627469,1632586,1637686,1637711,1640675,1642045,1643515,1643540,1643572,1643585-1643586,1643642,1643647,1644019,1648817,1656301,1658815,1659523,1659564,1664001,1664176,1665087,1666968,1666989
,1668541,1668635,1669802,1676557,1681183,1681841,1681865,1681867,1685829,1693109,1694293,1694433,1694875,1696381,1701945,1710353,1712656,1713873,1714000,1714005,1714540,1715213,1716221,1716417,1717107,1717210,1717212,1720236,1720398,1720443,1720464,1721814,1721883,1722645,1722801,1723151,1724435,1724553,1724675,1724797,1724806,1725931,1726631,1726808,1726813,1726815,1726817,1726819,1726917,1726919,1726922-1726924,1727031,1727043,1727158
+/tomcat/tc8.0.x/trunk:1637685,1637709,1640674,1641726,1641729-1641730,1643513,1643539,1643571,1643581-1643582,1644018,1648816,1656300,1658801-1658803,1658811,1659522,1663997,1664175,1665086,1666967,1666988,1668634,1669801,1676556,1681182,1681840,1681864,1685827,1689921,1693108,1694291,1694427,1694873,1696379,1701944,1710347,1712618,1712655,1713872,1713998,1714004,1714538,1715207,1716216-1716217,1716414,1717208-1717209,1720235,1720396,1720442,1720463,1721813,1721882,1722800,1723130,1724434,1724674,1724792,1724803,1725929,1725963-1725965,1725970,1725974,1726172,1726175,1726179-1726182,1726195-1726198,1726200,1726226,1726576,1726630,1727029,1727037
+/tomcat/trunk:601180,606992,612607,630314,640888,652744,653247,656018,666232,673796,673820,677910,683969,683982,684001,684081,684234,684269-684270,685177,687503,687645,689402,690781,691392,691805,692748,693378,694992,695053,695311,696780,696782,698012,698227,698236,698613,699427,699634,701355,709294,709811,709816,710063,710066,710125,710205,711126,711600,712461,712467,713953,714002,718360,719119,719124,719602,719626,719628,720046,720069,721040,721286,721708,721886,723404,723738,726052,727303,728032,728768,728947,729057,729567,729569,729571,729681,729809,729815,729934,730250,730590,731651,732859,732863,734734,740675,740684,742677,742697,742714,744160,744238,746321,746384,746425,747834,747863,748344,750258,750291,750921,751286-751287,751289,751295,752323,753039,757335,757774,758249,758365,758596,758616,758664,759074,761601,762868,762929,762936-762937,763166,763183,763193,763228,763262,763298,763302,763325,763599,763611,763654,763681,763706,764985,764997,765662,768335,769979,770716,770
809,770876,772872,776921,776924,776935,776945,777464,777466,777576,777625,778379,778523-778524,781528,781779,782145,782791,783316,783696,783724,783756,783762,783766,783863,783934,784453,784602,784614,785381,785688,785768,785859,786468,786487,786490,786496,786667,787627,787770,787985,789389,790405,791041,791184,791194,791224,791243,791326,791328,791789,792740,793372,793757,793882,793981,794082,794673,794822,795043,795152,795210,795457,795466,797168,797425,797596,797607,802727,802940,804462,804544,804734,805153,809131,809603,810916,810977,812125,812137,812432,813001,813013,813866,814180,814708,814876,815972,816252,817442,817822,819339,819361,820110,820132,820874,820954,821397,828196,828201,828210,828225,828759,830378-830379,830999,831106,831774,831785,831828,831850,831860,832214,832218,833121,833545,834047,835036,835336,836405,881396,881412,883130,883134,883146,883165,883177,883362,883565,884341,885038,885231,885241,885260,885901,885991,886019,888072,889363,889606,889716,890139,890265
,890349-890350,890417,891185-891187,891583,892198,892341,892415,892464,892555,892812,892814,892817,892843,892887,893321,893493,894580,894586,894805,894831,895013,895045,895057,895191,895392,895703,896370,896384,897380-897381,897776,898126,898256,898468,898527,898555,898558,898718,898836,898906,899284,899348,899420,899653,899769-899770,899783,899788,899792,899916,899918-899919,899935,899949,903916,905020,905151,905722,905728,905735,907311,907513,907538,907652,907727,907819,907825,907864,908002,908721,908754,908759,909097,909206,909212,909525,909636,909869,909875,909887,910266,910370,910442,910471,910485,910974,915226,915737,915861,916097,916141,916157,916170,917598,917633,918093,918489,918594,918684,918787,918792,918799,918803,918885,919851,919914,920025,920055,920298,920449,920596,920824,920840,921444,922010,926716,927062,927621,928482,928695,928732,928798,931709,932357,932967,935105,935983,939491,939551,940064,941356,941463,943112,944409,944416,945231,945808,945835,945841,946686,94
8057,950164,950596,950614,950851,950905,951615,953434,954435,955648,955655,956832,957130,957830,958192,960701,961948,962865,962872,962881,962900,963106,963865,963868,964614,966177-966178,966292,966692,966863,981815,988448,991837,993042,1001955,1002185,1002263,1002274,1002349,1002359,1002362,1002481,1002514,1003461,1003481,1003488,1003556,1003572,1003581,1003861,1004393,1004409,1004415,1004868-1004869,1004912,1005452,1005467,1005647,1005802,1022120,1022134,1022323,1022415,1022606,1022623,1024224,1024251,1026042,1026784,1026912,1026920,1029767,1033415,1033448,1033842,1033897,1037715,1037794,1037887,1037924,1038041,1041892,1042022,1042029,1042447,1042452,1042494,1043983,1044944,1044987,1049264,1050249,1055055,1055236,1055458,1055975,1056264,1056828,1056889,1059881,1060486,1061412,1061442,1061446,1061503,1062398,1064652,1066244,1066772,1067039,1067139,1069824,1070139,1070420,1070609,1072042,1073184,1073393,1075458,1076212,1078409,1078412,1079801,1081118,1081334,1088179,1088460,1090022,1
094069,1094089,1095138,1097899,1099575,1099586,1099772,1099789,1100145,1100822,1101094,1101144,1124680,1130774,1133014,1137862,1137996,1138950,1138953,1139280,1140693,1141104,1141441,1142043,1142904,1143134,1143150,1145137,1148216,1148471,1152601,1156171,1156519,1164567,1167394,1172233-1172234,1172236,1173614,1174353,1174882,1174884,1175158,1175190,1176799,1177125,1177245,1177850,1177862,1178228,1178233,1178684,1181028,1181136,1184917,1184919,1185200,1185588,1186011,1186104,1186123,1186137,1186153,1186378,1186712,1186763,1186949,1187381,1189240,1189386,1190388-1190389,1190474,1198622,1201576,1203091,1224801,1233426,1243034,1243038,1244567,1298140,1298628-1298629,1304468,1311997,1331766,1333161,1333173,1342498,1342503,1348425,1348461-1348495,1348989,1350294,1351056,1351636-1351640,1352011,1354685,1354847,1354856,1356125,1359981,1371283,1409007,1413552,1413556,1413562,1417282,1430079,1430481,1430567,1435606,1435636,1435642,1438411,1439054,1441348,1446640,1446650,1447012,1453105,145311
2,1456666-1456678,1456713,1456721,1457968,1460342,1460533,1484862,1486875,1492570,1494143,1500062,1503851,1505843,1513148-1513149,1526469,1533312,1536520,1539157,1539173,1540374,1552804,1555163,1558811,1561054-1561065,1561067-1561070,1561072-1561075,1561083,1561190-1561192,1561635,1561640,1561732,1562742,1562746,1564309,1564312,1568921,1574004,1577315,1577324,1577463,1578812-1578813,1586658,1586894,1586959,1588193,1588197,1589737-1589738,1589763,1589837,1589842,1589980,1590018,1590302,1590646,1590648,1590835,1590842,1590911,1593259,1593261,1593335,1593834,1594229,1595171,1595289,1597532,1600955,1600963,1600978,1600984,1601329-1601330,1601332,1601855,1608963,1609061,1609593,1617362,1617365,1617383,1617456,1623392,1624247,1626579,1627033,1628978,1631155,1631520,1632584,1634117,1634130,1637684,1637695,1640655-1640658,1641656,1641660,1641692,1641707-1641718,1641721-1641722,1642564,1642606,1643045,1643054,1643570,1644017,1648815,1656299,1658799,1658802,1659521,1663995,1664174,1665085,166
6966,1666985,1668630,1669800,1676552,1681837-1681838,1681854,1685826,1687242,1689918,1693105,1694290,1694872,1696378,1701940,1710346,1712617,1712654,1713871,1713997,1714002,1715188,1715206,1716213-1716214,1716413,1716640,1716856,1716858,1716881-1716882,1716886,1716894,1720234,1720394,1720439,1720462,1721812,1721881,1722532,1722799,1722807,1722824,1722828-1722829,1722831,1722859,1723127,1723707,1723736,1724427,1724433,1724673,1724788,1724863,1725113,1725183,1725199,1725202,1725204,1725207,1725263-1725264,1725266,1725278,1725282,1725405,1725646,1725649-1725652,1725696-1725697,1725926,1726177,1726628,1726676,1726926
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/FileStore.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/FileStore.java?rev=1727179&r1=1727178&r2=1727179&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/FileStore.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/FileStore.java Wed
Jan 27 20:27:04 2016
@@ -16,7 +16,6 @@
*/
package org.apache.catalina.session;
-import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -29,12 +28,10 @@ import java.util.ArrayList;
import javax.servlet.ServletContext;
-import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.Globals;
import org.apache.catalina.Loader;
import org.apache.catalina.Session;
-import org.apache.catalina.util.CustomObjectInputStream;
import org.apache.juli.logging.Log;
/**
@@ -226,8 +223,8 @@ public final class FileStore extends Sto
return null;
}
- Container container = getManager().getContainer();
- Log containerLog = container.getLogger();
+ Context context = (Context) getManager().getContainer();
+ Log containerLog = context.getLogger();
if (containerLog.isDebugEnabled()) {
containerLog.debug(sm.getString(getStoreName()+".loading", id,
file.getAbsolutePath()));
@@ -237,17 +234,17 @@ public final class FileStore extends Sto
ObjectInputStream ois = null;
Loader loader = null;
ClassLoader classLoader = null;
+ ClassLoader oldThreadContextCL =
Thread.currentThread().getContextClassLoader();
try {
fis = new FileInputStream(file.getAbsolutePath());
- BufferedInputStream bis = new BufferedInputStream(fis);
- loader = container.getLoader();
+ loader = context.getLoader();
if (loader != null) {
classLoader = loader.getClassLoader();
}
- if (classLoader == null) {
- classLoader = getClass().getClassLoader();
+ if (classLoader != null) {
+ Thread.currentThread().setContextClassLoader(classLoader);
}
- ois = new CustomObjectInputStream(bis, classLoader);
+ ois = getObjectInputStream(fis);
StandardSession session = (StandardSession)
manager.createEmptySession();
session.readObjectData(ois);
@@ -259,15 +256,22 @@ public final class FileStore extends Sto
}
return null;
} finally {
- // Close the input stream
+ if (fis != null) {
+ try {
+ fis.close();
+ } catch (IOException f) {
+ // Ignore
+ }
+ }
if (ois != null) {
+ // Close the input stream
try {
ois.close();
} catch (IOException f) {
// Ignore
}
- ois = null;
}
+ Thread.currentThread().setContextClassLoader(oldThreadContextCL);
}
}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/JDBCStore.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/JDBCStore.java?rev=1727179&r1=1727178&r2=1727179&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/JDBCStore.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/JDBCStore.java Wed
Jan 27 20:27:04 2016
@@ -20,7 +20,7 @@ import org.apache.catalina.Container;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.Loader;
import org.apache.catalina.Session;
-import org.apache.catalina.util.CustomObjectInputStream;
+
import org.apache.juli.logging.Log;
import java.io.BufferedInputStream;
@@ -571,12 +571,14 @@ public class JDBCStore extends StoreBase
throws ClassNotFoundException, IOException {
ResultSet rst = null;
StandardSession _session = null;
- Loader loader = null;
ClassLoader classLoader = null;
ObjectInputStream ois = null;
- BufferedInputStream bis = null;
- Container container = manager.getContainer();
- Log containerLog = container.getLogger();
+ org.apache.catalina.Context context = (org.apache.catalina.Context)
manager.getContainer();
+ Log containerLog = context.getLogger();
+ Loader loader = context.getLoader();
+ if (loader != null) {
+ classLoader = loader.getClassLoader();
+ }
synchronized (this) {
int numberOfTries = 2;
@@ -586,6 +588,7 @@ public class JDBCStore extends StoreBase
return (null);
}
+ ClassLoader oldThreadContextCL =
Thread.currentThread().getContextClassLoader();
try {
if (preparedLoadSql == null) {
String loadSql = "SELECT " + sessionIdCol + ", "
@@ -599,27 +602,21 @@ public class JDBCStore extends StoreBase
preparedLoadSql.setString(2, getName());
rst = preparedLoadSql.executeQuery();
if (rst.next()) {
- bis = new BufferedInputStream(rst.getBinaryStream(2));
- loader = container.getLoader();
- if (loader != null) {
- classLoader = loader.getClassLoader();
- }
- if (classLoader == null) {
- classLoader = getClass().getClassLoader();
+ if (classLoader != null) {
+
Thread.currentThread().setContextClassLoader(classLoader);
}
-
- ois = new CustomObjectInputStream(bis, classLoader);
+ ois = getObjectInputStream(rst.getBinaryStream(2));
if (containerLog.isDebugEnabled()) {
containerLog.debug(
sm.getString(getStoreName() + ".loading",
id, sessionTable));
-
- _session = (StandardSession)
manager.createEmptySession();
- _session.readObjectData(ois);
- _session.setManager(manager);
- } else if (containerLog.isDebugEnabled()) {
- containerLog.debug(getStoreName() + ": No
persisted data object found");
}
+
+ _session = (StandardSession)
manager.createEmptySession();
+ _session.readObjectData(ois);
+ _session.setManager(manager);
+ } else if (containerLog.isDebugEnabled()) {
+ containerLog.debug(getStoreName() + ": No persisted
data object found");
}
// Break out after the finally block
numberOfTries = 0;
@@ -642,6 +639,7 @@ public class JDBCStore extends StoreBase
// Ignore
}
}
+
Thread.currentThread().setContextClassLoader(oldThreadContextCL);
release(_conn);
}
numberOfTries--;
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StoreBase.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StoreBase.java?rev=1727179&r1=1727178&r2=1727179&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StoreBase.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/session/StoreBase.java Wed
Jan 27 20:27:04 2016
@@ -19,13 +19,17 @@ package org.apache.catalina.session;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
+import java.io.BufferedInputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
import org.apache.catalina.Lifecycle;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleListener;
import org.apache.catalina.Manager;
import org.apache.catalina.Store;
+import org.apache.catalina.util.CustomObjectInputStream;
import org.apache.catalina.util.LifecycleSupport;
import org.apache.catalina.util.StringManager;
@@ -223,7 +227,23 @@ public abstract class StoreBase
}
- // --------------------------------------------------------- Thread Methods
+ /**
+ * Create the object input stream to use to read a session from the store.
+ * Sub-classes <b>must</b> have set the thread context class loader before
+ * calling this method.
+ *
+ * @param is The input stream provided by the sub-class that will provide
+ * the data for a session
+ *
+ * @return An appropriately configured ObjectInputStream from which the
+ * session can be read.
+ *
+ * @throws IOException if a problem occurs creating the ObjectInputStream
+ */
+ protected ObjectInputStream getObjectInputStream(InputStream is) throws
IOException {
+ BufferedInputStream bis = new BufferedInputStream(is);
+ return new CustomObjectInputStream(bis,
Thread.currentThread().getContextClassLoader());
+ }
/**
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/valves/PersistentValve.java
URL:
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/valves/PersistentValve.java?rev=1727179&r1=1727178&r2=1727179&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/valves/PersistentValve.java
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/valves/PersistentValve.java
Wed Jan 27 20:27:04 2016
@@ -20,11 +20,17 @@ package org.apache.catalina.valves;
import java.io.IOException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
+import org.apache.catalina.Container;
import org.apache.catalina.Context;
+import org.apache.catalina.Engine;
+import org.apache.catalina.Globals;
+import org.apache.catalina.Host;
import org.apache.catalina.Manager;
import org.apache.catalina.Session;
import org.apache.catalina.Store;
@@ -32,6 +38,7 @@ import org.apache.catalina.connector.Req
import org.apache.catalina.connector.Response;
import org.apache.catalina.session.PersistentManager;
import org.apache.catalina.util.StringManager;
+import org.apache.tomcat.util.security.PrivilegedSetTccl;
/**
@@ -47,11 +54,7 @@ import org.apache.catalina.util.StringMa
*
*/
-public class PersistentValve
- extends ValveBase {
-
-
- // ----------------------------------------------------- Instance Variables
+public class PersistentValve extends ValveBase {
/**
@@ -68,22 +71,41 @@ public class PersistentValve
StringManager.getManager(Constants.Package);
- // ------------------------------------------------------------- Properties
+ // Saves a couple of calls to getClassLoader() on every request. Under high
+ // load these calls took just long enough to appear as a hot spot (although
+ // a very minor one) in a profiler.
+ private static final ClassLoader MY_CLASSLOADER =
PersistentValve.class.getClassLoader();
+
+
+ // ----------------------------------------------------- Instance Variables
+
+ private volatile boolean clBindRequired;
+
+ // ------------------------------------------------------------- Properties
/**
* Return descriptive information about this Valve implementation.
*/
+ @Override
public String getInfo() {
+ return info;
+ }
- return (info);
-
+
+ @Override
+ public void setContainer(Container container) {
+ super.setContainer(container);
+ if (container instanceof Engine || container instanceof Host) {
+ clBindRequired = true;
+ } else {
+ clBindRequired = false;
+ }
}
// --------------------------------------------------------- Public Methods
-
/**
* Select the appropriate child Context to process this request,
* based on the specified request URI. If no matching Context can
@@ -95,6 +117,7 @@ public class PersistentValve
* @exception IOException if an input/output error occurred
* @exception ServletException if a servlet error occurred
*/
+ @Override
public void invoke(Request request, Response response)
throws IOException, ServletException {
@@ -114,31 +137,29 @@ public class PersistentValve
// Update the session last access time for our session (if any)
String sessionId = request.getRequestedSessionId();
Manager manager = context.getManager();
- if (sessionId != null && manager != null) {
- if (manager instanceof PersistentManager) {
- Store store = ((PersistentManager) manager).getStore();
- if (store != null) {
- Session session = null;
- try {
- session = store.load(sessionId);
- } catch (Exception e) {
- container.getLogger().error("deserializeError");
- }
- if (session != null) {
- if (!session.isValid() ||
- isSessionStale(session,
System.currentTimeMillis())) {
- if (container.getLogger().isDebugEnabled())
- container.getLogger().debug("session swapped
in is invalid or expired");
- session.expire();
- store.remove(sessionId);
- } else {
- session.setManager(manager);
- // session.setId(sessionId); Only if new ???
- manager.add(session);
- // ((StandardSession)session).activate();
- session.access();
- session.endAccess();
- }
+ if (sessionId != null && manager instanceof PersistentManager) {
+ Store store = ((PersistentManager) manager).getStore();
+ if (store != null) {
+ Session session = null;
+ try {
+ session = store.load(sessionId);
+ } catch (Exception e) {
+ container.getLogger().error("deserializeError");
+ }
+ if (session != null) {
+ if (!session.isValid() ||
+ isSessionStale(session, System.currentTimeMillis())) {
+ if (container.getLogger().isDebugEnabled())
+ container.getLogger().debug("session swapped in is
invalid or expired");
+ session.expire();
+ store.remove(sessionId);
+ } else {
+ session.setManager(manager);
+ // session.setId(sessionId); Only if new ???
+ manager.add(session);
+ // ((StandardSession)session).activate();
+ session.access();
+ session.endAccess();
}
}
}
@@ -164,30 +185,35 @@ public class PersistentValve
if (container.getLogger().isDebugEnabled())
container.getLogger().debug("newsessionId: " + newsessionId);
if (newsessionId!=null) {
- /* store the session in the store and remove it from the manager */
- if (manager instanceof PersistentManager) {
- Session session = manager.findSession(newsessionId);
- Store store = ((PersistentManager) manager).getStore();
- if (store != null && session!=null &&
- session.isValid() &&
- !isSessionStale(session, System.currentTimeMillis())) {
- // ((StandardSession)session).passivate();
- store.save(session);
- ((PersistentManager) manager).removeSuper(session);
- session.recycle();
+ try {
+ bind(context);
+ /* store the session in the store and remove it from the
manager */
+ if (manager instanceof PersistentManager) {
+ Session session = manager.findSession(newsessionId);
+ Store store = ((PersistentManager) manager).getStore();
+ if (store != null && session!=null &&
+ session.isValid() &&
+ !isSessionStale(session, System.currentTimeMillis())) {
+ // ((StandardSession)session).passivate();
+ store.save(session);
+ ((PersistentManager) manager).removeSuper(session);
+ session.recycle();
+ } else {
+ if (container.getLogger().isDebugEnabled())
+ container.getLogger().debug("newsessionId store: "
+ store + " session: " +
+ session +
+ (session == null ? "" :
+ " valid: " + session.isValid() +
+ " stale: " +
+ isSessionStale(session,
System.currentTimeMillis())));
+
+ }
} else {
if (container.getLogger().isDebugEnabled())
- container.getLogger().debug("newsessionId store: " +
store + " session: " +
- session +
- (session == null ? "" :
- " valid: " + session.isValid() +
- " stale: " +
- isSessionStale(session,
System.currentTimeMillis())));
-
+ container.getLogger().debug("newsessionId Manager: " +
manager);
}
- } else {
- if (container.getLogger().isDebugEnabled())
- container.getLogger().debug("newsessionId Manager: " +
manager);
+ } finally {
+ unbind();
}
}
}
@@ -212,4 +238,29 @@ public class PersistentValve
}
+
+ private void bind(Context context) {
+ // Bind the context CL to the current thread
+ if (clBindRequired && context.getLoader() != null) {
+ if (Globals.IS_SECURITY_ENABLED) {
+ PrivilegedAction<Void> pa =
+ new
PrivilegedSetTccl(context.getLoader().getClassLoader());
+ AccessController.doPrivileged(pa);
+ } else {
+
Thread.currentThread().setContextClassLoader(context.getLoader().getClassLoader());
+ }
+ }
+ }
+
+
+ private void unbind() {
+ if (clBindRequired) {
+ if (Globals.IS_SECURITY_ENABLED) {
+ PrivilegedAction<Void> pa = new
PrivilegedSetTccl(MY_CLASSLOADER);
+ AccessController.doPrivileged(pa);
+ } else {
+ Thread.currentThread().setContextClassLoader(MY_CLASSLOADER);
+ }
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]