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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to