1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915
|
Java Service Wrapper Revision History.
--------------------------------------
3.5.51
* Fix a bug where some cleanup tasks related to the backend pipe or socket
(usually performed between a JVM shutdown and the next restart) were being
skipped. This was only a problem if the JVM had crashed, was frozen or if the
Wrapper process was abnormally delayed. Since 3.5.47.
* Fix installation failure of Windows Services when using a managed service
account, a group-managed service account, or a virtual account. Also improve
the detection of built-in service accounts, which do not require
authentication.
* Fix an issue on Windows where the 'file.encoding' system property, if
specified in the wrapper.java.additional.<n> properties, was overridden.
* Improve the behavior when the command used to request the Java version fails.
For any failure while waiting for the process to complete, an automatic
restart will be scheduled (as this could simply be due to the system being
temporarily under high load). If, in addition, the process cannot be killed,
the Wrapper will stop.
* Fix status message not showing when the JVM was continued (with SIGCONT) on
macOS.
* Fix a timing issue where some remaining JVM output was sometimes printed
after confirming that the JVM process had completed.
* Increase the width of the 'W' and 'J' columns of the log format to fit the
size of the maximum PID value.
* Change the link order of the Make files for the Community Edition, so that
the libraries appear after the sources. This is done to be more compatible
with some linkers, which only accept this order.
* (Standard) Fix 'wrapper -h' command not returning any hostIds on Microsoft
Azure or Hyper-V Virtual Machines.
* (Standard) Improve messages printed when there is a problem with the license,
and indicate the property name of the key id currently used to help identify
the problematic property set when the license key file contains multiple
keys.
* (Standard) Fix a minor logging problem where the 'D' format was displaying
"unknown" for messages being logged by the main Wrapper instance when
wrapper.single_invocation.notify was set to TRUE.
3.5.50
* (Standard) Fix an issue where the Wrapper would sometimes fail to validate
the license HostId on some Windows installations.
* Fix a log rolling bug where old files were not being purged on Wrapper
startup if the mode was WRAPPER, JVM, SIZE_OR_WRAPPER, or SIZE_OR_JVM.
Since 3.5.45.
* Update the MacOS and Windows installer titles to include the architecture.
This is to avoid confusion between x86 (or universal for MacOS) and arm
installers.
* Add wrapper.check_certificate.default.loglevel property to control the log
level of non-critical errors detected when performing trust verification on
the certificate chain built by the Wrapper. Change the default log level to
DEBUG.
* Enhance security when running on old versions of Windows where only SHA-1
hash algorithm is supported. The Wrapper will shutdown if the signature of
the certificate cannot be verified, as is the case for SHA-2 certificates.
* Stop the Wrapper when the counter signature of the code signing timestamp
was not valid.
* Fix a hung issue on Windows caused by the certificate validation being
slower than the main thread's execution. This could happen on machines with
incomplete certificate installation, and when the Wrapper stopped soon after
it started (e.g when the configuration is incorrect).
* Improve behavior on exit to wait for threads that are still running while the
Wrapper still handles CTRL-C signals, and before displaying the final
"Wrapper stopped" message.
* Fix wrapper.startup_thread.timeout being a few milliseconds shorter than
configured.
* Add missing '-fPIC' compilation option for FreeBSD 32-bit (lack of this
option could cause some errors in the execution of the native library).
* Remove redundant log message when the path to the log file is either
incorrect or doesn't have sufficient permissions.
* Remove misleading status message "JVM process is gone" which was actually for
the JVM instance launched to get the Java version (UNIX only).
* Improve display of the 'J' column in the log format to only show the PID of
the Java process when it's existing. Otherwise "-----" is displayed.
* Improve behavior when requesting a thread dump while the Java process doesn't
exist: skip sending a signal, and simply log a message stating that the JMV
is not running.
* (Standard) Improve the messages printed when there is a problem with the
license, and indicate the location of the license key file currently used to
help when it needs to be replaced.
* (Standard) Remove unnecessary debug message and skip some configuration
loading when launching the Wrapper with a command that doesn't involve a JVM.
* (Profesional) Fix false positive on checking when the JVM process is
continued if an event command completed while the JVM process was in the
stopped state.
* Fix potential issue where a SIGCHLD signal from the JVM could be received by
other running threads of the Wrapper and ignored. This would result in a
slower detection of the JVM shutdown.
* (Standard) Fix memory issues when using wrapper.timezone or
wrapper.java.timezone. Since 3.5.46.
* (Standard) Fix incorrect calculation of the offset when using a timezone with
'UTC' format if minutes where specified. The detailed timestamps printed with
wrapper.timezone.debug_timestamps, which showed the offset of the system time
on Windows, are also corrected.
* (Standard) When wrapper.java.timezone uses (or defaults to) a value with
'UTC' it is now passed to the command line using the corresponding 'GMT'
notation to be compatible with Java.
3.5.49
* Fix high CPU usage observed on certain Unix platforms when running as a
console application. The Windows platform, as well as daemon installations
on Unix are not affected. Since 3.5.47. Applications using version 3.5.48
that do not need to handle stdin may circumvent the issue by
adding wrapper.disable_console_input=TRUE to their configuration file. This
workaround is not recommended for 3.5.47 because of another issue (see
below).
* Reintroduce Solaris SPARC releases in the Delta Pack.
* Fix an issue where the Linux armel and armhf (32-bit) architectures were not
correctly loading the native library. This was only a problem when using the
Delta Pack.
* Fix Windows installers that were ignoring the installation directory if it
was changed by the user.
3.5.48
* Fix a critical bug on UNIX where the Wrapper could get stuck and fail to
restart if a JVM restart was requested by the JVM or Wrapper. This would
happen when wrapper.disable_console_input was set to TRUE, which is the
default when running as a daemon. Since 3.5.47.
* Fix a bug on UNIX where console messages would sometimes be truncated,
causing the next message to start on the same line. This was only a display
problem and did not affect the operation of the Wrapper. The log file was
not affected. Since 3.5.47.
* Windows versions were unchanged from 3.5.47.
3.5.47
* (Standard) Fix a bug where setting wrapper.share.<n>.startup.premapped or
wrapper.share.<n>.startup.failure to 'SHUTDOWN' would cancel the action
specified by wrapper.on_exit.<n>. Since 3.5.30.
* Fix 'Invalid permission eventType: "serviceremote control"' exception when
using a Security Manager. Security Manager has, however, been deprecated
since Java 17 and usage is no longer recommended.
* Fix incorrect return code of Windows Batch Scripts when there is a problem.
* On Windows, Oracle Java version 12 and above start using the default code
page of the UI language (instead of the default ANSI Windows code page). The
Wrapper will add the 'file.encoding' system property to the command line to
be able to print the Java output correctly regardless of the Java version.
* Rework the initialization of the Unix Shell Script: improved validation of
startup arguments, better control of user and permissions, etc.
* Improve the Shell Script so it now updates its SELinux context (type to
'bin_t') during the installation as a systemd daemon, and restores it when
removing the unit. This is required to be authorized to start, and only done
when SELinux is enabled.
* Improve message to indicate the Wrapper log file(s) when the Wrapper is
launched from the Shell Script and fails to start.
* Deprecate the SU_BIN parameter of the Unix Shell Script. The command to
substitute the user is now resolved to 'runuser' when present on the system,
and falls back on 'su' otherwise. This behavior is regardless the start type
(console or daemon). In addition, the RUN_AS_USER feature will now always
check that the root user is used.
* Improve handling of signals sent to the process group of the script so that
they are forwarded to the Wrapper and handled in sync with it. This works
both when running normally or as a substitute user. In particular, this makes
it possible to send interruption requests with CTRL-C on the shell when
running as a user, but also ensures that the script never terminates leaving
the Wrapper process running in the background. When not targeting a process
group, it is advised to send the signals directly to the Wrapper process.
* Launch Java in a new process group. This allows the Wrapper to handle signals
more consistently and solves issues such as the double thread dump happening
when pressing CTRL-\ or sending a QUIT signal to the process group (UNIX).
* (Professional) Add new wrapper.event.<event_name>.command.new_process_group
properties to control whether event commands should be launched in new
process groups.
* (Professional) Add a new setAutoCloseInputStreams() method to the
WrapperProcessConfig class to make it possible to control the mode to read
pipes of child processes. The default is now "true" for UNIX. It was
effectively "false" for previous versions which caused the input stream to
block if sub-child processes were still using the pipes, or in some cases
where the direct child process would crash.
* (Professional) More accurate timeouts when using WrapperProcess.destroy()
and better performances for WrapperProcess.waitFor().
* (Professional) Fix exception being thrown on Windows when launching a child
process if the working directory was changed.
* Improve the cleanup of monitored child process groups when their group leader
is terminated but other members are still running. The Wrapper will make sure
that the group's status is at least checked every 5 seconds.
* Fix a problem where the TestWrapper application in console mode would keep
prompting an action in an infinite loop if the input stream was closed.
* (Professional) The z/OS distributions are not available for this release.
Please contact us if you need them, as we may be able to provide them at a
later date.
3.5.46
* Add a new signed installers for Windows.
* Add new Apple silicon "aarch64" releases.
* Add new FreeBSD 64-bit ARM (aarch64) releases. Built on FreeBSD 13.0.
* Change the architecture name to "arm" for linux 64-bit. "armhf" is still used
for the 32-bit distributions to differentiate with "armel".
* Stop providing new releases for Solaris SPARC. No usage have been reported
recently. Please contact us if there is a need for this platform.
* Add additional checks for os.arch on MacOS so only supported "ppc", "ppc64",
"x86", and "x86_64" will be mapped to the "universal" architecture.
* (Standard) Add new property wrapper.java.timezone to make it possible to
override the value of wrapper.timezone and configure a different timezone for
the Java application. Also add the 'SYSTEM' value to let these properties be
set with the local timezone of the system.
* (Standard) Always make sure to restore the value of the TZ environment
variable set by the Wrapper prior to launching the JVM.
* Fix an advice wrongly reported when using 'UTC' for the value of
wrapper.timezone.
* (Professional) Add a new setNewProcessGroup() method to the
WrapperProcessConfig class to make it possible to control whether or not
child processes will be assigned to a new process group (PGID). The default
is now true for UNIX, it was effectively false for previous versions which
made it easy to end up with orphaned processes which are launched indirectly,
such as via an intermediate bash process.
* (Professional) The shutdown of child processes on Wrapper exit, as well as
when calling WrapperProcess.dispose() were waiting for the soft shutdown
timeout after attempting to send a CTRL-C to a console child proceess. Due
to the way the Windows API works, these CTRL-C signals will never be seen
by the child process, and the timeout will always be used. To avoid this
delay, the Wrapper now immediately terminates console processes as that was
always the end result anyway. This will be revisited if a way to send the
CTRL-C signal can be implemented. Windows processes are asked to shutdown
nicely, and then the timeout is used to wait for them to exit cleanly.
* (Professional) Add WrapperProcessConfig.getSoftShutdownTimeout() method for
consistency.
* (Professional) Fix memory leak when launching a child process with
POSIX_SPAWN. Also improve the FORK_EXEC and VFORK_EXEC methods to cleanly
terminate the child process in case an error occurs while creating it.
* (Professional) Add support of POSIX_SPAWN start type for child processes on
FreeBSD 8+.
* (Professional) Fix log output of child processes not being printed on z/OS
and improve performances on other platforms.
* (Professional) Fix a warning message on UNIX platforms where the Wrapper
would report that an event command exited unexpectedly if
wrapper.event.<event>.command.block.timeout was 0. The command would
otherwise complete correctly. Positive timeouts were working correctly.
* Fix jar files being signed with an older code signing certificate (expiring
on 2020-12-15 but with a timestamp valid until 2027-06-27). The new
certificate is the same as the one used to sign Windows binaries and expires
on 2023-11-19 with a timestamp valid until 2031-01-06.
* Fix wrong path to the id command in the Shell Script. That was mainly causing
an issue when using RUN_AS_USER on Solaris. The srcmstr daemon must be
reinstalled after upgrading the Wrapper.
* (Standard) Fix a problem where no hostIds were listed when using NIC teaming
on Windows Server.
* Normalize paths used in the Unix Shell Script. Non-normalized paths were
causing certain systemd commands to fail.
* Fix exit code not being set to an error (value of wrapper.exit_code.error)
when the JVM is being killed because it is unresponsive while stopping.
* Fix GUI of the Demo application not being scaled correctly with Java 9+ on
Windows. If you were using WrapperManager.nativeGetDpiScale(), you may need
to precede its call with WrapperManager.nativeGetDpiAwareness() to retrieve
the dpi awareness of the process, and WrapperManager.nativeSetDpiAwareness()
to set it to a different value.
* On Windows, automatically switch to monitoring the Java process when it is
redirected from the process launched by the Wrapper. Use
wrapper.java.monitor=LAUNCHED to restore the previous behavior and monitor
the launched process instead.
* Add wrapper.java.monitor.redirect.loglevel to control the log level of
messages printed if a redirection of the java process is detected and when
the monitored process changes.
* Fix the log level of some property warnings. Use the value of
wrapper.property_warning.loglevel.
* Fix an issue where the Wrapper could crash when trying to format a message.
This was observed when the JVM returned a negative exit code.
* (Professional) Fix 'wrapper -h' returning "No valid HostId(s)" on z/OS.
* Improved German translations.
3.5.45
* Fix a problem where Windows binaries were not being signed correctly in the
3.5.44 release. Added additional checks.
* Fix a parsing error causing the Wrapper to hang on startup if the file
'etcetera' (part of the IANA tz database) was present at the location
specified by wrapper.timezone.folder. Removing this file would solve the
issue.
* Add support for encodings added in Java 11 (ISO-8859-16, x-Big5-HKSCS-2001,
x-IBM1129, x-IBM1166, x-IBM1364, x-IBM833, x-MS932_0213, x-MS950-HKSCS-XP).
* Fix a problem where the Wrapper would fail to start if the shell script was
on a path which contained multiple consecutive spaces. (Bug #311)
* When building tests (Community Edition), check the presence of a Javascript
engine instead of assuming its availability based on the Java version. If no
built-in engine is found, an external engine can be specified by setting the
'external.js.engine.dir' property when calling Ant. (Bug #313)
* Add a new _WRAPPER_TIMEOUT setting in the Windows batch scripts which makes
it possible to control the maximum number of seconds to pause on exit when
there is a problem. (Feature #136)
* Make it possible to build the Community Edition with Java 10+ by
automatically using 'javac -h' instead of 'javah'. (Bug #312)
* Use the value of javac.target.version in default.properties (Ant file) as the
minimum version of Java supported by the Wrapper instead of a hard-coded
value (useful when compiling the Community Edition).
* No longer show a warning when Java is launched via a script. Instead the
Wrapper will check that the Java PID is as expected to confirm that Java has
been launched correctly.
* Fix a problem where the Wrapper would show an error on startup if the stdin
pipe was not tied to a console window. This can happen when called within
other programs. Since 3.5.43.
* Modify the DemoApp so its internal Wrapper instance no longer logs to the
main wrapper.log file as that was causing confusion. Fix an NPE in the
DemoApp if the Wrapper was shutdown external to the DemoApp dialog.
* Fix a log rolling issue if the current log file was manually deleted or if it
did not exist because the logging was temporarily turned off. The WRAPPER,
JVM, SIZE_OR_WRAPPER, SIZE_OR_JVM modes were still rolling the old files and
the most recent one ended up having a roll number of "2". Now the rolling
occurs only when a log file without roll number exists.
* Fix an issue where some early messages were logged before the log file was
being rolled on startup.
* Fix duplicate messages generated while loading the configuration: when the
path to the configuration file or the working directory can't be resolved,
when the Wrapper is elevated to control a Windows Service, or in some cases
when properties are not set correctly.
* Use the configured log file, if possible, when an invalid command line
property is found or when the Wrapper fails to load resource properties (not
final). Before a default log file was created in the working directory.
* Fix the log level of some property warnings (wrapper.*.group,
wrapper.*.action, wrapper.event.<event_name>.email.attach_log). Use the value
of wrapper.property_warning.loglevel.
* Fix an issue where the pid file was wrongly detected as stale and removed by
the Shell Script on some Linux systems. This was happening when the path to
the working directory exceeded a certain amount of characters.
* Make it possible to query permissions of a service with WrapperW. The output
will be displayed in the dialog window.
* Print the path of the log file when the Wrapper is launched from the Shell
Script and fails to start.
* Make sure the console output is completely disabled when running as a
background process on UNIX systems. Previously certain messages generated
right after startup or while loading the configuration were printed before
the output was being disabled.
* Fix a bug when the Java version output contained '%' characters. In normal
situations this should not happen, but there might be such issue when
wrapper.java.command is not set correctly.
* Print the output of the command used to request the Java version at the INFO
level if it fails.
* Disable filters for Java version output as they should only apply to the JVM
output printed by the Java application.
* Fix wrapper.java.command.resolve being ignored when querying the Java
version (Unix). This is critical because it could cause the Wrapper to stop.
Since 3.5.44.
* Fix issue on UNIX platforms where jdb was not being detected if used directly
in the value of wrapper.java.command. See wrapper.java.detect_debug_jvm.
* When jdb or javaw are used as the Java command, their output can't be used to
parse information such as the Java version or vendor. The Wrapper now tries
to find the 'java' command in the same directory (or simply 'java' if the
command has to be resolved using the system PATH), and uses it to query
information.
* Fix several messages in the script that were not translated because of single
and double quotes not being escaped correctly. Some also had syntax errors.
* The z/Linux distributions are now built on a IBM z14 machine with RedHat
Linux 7.8.
3.5.44
* Add a log message when a wildcard classpath, defined with a
wrapper.java.classpath.<n> property, does not match any files. The log level
is controlled with the wrapper.java.classpath.missing.loglevel property.
* Add a new wrapper.java.pid.loglevel property which makes it possible to
control when the PID of a newly launched JVM is logged.
* Modify the way the -q, -qs and -qp arguments work to query the status or
permissions of a Windows Service. The configuration file is now required.
This change is not compatible with the implementation in 3.5.43.
* Update the LSB Init Block in the default shell script so it works more
smoothly with older Linux systems using update-rc.d.
* Improve logging when the value of wrapper.java.command is not a Java binary.
* Add property wrapper.ntservice.account.logon_as_service to control whether or
not the Wrapper should add the 'Log on as a service' privilege to the
configured account during installation of the Windows Service.
* Fix issue where the authentication attempt performed during installation of a
Windows Service would fail if the configured wrapper.ntservice.account did
not have the 'Log on as a service' privilege. Since 3.5.42.
* Fix a problem where special service accounts (LocalService, NetworkService
and LocalSystem) could not be used by wrapper.ntservice.account when
installing a service. Since 3.5.42.
* Fix a timing problem where the Wrapper would sometimes claim that the JVM
exited unexpectedly if the JVM requested a stop while starting.
* Sign the binaries in the macosx tar.gz distributions as well as in the
delta pack distributions.
* Add a new signed and notarized package distribution for macosx.
* Stop providing new releases for Windows and Linux Itanium. The Itanium
architecture is discontinued and no usage have been reported recently. Please
contact us if there is a need for these platforms.
* Build the z/OS distribution on z/OS 2.4. Previously z/OS 1.8 was used.
3.5.43
* Rename sh.script.in to App.sh.in in the src/bin directory.
* Create 'App.shconf.in' in the src/bin directory. This template contains a
copy of all settings of the Shell Script. It is recommended to customize this
file rather than the Shell Script to simplify Wrapper upgrades.
* Improve customization of the Wrapper binaries to limit failures when the
target executable is temporarily locked by an external process (often an
antivirus).
* Fix misleading error messages during customization of the Wrapper binaries.
* Fix bug where calls to WrapperManager.signalStarting() were overriding the
disabling of wrapper.startup.timeout (when its value is set to 0). This was
also happening with WrapperManager.signalStopping() and
wrapper.sthutdown.timeout=0.
* Add new '--conf-optional' option to be used when customizing the Wrapper. It
allows the target executable to run without configuration file if the
configuration has been embedded as a binary resource. Without this option,
the configuration file will be required. Previously, Wrapper with embedded
configuration were allowed to continue without configuration file, but could
potentially fail at a later stage.
* Improve logging when the configuration file fails to load, and make sure the
Wrapper always stops if a file was specified but could not be found.
* Add the ability to query the status of a service by specifying its name
instead of the configuration file (e.g. 'wrapper -q=testwrapper',
'wrapper -qs=testwrapper').
* Add new property wrapper.console.quickedit to enable or disable the QuickEdit
Mode of the console attached to the Wrapper process. The default value will
disable the QuickEdit Mode as it can cause the Java application to freeze.
* Fix a problem running the Demo Application with the delta pack.
* Add a new WrapperManager.generateDetailedNativeBaseName(baseName) method
which lets user code generate a base file name based on the current platform.
* Fix a crash that happened when the Wrapper was handling control signals
during its shutdown process. It had no serious implications because the
Wrapper was almost stopped and already disposed, but on Windows it caused to
generate an empty dump file in the working directory.
* Fix a problem where WrapperManager.stop() failed if the native library was
not loaded successfully.
* Fix misleading debug messages describing the JVM and Wrapper exit codes.
* Raise to STATUS the log level of notifications about the JVM exit whenever
it ends with an exit code resulting of a crash on Windows.
* Fix 'demoapp' script file not being executable in the bin folder (UNIX).
* Fix some malformed/corrupted messages in German.
* Fix cases where the JVM was detected as 64-bits on 32-bit systems (for debug
only).
* Fix dialog window not showing if an error occurred while controlling a
Windows Service with WrapperW.
3.5.42
* Add the ability to query and edit permissions granted to users or groups on
Windows Services. With appropriate permissions, the Wrapper can control a
service without prompting the user for Administrator credentials.
* Fix Wrapper not waiting for Network Interfaces when using license keys
prefixed with HostIds (wrapper.wait_for_hostid=TRUE was ignored).
* Fix an issue where Wrapper instances used to control the Wrapper as a Windows
Service were writing the output in wide characters (UTF-16). When the Wrapper
output was piped, the console was reading the pipe output in its code page,
thus causing a bad character translation.
* Fix output issues when the Wrapper is elevated to control a Windows Service:
- if wrapper.console.direct is set to TRUE (default), force using only stdout
to preserve the output order.
- if wrapper.console.direct is set to FALSE, handle stdout and stderr
separately (previously everything was redirected to stdout).
- no longer block when messages are too large.
* No longer prompt for information required to install a Windows Service if the
service already exists.
* Check that the account and password provided are correct during the
installation of a Windows Service, rather than on startup. Also, check that
the account has the service privilege enabled.
* Handle the Windows Service password more securely and load it in memory only
when required.
* Add new properties wrapper.monitor_exit and wrapper.java.monitor_exit, which
are used by the --setup (-su) command on Windows to allow the Event Log to
monitor the Wrapper or Java processes whenever they exit. This is useful to
diagnose cases where the Wrapper or Java are being killed by another process.
* Change the way HostIds are generated on Windows and allow HostIds tied to
wireless network interfaces.
* No longer automatically stop a Windows Service prior to updating it. If the
service is running while the user attempts to update it, the command will
fail.
* Change the default value of wrapper.java.version.timeout to 30 seconds
(previously it was 10 seconds).
* Fix cases where the Java version was not resolved to its default value if it
couldn't be retrieved from the JVM output (for example when
wrapper.java.version.timeout elapsed). This was causing the Wrapper to stop.
* Add a debug message logged whenever stdout or stderr are reassigned by the
Java application. This helps understand cases where the standard streams are
no longer forwarded to the Wrapper output.
* Fix a problem where the code of the Shell Script resolving the status of a
daemon was checking the presence of some commands which were actually not
used. This was causing an incorrect status reported when the PATH environment
variable did not contain the location of the commands.
* Improve the way a daemon is installed and removed using the tools available
on the different Linux distributions.
* Remove support for Linux PPC-BE. This architecture is discontinued for lack
of usage.
3.5.41
* Fix java.lang.IllegalArgumentException occuring when printing the usage of
the WrapperSimpleApp, WrapperJarApp, WrapperStartStopApp integration methods.
* Ignore wrapper.java.additional.auto_bits and
wrapper.java.additional.auto_bits.<platform> for Java 9 and above. This means
that the "-d32" or "-d64" options will no longer be added to the Java command
line. These options were deprecated in Java 9 and their usage started to
cause a fatal exception after being removed in Java 10.
* Add new environment variable 'WRAPPER_RUN_MODE', which is set to 'console'
when running as a console, or 'service' when running as a Windows Service /
Unix Daemon.
* Add new environment variable 'WRAPPER_BASE_NAME', which is set to the binary
name without the extension, and without the OS, architecture and bits (if
included in the name).
* Change the name of default configuration file to be the value of
'WRAPPER_BASE_NAME' suffixed with '.conf'. This means that the default
configuration file when using the delta pack will no longer include the OS,
architecture and bits.
* No longer require for a network interface to be active for its HostId to be
used by the Wrapper.
* Fix delay on startup which may occur when the IP address of the machine is
resolved via DNS that is not configured correctly (Unix).
* Fix a bug where the Wrapper failed to parse the version of Java and stopped
when wrapper.javaio.use_thread was set true. Since 3.5.35.
* Fix a bug where the Java version failed to be parsed on certain JVM
implementations (observed on Raspbian with openjdk 9+).
* Fix an issue where threads were not safely used on HPUX (Itanium and PA-RISC),
and inside libwrapper.so (Linux and FreeBSD). For instance, this was causing
repeated log errors when the Java IO thread (wrapper.javaio.use_thread=TRUE)
was reading no byte from the pipe.
* Fix rare cases where the WrapperW log dialog was displayed without message
or with garbled characters.
* Add output in the log for a crash dump to make it clear if the Wrapper binary
had been customized.
* Modify the debug message when a language resource fails to be loaded.
* Fix a crash on Windows when wrapper.lang.windows.encoding was set and the JVM
output contained certain C formatting sequences like '%s'. Since 3.5.35.
* Improve detection of Linux distributions in the Shell Script and fix Amazon
Linux not being recognized.
* Fix a crash when the Wrapper prompts the user for a password during the
installation of a Windows Service. Since 3.5.33.
* Fix an issue where non-ASCII characters were not read correctly in the
password input by the user during the installation of a Windows Service.
* Deprecate wrapper.max_hostid_timeout in favour of
wrapper.wait_for_hostid.timeout, and change the default value to 15 which is
the maximum number of seconds that the Wrapper should wait for Network
Interfaces to come up. Previously the default value was 0 to wait
indefinitely.
* Add new property wrapper.wait_for_hostid.strict to force waiting for a
specific hostId up to the value of wrapper.wait_for_hostid.timeout. The
default value if FALSE which tells the wrapper to stop waiting once at least
one network interface is found.
* Always flush each log output to the log file on startup until the Wrapper
enters its cycle to monitor the application.
3.5.40
* Fix a segmentation fault on UNIX systems when the user of the Wrapper process
is not part of the group specified by a wrapper.*.group property.
* Add Full RELRO to all Linux Wrapper binaries (except zLinux and Linux ia64).
RELRO is a security measure which protects against types of GOT-overwrite
memory corruption attacks.
* Enhance security with FORTIFY_SOURCE level 2 (buffer overflows detection) for
Linux (except zLinux, Linux x86 32-bit and Linux ia64) and MacOSX.
* Prevent parallel installations of the Wrapper as a daemon using different
service management tools.
* Fix wrong status reported when the daemon was installed with systemd and the
SERVICE_MANAGEMENT_TOOL variable was changed to a different system. This was
changing the behavior when installing, removing, or printing the status of a
daemon. Wrong usage or false positive on checking script arguments were also
observed.
* Fix potential memory corruption when printing the certificate information on
Windows.
* Add the ability to suspend & resume timeouts while the JVM is running. These
two actions can be triggered by filters, timers, on a deadlock check, on a
ping timeout, using the command file, or from the Java code by using the new
WrapperManager.suspendTimeouts() and WrapperManager.resumeTimeouts() methods.
This gives a way to tell the Wrapper not to worry about the JVM being
unresponsive while the Java application is performing a long blocking task.
* Improve the command file by trimming trailing spaces before processing the
command. Trailing spaces caused to interpret the last argument of some
commands as empty instead of NULL.
* Fix a rounding issue causing the timeouts of the JVM states to be slightly
inaccurate (less than one second).
* Fix sh-incompatible syntax issues in the shell script introduced in version
3.5.38, and version 3.5.36 when RUN_AS_USER is set.
3.5.39
* Add the ability to set the wrapper.*.group properties with a group id.
* Improve logging messages when wrapper.*.group properties are set to invalid
values.
* Fix an issue where WRAPPER_JAVA_VERSION, WRAPPER_JAVA_VERSION_MAJOR,
WRAPPER_JAVA_VERSION_MINOR, WRAPPER_JAVA_VERSION_REVISION were not set if the
Java version failed to be parsed and was resolved to the value of
wrapper.java.version.fallback or the minimum supported version.
* Fix an issue introduced in 3.5.38 where a daemon installed with systemd would
fail to start and stop on a system boot or when using systemctl.
3.5.38
* Add support for 64-bit ARMHF platforms (aarch64). Built on SUSE Linux
Enterprise Server 12 SP4 (glibc 2.22).
* Fix a problem where the Wrapper, running as a console application, and the
JVM were not cleanly shutdown on Windows Vista, Server2008 and above when the
user logged off.
* Add new property wrapper.user_logoffs.message to change the message displayed
by Windows when the Wrapper is stopping and blocking a user log off.
* Fix a problem on UNIX where the Wrapper could hang trying to read from the
output pipe of a JVM if the fork to launch the JVM process failed. This was
happenning when the maximum number of processes available for the user
(ulimit -u) was hit perfectly.
* No longer show debug output "active log file changed" when the configuration
is loaded.
* Fix misleading messages when setting wrapper.lang to an unknown locale name.
* Stop printing warnings about missing mo files. Only show messages if there
was an error while loading a language file that exists but is invalid.
* Fix a bug where the Wrapper considered that the wrapperw process had an
attached console. This was causing several small issues: performance decay
in case of intensive logging, irrelevant warning about QuickEdit mode being
enabled, and inability to use certain locales when the OEM encoding, usually
used for consoles, was not compatible.
* Improve the error message logged when all of the ports in the configured port
range are already in use.
* Fix a crash in WrapperManager.nativeGetPortStatus() caused by an unhandled
return code while checking on the status of the port to be used by the JVM to
connect to the Wrapper (Windows only). This problem was introduced in version
3.5.27, but has only been seen once. The crash is only possible immediately
after the JVM is launched. It can also be worked around by using a pipe rather
than a socket with the wrapper.backend.type property.
* Add new set of properties wrapper.group and wrapper.*.group to change the
group of several files created by the Wrapper on Unix systems.
* Fix a bug introduced in 3.5.37 where Shell Script invocations during the
Wrapper execution were deleting the PID file set in the configuration file.
The status command, especially, was not only deleting the PID file, but then
also returned a wrong status assuming the Wrapper process was gone.
* Fix a bug where the Java version failed to be parsed on HPUX Itanium. The
suffix "-hp-ux" being attached to the version was causing the failure.
* Add new property wrapper.java.version.fallback which will be used in case the
Wrapper fails to parse the output of 'java -version'. If this property is not
set, the Java version will be resolved to the lowest supported version, but
the Wrapper will stop when certain properties requiring the Java version are
used.
* No longer stop the Wrapper when failing to write the lockfile on Windows, and
allow it to be written by Windows Services. These changes were made to match
with the behavior on Unix. The lockfile is not used by the Windows system,
but is made available for external applications that would make use of it.
* Add 'WRAPPER_PERCENTAGE' to represent '%' characters in the values of
configuration properties. Usage of this variable solves a syntactic ambiguity
arising when two or more % characters are used, causing the content in
between to be interpreted as an environment variable.
* Fix '.shconf' file not being loaded when the Shell Script has a '.sh'
extension.
* Fix a crash when installing the Wrapper as a Windows Service, happening if
the binaries contained embedded configuration and '-' was used in place of
the configuration file in the command line used to launch the Wrapper.
* Fix an issue where wrapper.console.flush and wrapper.internal.namedpipe were
copied to the command line of the Windows Service when the Wrapper was first
launched for installation without Administrator privileges. This would affect
performance of interactive services if a console was attached and visible.
* Fix FIXED_COMMAND being ignored when set in the .shconf file.
* Add value 'both' for the PASS_THROUGH variable of the Shell Script & Windows
Batch files to allow both passing script arguments as Wrapper properties and
application parameters. See the description in the scripts for usage.
* Restrict usage of arguments passed to the Shell Script & Windows Batch files,
for only the commands that make use of them, and when PASS_THROUGH is not
disabled. On Windows, commands that can be used with arguments are 'console',
'install', 'installstart' and 'update'. On UNIX, only the 'console' command
and, if not installed as a UNIX Daemon, the 'start', 'restart', 'condrestart'
commands. Unlike on Windows, arguments are not stored when installing a UNIX
Daemon, so this restriction was added to avoid cases where the script can be
manually called with arguments, and automatically launched without arguments
on a system boot.
* Several small corrections in the Shell Script & Windows Batch files,
including improved warnings and error messages, and a better help shown in
case of a wrong command input.
* Add a 'README.txt' file in the bin folder on the Windows releases to explain
about the popup "Windows protected your PC" that might show up when executing
the batch files. In production, this readme file can be removed.
3.5.37
* Load the wrapper.ntservice.preshutdown.timeout property during the
installation of a Windows service and no longer when starting the service.
The preshutdown timeout value is stored in the service configuration, which
can only be changed by a user with sufficient permissions, and not all users
who start Windows Services have these permissions.
* Make it possible to use system locales with an encoding notation that is not
directly supported by iconv, if the canonical alias for that encoding is
supported.
* Fix a memory corruption happening when the configured locale encoding is not
supported by iconv.
* No longer show a warning when the configured locale matches a system locale
with a default encoding.
* Fix a locale issue when launching the Wrapper with RUN_AS_USER set in the
Unix shell script. Depending on the OS and how the Wrapper is launched,
either the 'runuser' or 'su' commands can be used, but until now, only 'su'
was using the system locale for the forked process. Now, the system locale is
explicitly passed to the forked process when using runuser to ensure the same
behavior with both commands.
* Fix the initial value of the time passed since the last JVM output (displayed
with the 'R' column of the log format), which was '99999999' when launching
the JVM instance used to get the Java version. It now displays the time since
the JVM has started.
* Fix heading and tailing tab characters not being trimmed when parsing the
lines of the configuration file and timezone file. This was causing
properties and directives preceded by a tab to be ignored.
* Fix a problem where the configuration file could not be read if it contained
characters that were not supported by the encoding of the context in which
the Wrapper was launched. It is now possible to change the encoding by using
wrapper.lang.<platform>.encoding and thus give the Wrapper a second chance
to read the configuration file and convert it in the correct encoding.
* Fix a problem where include configuration files containing corrupted
characters were skipped instead of causing a fatal error.
* Add new environment variable: WRAPPER_JAVA_VENDOR. This variable is set after
the configuration is loaded, when parsing the 'java -version' output.
* Improve handling of the customize command line and logging of errors in case
it is malformatted.
* Make it possible to skip the configuration file by specifying '-' in the
command line used to launch the Wrapper if the binary has been customized to
embed the configuration. This allows the user to append command lines
properties after the '-' and override the default configuration.
* Add the ability to register a native exception handler in Windows versions of
the Java process by passing the -Dwrapper.register_native_handler=TRUE system
property to the JVM. This can be useful in tracking down the cause of a JVM
crash.
* Add new raiseExceptionNative() and raiseFailFastExceptionNative() methods in
the WrapperManager class which can be useful in testing JVM crash recovery.
* Make it possible to combine log rolling by date with any other existing modes
(SIZE, WRAPPER, JVM, SIZE_OR_WRAPPER, SIZE_OR_JVM).
* Change the default value of wrapper.logfile.purge.sort to 'NAME_SMART' for
all rolling modes. Before the default value was 'TIMES' except when rolling
by date. 'NAME_SMART' will purge the log files sorting them using the dates
and indexes included in their names. With this mode, the files will always be
purged in the correct order without being affected by manual edits which
cause their last modified dates to be changed.
* Add a warning on startup when the Wrapper is running in a console with
QuickEdit mode enabled (Windows), and a property
wrapper.console.quickedit.loglevel to control its log level. The QuickEdit
make it easier to select text in the console, but should be used with caution
as selecting text will freeze the Wrapper and block the Java application.
* When running the delta pack on a 64-bit OS, the script launching the Wrapper
will first send a request to resolve whether the license is 32-bit or 64-bit,
then launch the appropriate Wrapper binaries. Before the binaries matching
the OS bits was used.
* Add an optional source file which can contain the customized configuration of
the UNIX shell script. This file will be executed after setting the variables
on the top of the script, giving the user a chance to override any of them.
The file must have the same basename as the script and suffixed with a
'.shconf' extension. This should allow the user to keep the shell script in
its original state, and make it easier to upgrade it.
* Set the default values of the APP_NAME and APP_LONG_NAME variables in the
UNIX shell script. APP_NAME will default to the name of the shell script,
and then APP_LONG_NAME will default to the value of APP_NAME.
* Add a property wrapper.forced_shutdown.delay to control the minimum amount of
time required between two CTRL-C or TERM signals to initiate a forced
shutdown. The default value is 2 (200ms) to prevent double signals from
forcibly shutting down the application.
3.5.36
* Add new properties wrapper.java.additional.<n>.java_version.min and
wrapper.java.additional.<n>.java_version.max to allow passing different
options to the JVM depending on the Java version.
* Allow WRAPPER_JAVA_HOME to be updated on each JVM restart. This variable is
set when the Java command is located using the Windows registry and cleared
when using wrapper.java.command. Previously, this variable was final, meaning
that once it was set it could not be changed, causing potential mismatch with
the location of the Java command being used.
* Ensure that a variable cannot be set by the user if it is also used by the
Wrapper internally. Before, this was only done for certain variables but not
those set after the configuration is loaded (such as the WRAPPER_EVENT_* and
the WRAPPER_JAVA_HOME variables). For any conflict, a warning message will be
logged and the value set by the user will be ignored.
* Add new environment variables: WRAPPER_JAVA_VERSION,
WRAPPER_JAVA_VERSION_MAJOR, WRAPPER_JAVA_VERSION_MINOR and
WRAPPER_JAVA_VERSION_REVISION. These variables are set after the
configuration is loaded, when parsing the 'java -version' output.
* Add new environment variables WRAPPER_VERSION and WRAPPER_EDITION.
* Deprecate wrapper.environment.dump in favor of
wrapper.environment.dump.loglevel and generate a new dump each time the
configuration is reloaded if wrapper.restart.reload_configuration is set to
TRUE.
* Add new properties wrapper.java.additional_file.required and
wrapper.app.parameter_file.required.
* Allow the Wrapper to be launched without specifying a configuration file if
the binaries have been customized with embedded properties.
* Fix insufficient buffer size causing the Wrapper to crash when printing large
messages in UTF-8 on Windows.
* Change the default value of the #properties.on_overwrite.loglevel directive
to 'AUTO' which is resolved to:
- 'WARN':
- When a property is overridden within the same configuration file or in a
file with a lower include depth than the file of the previous
definition;
- When a final property embedded during customization is overridden.
- 'DEBUG': in all other cases.
* Fix an issue where the Wrapper ignored systems properties surrounded by
double quotes and referenced in the wrapper.java.additional.<n> properties
(Windows only). Instead of giving priority to the properties of the
configuration file, the Wrapper was creating duplicates in the Java command
line when using the same system properties internally.
* Fix an issue where environment variables were expanded too early while
embedding configuration properties into the Wrapper binaries. Now they are
left untouched and expanded at runtime. During customization, the properties
and variable definitions will be stored as a binary resource in the original
order of the configuration file to ensure that variables will be expanded
with the same rules as when loading from the file.
* Fix a bug where the Wrapper failed to parse the Java version if some system
messages were inserted before the JVM output.
* Fix a bug causing the Wrapper to sometimes freeze or crash when launching a
child process on UNIX systems other than Linux (observed on AIX).
* Enable the wrapper.console.title property to be reloaded when
wrapper.restart.reload_configuration is set to TRUE.
* Use the '-K PIC' option instead of '-K pic' when compiling the Wrapper 64-bit
binaries (but not for the native library) on Solaris SPARC. This was required
as the size of the binaries increased, but should not affect the Wrapper
behavior.
* Add a new property wrapper.registry.java_version, which makes it possible to
target a specific version of Java when locating the command using the Windows
registry. If this property is not set, the Wrapper will use the
CurrentVersion string of the registry. Note that Java 9 and above use a
different location in the Windows registry, so by default the Wrapper will
first search in this new location to prefer recent JVMs.
* Fix a bug where a daemon installed with systemd would fail to start if the
path to the shell script contained spaces.
* Fix corrupted messages logged by the native library if the system encoding
and the JVM encoding were different. This was most noticeable when using
localization on Windows (on UNIX systems, this would only occur if
'file.encoding' was manually added to the JVM options).
* Add a check to make sure that the UNIX shell script can be accessed using an
absolute path. If not, the permissions to each intermediate folder will be
listed and the script will stop.
* Other small fixes, performance improvements and corrected log messages.
3.5.35
* Fix a bug where the icon of the hidden console allocated by wrapperw
reappeared in the taskbar whenever the Java application opened a full screen
window. If this would occur the icon will be quickly hidden, but a flicker
may be observed on the taskbar as the icon will still briefly show up.
* Fix a bug introduced in 3.5.31 where setting wrapper.logfile to a blank value
was not disabling file logging. Instead the Wrapper was showing a warning and
fell back using the default log file in the working directory. This version
restores the ability to disable file logging with a blank value.
* Handle the backend communication (via pipe or socket) from the native Wrapper
to the JVM in UTF-8. Before, the encoding of the current locale was used, but
some encodings could not support all characters when the Java side of the
Wrapper was reading the configuration.
* Fix string conversion issues on the native library happening when the JVM was
using a default encoding that did not match the system encoding. This
resulted in unreadable JVM outputs.
* Add the ability to parse any encoding specified in the JVM arguments (via
file.encoding, sun.stdout.encoding or sun.stderr.encoding) and read the JVM
output using the same encoding.
* Deprecate wrapper.lang.encoding in favor of wrapper.lang.unix.encoding and
add wrapper.lang.<platform>.encoding to specify an encoding per platform.
While Unix systems often use the same syntax for encodings, Windows uses code
pages instead of names. The new created set of properties helps setting the
encoding used by the Wrapper in a cross-platform way. The specified value
will be both used to encode the JVM output and the Wrapper log output.
* Improve portability of wrapper.lang.unix.encoding. If its value doesn't match
any encoding of the locales installed on the system, the Wrapper will search
for a match with a different notation of the same encoding (without case
sensitivity, dashes, etc.).
* Add wrapper.jvm.encoding to control the default encoding of the JVM. Usage of
this property requires Java 8 and above, and should be limited to cases where
the encoding of the JVM has to be different from the Wrapper output encoding.
Otherwise wrapper.lang.[windows|unix].encoding is preferred.
* Improve the way the encoding is passed to the JVM on the different platforms:
- On Windows, since version 3.5.8 (Professional and Standard Editions),
file.encoding was added to the JVM arguments to ensure that the Wrapper
always reads the JVM output using a suitable encoding for its own language
regardless of the OS language. However it forced the Java application to
use an encoding that may not be appropriate. From now on, the encoding is
passed to the JVM only if wrapper.lang.windows.encoding or
wrapper.jvm.encoding are set, or if the version of Java is older than 7
(recent versions of Java have their default encoding set to the default
ANSI Windows code page, like the Wrapper, but that was not always the case
on older versions of Java).
- On MacOSX, JVMs older than version 7 have their default encoding set to
"MacRoman" regardless the current locale. This caused some encoding issues
because the Wrapper uses the encoding of the locale to read the JVM output.
To correctly read the output of those JVMs, the Wrapper sets file.encoding
to the locale encoding (unless it is already present among the JVM
arguments).
- On all other UNIX platforms, the JVM encoding is automatically resolved
from the current locale, so it is only added to the JVM arguments if
wrapper.jvm.encoding specifies a different value.
* On Windows, user.language and user.country will be set and passed to the JVM
whenever wrapper.lang differs from the language and country of the UI.
Previously only user.language was passed.
* Make it possible to use wrapper.lang.folder, wrapper.lang.domain,
wrapper.lang.window.encoding and wrapper.lang.unix.encoding without setting
wrapper.lang. This can be useful if any of this configuration needs to be
changed while still using the default language of the OS. On Windows, if
wrapper.lang is set to 'DESKTOP' or 'DEFAULT', the encoding must be set to
'ANSI', 'OEM' or 'UTF-8' to ensure a correct encoding through the different
platforms.
* Fix garbled messages when exceptions are raised from the native library on
UNIX.
* Fix an issue where the Wrapper failed to load a language pack (*.mo) other
than those provided by default (German and Japanese).
* Fix wrong exit code (0) returned in case the Wrapper would fail to launch a
JVM.
* Allow wrapper.exit_code.error to be used at an earlier stage if the Wrapper
has to stop while loading the configuration (for example when duplicate
properties are found with #properties.on_overwrite.exit being set to TRUE).
* Allow the CPU affinity of the Wrapper process to be changed when the
configuration is reloaded.
* Add wrapper.java.version.min and wrapper.java.version.max to control the
versions of Java for which the Wrapper is allowed to run. Out of the
specified range, the Wrapper will stop.
* Fix wrapper.console.title being ignored with wrapperw.exe and
wrapper.ntservice.console set to TRUE.
* Add four customization options (properties-default, property-file-default,
properties-final, property-file-final) to include configuration properties
into the Wrapper binaries (Windows). The properties specified with the
'default' options can be overridden from the configuration file or the
command line, whereas those specified with the 'final' options are marked as
final and cannot be overridden.
* Add a new property, wrapper.properties.dump.format, to print various kinds of
information when dumping configuration properties. Note that the default
formatting changes from 'NAME=VALUE' to 'SOURCE | FINAL | NAME | VALUE'.
* Add a new property wrapper.test.no_jvm. By setting it to TRUE, the Wrapper
will run until it is about to launch a JVM and then will shutdown. This can
be useful to test a configuration, confirm the license status, check
properties or environment variables dumps, etc. without starting the Java
application.
* If wrapper.timezone is set, -Duser.timezone will be added to the Java command
line to synchronize the time between the Java application and the Wrapper. It
is possible to pass a different timezone using one of the
wrapper.java.additional.<n> properties, in which case the Wrapper will not
add its own timezone to the Java command line.
* Improve Linux distribution detection in the shell script by checking that
update-rc.d is present on the system before installing the daemon. This
corrects an installation failure on Amazon Linux AMI.
* No longer use IBM Advanced Toolchain when building the Wrapper for Linux
PPC-LE. Advanced Toolchain was introduced in v. 3.5.34, but since then some
users reported that the Wrapper binaries could not be executed on their
machine.
* Fix a bug happening on Red Hat Enterprise Linux, CentOS, Amazon Linux AMI and
Fedora, where the logfile was not rolling if the ROLLNUM token was used
inside the value of wrapper.logfile.
* Always make sure to process queued log messages before the Wrapper exits on
UNIX platforms (previously this was only done on Windows).
3.5.34
* Fix a memory access violation when the Wrapper uses localization files.
* Fix minor memory leaks (after validating the certificate and when launching
child processes).
* Improve logging when establishing connection to an SMTP server and when
sending emails.
* Dual sign the Wrapper binaries with SHA-1 and SHA-2 hash algorithms and
timestamping to allow stronger verification at the OS level while keeping
compatibility with older versions of Windows that don't support SHA-2.
* Add parameter "--silent" to never show the log dialog when customizing
wrapperw.exe.
* Return an exit code of 1 whenever the customization of wrapper.exe failed.
Previous versions were always returning 0.
* Improve the detection of the location of several commands used by the shell
script when performing actions like detecting the service management tool.
* Remove the ID_BIN variable defined on the top of the script file, as it was
ignored on most platforms. The location of the id command is now
automatically resolved.
* Fix methods of the shell script to restart a daemon installed with launchd
or upstart. They behaved like 'condrestart', which means they exited with an
error code of 1 if the service was not running.
* Fix the condrestart command of the shell script to use built-in restart
methods of upstart, systemd, launchd and src, instead of performing a stop
followed by a start.
* Improve messages when starting/stopping/restarting the Wrapper daemon with
the different service management tools available on Unix systems.
* Fix errors when querying the status of a service on AIX without being root.
* Add a new property, SYSTEMD_KILLMODE, in the shell script to control how
systemd should kill the Wrapper child processes on shutdown. When using the
Professional edition, it may be useful to set this property to 'process'.
This will prevent systemd from killing detached child processes that should
normally be left running on shutdown.
* Many improvements in the Japanese and German translations.
3.5.33
* Fix a false positive when detecting Upstart on Linux.
* Fix a bug where it was required to register the Wrapper to the Event Log on
Windows in order to send messages to a remote syslog server via UDP.
* Fix a memory leak when sending messages to a remote syslog server. Since
3.5.27.
* Fix wrong exit code when the Wrapper was configured to shutdown on a ping
timeout. The exit code was always 1 whereas it should be the value of the
wrapper.exit_code.error property.
* Check that the configured service management tool is available before
installing a daemon on Linux and return an exit code of 1 whenever the
installation fails.
* Add new properties wrapper.ulimit.data.{soft|hard} to limit the size of the
data segment of any process started by the Wrapper. It is similar to running
the command "ulimit -d X" in a terminal.
* Improve the processing of the command file by ignoring blank lines and any
spaces before the command.
* Correct invalid exit code that may be written in the command file along with
a STOP command. If the exit code is out of the range 0-255, it will be
resolved to the value of the wrapper.exit_code.error property.
* Improve messages when the Wrapper is paused or resumed.
* Fix a bug where, on certain UNIX platforms, the locale was not correctly set
from the environment at startup.
* Fix a bug on FreeBSD where conversions of JVM outputs to a different encoding
(specified with wrapper.lang.encoding) systematically failed because the
iconv library was not loaded by the native library.
* On FreeBSD, it has been observed that certain versions of iconv fail to
convert some characters like backslashes when the SJIS encoding is specified.
In such case the Wrapper will consider SJIS as unsupported and fall back
using the encoding of the console which launched the Wrapper.
* Fix garbled question marks that appeared in messages logged while performing
actions (install, start, pause, etc.) on a Windows service when the Wrapper
language was different than the system language.
* On Windows, instead of printing system errors in the language of the UI, the
Wrapper will now first try to use the language specified in the configuration
(English for the community edition).
* Enhance security by adding a linker option to enable ASLR (Address Space
Layout Randomization) on Windows Vista and above (Windows Itanium not
supported), and by attempting to enable DEP (Data Execution Prevention) right
after the Wrapper is launched (Windows XP SP3 and above). DEP enforcement
will only affect 32-bit versions as Windows automatically enables DEP for
64-bit binaries.
* Fix double thread dump issue when pressing CTRL-\ while the Wrapper is
running as a console on Linux. The problem remains on other UNIX platforms.
* Fix a problem where backslashes in the path of the log file, configured with
the wrapper.logfile property, were not being handled correctly resulting in
the Wrapper being unable to create the log file (Unix only).
3.5.32
* Fix a bug introduced in 3.5.31 where the Wrapper did not clean up child
processes when shutting down.
* Fix a bug on z/OS where commands were ignored if the command file contained
an EBCDIC newline character.
* In the script file, stop using "runuser" when running the Wrapper in console
mode and use "su" instead to handle signals properly.
* In the script file, it is now possible to pass options to the command
"runuser" with $SU_OPTS.
* Fix an issue where some messages coming from Wrapper invocations used to
control the Wrapper as a service were not marked with the "wrapperm" logging
source.
* Fix a memory fault happening when the Wrapper exits after failing to write
the pid file. This was causing to return 139 instead of the normal exit code.
Since 3.5.31.
* Fix a minor memory leak when sending emails.
3.5.31
* Fix script file to resolve the architecture name correctly on Z/Linux.
* Change the default behavior of the script file to automatically detect the
service management tool on Linux and AIX. See 'SERVICE_MANAGEMENT_TOOL' in
the script file.
* Add new properties wrapper.ulimit.nofile.{soft|hard} to limit the use of open
files. It is similar to running the command "ulimit -n X" in a terminal.
* Fix a bug introduced in 3.5.30 where the log file was opened for outputs with
a log level lower than the value specified by wrapper.logfile.loglevel. This
could cause a performance issue if the wrapper.logfile.close.timeout property
was set to a low value as it would cause to reopen the file regularly.
* Fix a bug where messages generated shortly after the Wrapper starts could not
be redirected to the configured log file. This was happening when using a
custom working directory and when the path to the log file was set relative
to it.
* Fix issues when processing queued log messages which could result in minor
memory leaks and dysfunction in the way log file change events are fired.
* Fix a problem where the log rolling by date stopped working if at some point
the Wrapper could not access the configured log file and switched to the
default log file. From now on, the rolling will continue as soon as the
configured log file becomes available. As for the default log file, it is
always set up to roll with another single file, each file having a size limit
of 5Mb.
* Fix misleading error messages when the Wrapper fails to write in the log file
or fails to terminate the JVM process. The system error codes and their
descriptions were incorrect.
* Several improvements when the Wrapper switches to a different log file.
When the log file was not accessible, if its path was changed and the
configuration reloaded, the Wrapper failed to resume into the new log file.
Also improved log notifications whenever the log file changes.
* Improve how the Wrapper checks if there is a source for the Windows Event
Log. Before, this was done on the first message being logged. Now, this check
is done at launch time for better performance and readability. If there is no
source registered, the logging to the Event Log will be disabled, with the
exception of critical messages such as when the log file changed.
* Several improvements in the log outputs such as wrong entries in the property
dump, double outputs, thread messages being inserted in the middle of
multi-line messages, etc.
* Fix a bug where the Wrapper did not stop even though the action specified
by wrapper.event.wrapper_pause.command.on_exit.<n>=SHUTDOWN was triggered.
* Several improvements and bug fixes related to time zones, especially when
parsing the IANA time zone file.
* Add new WrapperManager.getOS() and WrapperManager.getArch() methods to make
it easy to access the same resolved OS and architecture used by the Wrapper.
* Fix a buffer overflow problem happening when collecting HostIds if the number
of adapters on the local machine exceeded 10. Also improved the display of
HostIds when calling 'wrapper -h'.
* When launching the Wrapper in console mode, the UNIX shell script will now
return the exit code of the Wrapper. When using the start action, the script
will not wait for the Wrapper to finish and will not return its exit code.
* Add a new property, wrapper.exit_code.error, which allows the user to specify
the exit code to use when the Wrapper stops with an error. This can be used
to distinguish the Wrapper exit codes from other codes that the Java
application may return. Note that this will only take effect after the
configuration has been loaded.
* Correct the exit code of a child process launched by WrapperManager.exec()
on UNIX platforms when it exited due to a crash.
* Several bug fixes and improvements when setting the language and encoding.
If the configuration doesn't match with any locale installed on the system,
the Wrapper will try using a similar locale ignoring case and modifiers.
See the Internationalization/Localization page for details.
* Stop setting the LANG environment variable on Windows.
* Fix a problem where wrapper.lang.encoding was ignored if the LC_ALL
environment variable was set on the terminal that launched the Wrapper. To
solve this issue, LC_ALL is now set by the Wrapper with the same value as
LANG. This only applies to UNIX platforms when wrapper.lang is set.
* Due to changes in the way locales are set, the value of the WRAPPER_LANG
environment variable may be affected. This variable was and is still set with
the 2 first characters of the locale used by the Wrapper, but it is now
always lowercase. This makes it match with the suffix used in the language
file. On the community edition, the value is always 'en'.
* After a ping timeout takes place, the Wrapper will no longer wait for
wrapper.shutdown.timeout to elapse and will immediately kill the JVM if a
RESTART or SHUTDOWN action was specified. A hung JVM process can't be shut
down cleanly, so there is no need to wait for an additional timeout.
* Deprecate the use of the wrapper.event.<event_name>.email.attach_log
properties in favor of wrapper.event.<event_name>.email.maillog. These
new properties make it possible to control if the logs should be sent as an
attachment and/or directly in the body of the Notification emails. Also note
that, unlike the deprecated properties, logs inclusion can now be set for
individual events without activating it for the "default" event type.
* Add new actions PAUSE, RESUME and CLOSE_LOGFILE to the signal properties
wrapper.signal.mode.hup, wrapper.signal.mode.usr1 and
wrapper.signal.mode.usr2. CLOSE_LOGFILE can be used to force the Wrapper to
recreate a new log file after it has been moved or renamed.
* Add the possibility to pause and resume the Wrapper from the UNIX shell
script. Two modes were added and can be activated with the PAUSABLE_MODE
variable. The first mode, which is the default, uses the SIGUSR1 and SIGUSR2
signals to request pause and resume. The second mode uses the command file.
By default the script will not allow pausing or resuming unless the PAUSABLE
variable is explicitly set. When this feature is activated be aware that
depending on the mode, wrapper.signal.mode.usr1, wrapper.signal.mode.usr2,
or wrapper.commandfile will be passed as command properties to the wrapper
and thus override the corresponding properties of the configuration file.
* Add event handler methods to the Demo application to show how to handle the
service control event sent by the Wrapper when wrapper.pausable.stop_jvm is
set to FALSE.
* Stop allowing the Wrapper to run when versions of the Wrapper executable,
native library, and jar file do not match. The Wrapper had always shown a
warning then attempted to continue, but this would often lead to
unpredictable behaviour and some features simply not working. Please be sure
to upgrade all Wrapper files when upgrading the Wrapper.
* Deprecate the use of the wrapper.command.poll_interval and
wrapper.anchor.poll_interval properties in favor of
wrapper.commandfile.poll_interval and wrapper.anchorfile.poll_interval.
* Fixed a rounding issue causing the intervals between two pings or two
deadlock checks to be 900ms shorter than the value specified in the
configuration.
3.5.30
* Improve the logging messages when using the IANA timezones introduced in
version 3.5.29 and add a new property, wrapper.timezone.debug_timestamps, to
display additional information (offset to GMT and whether DST is in effect)
in the timestamps of the log outputs.
* Improve the behavior when the Wrapper fails to parse the timezone file or
fails to resolve daylight saving time. Any error on startup will cause the
Wrapper to fall back to system time. If an error would occur during a time
change, the Wrapper will continue with the current time.
* Add new properties wrapper.ntservice.preshutdown and
wrapper.ntservice.preshutdown.timeout to allow Windows services with a long
shutdown time to stop cleanly before the system starts its shutdown process.
The first property specifies that the service will accept PRESHUTDOWN
notifications. The second property tells the service control manager how
long to wait until the service stops. These properties are not supported on
Windows Itanium or Windows XP and lower.
* Fix a memory leak on Fedora 21 and lower. This issue was fixed for RHEL,
CentOS and Amazon Linux AMI on version 3.5.28, but was still happening on
Fedora when rolling the log file in size mode.
* Fix a bug where, under certain conditions, a white square appeared briefly
on the screen just before the splashscreen was drawn (wrapperw).
* Change name of the architecture for Linux PPC. Since 3.5.29 the Wrapper is
available on Linux PPC little-endian and big-endian. To avoid confusion
'linux ppc' is now 'linux ppcbe' and 'linux ppc64le' becomes 'linux ppcle'.
* In the script file, add the variable FILES_TO_SOURCE which should contain a
list of files to source prior to executing any commands.
* Add two tokens, 'W' and 'J', to the logging format to display the Wrapper
process id and the Java process id.
* Fix a bug where the Wrapper stopped to log messages coming from the Java
application, or one of its child process, when it encountered a null
character (\0). It also resulted in a memory leak if the Java application
was logging messages at a frequency higher than the value specified with
wrapper.log.lf_delay.threshold.
* Fix a wrong implementation of the property 'wrapper.log.lf_delay.threshold'.
The amount of time specified by this property was counted from the last log
output received instead of the last line feed received.
* If the Wrapper is unable to write to the configured wrapper.logfile, it would
fall back to a default log file in the working directory. If this would also
fail, the log file will be disabled and logging will only continue in the
console, syslog or EventLog. From 3.5.30, the Wrapper will resume logging
into the configured file as soon as it is available again. If the log file
had been disabled and the configured log file would still be locked, then it
will try to resume the logging in the default log file.
* Fix a bug where a RESTART or a PAUSE action specified with
wrapper.on_exit.<n> (or wrapper.on_exit.default) would abort a SHUTDOWN
triggered by an event, a filter, a timer, a deadlock, a ping timeout or
failures of mounted shares.
* Improve the logging messages when the action 'KILL_RESTART' is specified for
the 'wrapper.event.<event_name>.command.block.action' property. Depending on
the event, RESTART is not always applicable, but the Wrapper always notified
that a new JVM was going to be launched. Now it will clearly inform when the
restart is not applicable.
* Improve the output when querying the status of a service on Unix. It will
show whether the service is installed or not, and which system is used if
there are several possibilities for the current OS (init.d, systemd, etc.).
* Fix a bug where the daemon was not reloaded when the Wrapper was installed
using systemd and a custom service file.
* When installing a daemon with systemd or upstart, the Wrapper will now check
for a previous install like it does for the other init systems. This implies
that the service should first be removed to force reinstallation.
* Add the ability to log the properties each time the Wrapper loads or reloads
the configuration file. A new wrapper.properties.dump.loglevel property was
created to control at which level they will be logged.
* fixed a bug happening when launching multiple instances of the shell script
in a short time interval. If one instance was starting the Wrapper while
another attempted to stop it, the PID file of the new Wrapper process might
eventually be deleted. Running without a PID file could cause some issues and
would leave open the possibility for a second instance of the Wrapper to run
simultaneously even though wrapper.pidfile.strict would be set to TRUE.
3.5.29
* Fix two problems when wrapper.lang.folder was passed in the command line to
the JVM. The path was limited to 78 characters and was not put in quotes on
Windows.
* Add new supported platform: Linux PPC64LE 64-bit. Built on a RedHat 7.1 LE
machine, GNU libc 2.17.
* Fix a bug happening on startup where timers set with an interval less than
wrapper.timer.max_catchup were executed several times.
* Add a dynamic variable 'WRAPPER_SYSMEM_<P>' where <P> is a percentage of the
physical memory available on the system. This variable can be used in the
wrapper.java.additional.<n> properties to set the values of JVM options like
-Xmn, -XX:PermSize or -XX:MaxMetaspaceSize.
* Fix a bug on AIX where the properties wrapper.java.maxmemory.percent and
wrapper.java.initmemory.percent did not work because the Wrapper failed to
get the physical memory size of the system.
* Fix script (AIX only) to allow users to start and stop the Wrapper without
using SRC and fix syntax error in a message when validating the size of
APP_NAME.
* Add the possibility to specify a timezone of the IANA tz database in which
the Wrapper will be executed. Although the old timezone abbreviations are
still available for backward compatibility, usage of the new IANA identifiers
is preferred because it solves several issues, especially regarding daylight
saving time. By default, summer/winter time changes are automatic and will
update timers, mail settings and time-stamps of all log outputs.
* Fix script for MacOSX where users could only start the daemon if it was
installed. Now it is not necessary to install it. Introduced in 3.5.28.
* Improve a workaround to a bug in a libc function on AIX which causes memory
errors when messages containing Japanese characters are logged. There might
still be some errors if the Java application logs very long messages through
the Wrapper, but in this case a special configuration is possible as a
workaround.
* Fix a bug on FreeBSD 10.x where the libiconv library could not be loaded.
This caused the Wrapper to stop at startup.
* Fix a scaling issue on the GUI of the Demo application. The main window was
too small on high-DPI displays.
3.5.28
* Fix a memory leak on Red Hat Enterprise Linux, CentOS and Amazon Linux AMI.
It occurred when activating log rolling in size mode. This memory leak came
from an issue in the GNU C Library (glibc) which was fixed on version 2.21.
However, a workaround was added so that the Wrapper can run without issues
on any version of glibc.
* Fix an issue on z/OS that if the path to the Wrapper binaries was longer
than 79 characters, the script could not execute the 'start' and 'stop'
commands properly. It reported a stale PID file when starting the daemonized
process and later failed to stop it because it could not find that PID file.
* Fix the console flicker bug that was still happening when launching
wrapperw.exe from a Windows shortcut.
* Add the possibility to configure Processor affinity for AIX, FreeBSD, HP-UX
and Solaris. For HP-UX and Solaris it is only possible to bind one CPU per
process.
* Fix a problem where boolean configuration properties were not assigned their
default values if a wrong value was set. The Wrapper always resolved unknown
values to FALSE even though the default value should be TRUE.
* Add a new event 'WrapperSecondInvocationEvent' that can be consumed in the
Java Application on Windows. This event will be fired whenever a second
instance of the Wrapper tries to start when single invocation mode has
been specified. This enables you to execute custom tasks like showing a
message or bringing a window of your application to the front.
* With single invocation mode, it is now possible to specify that the Wrapper
will focus the foreground window of the running Java Application instead of
launching it a second time. If no window can be found, the focus will be set
to the Wrapper monitoring the application. This can be used in combination
with the event handling to activate any window that was brought to the front.
* Fix bug on Linux where RUN_AS_USER was ignored when running the Wrapper as
a service controlled by systemd. The service was always running as root.
* Fix bug on AIX where running the Wrapper as a service would not use the
System Resource Controller (SRC) and ignore RUN_AS_USER value. Thanks to
Miroslaw for pointing this out and for his contributions to the shell script.
* Add a new bit flag (0x8000) to indicate that an error occurred when querying
the status of a Windows service. If the query is silent (-qs option),
wrapperw.exe will no longer display error messages in the dialogbox, but
these errors will still be logged in the log file.
* Add new system property to WrapperStartStopApp (integration method #2) to
handle passthrough parameters. These parameters can be passed to the start
and/or stop method of your Java application. By default the passthrough
parameters are ignored (see the javadocs of the WrapperStartStopApp class
for details).
* On Windows, the Wrapper will now check that the code page of the console
supports the specified language. If it doesn't, it will fall back to English.
* Add two new values for the wrapper.lang property: 'DESKTOP' and 'SYSTEM'.
These values are used on Windows and ignored on other systems. The first,
which is the default, specifies that the language of the Wrapper will be
resolved according to the UI language. The second will cause it to use the
system language. Before, the Wrapper used the language of the Region Format
settings.
* Fix a bug where messages in Japanese coming from the JVM were badly encoded.
This occurred on Windows when the language for non-unicode programs was not
set to Japanese.
* Improve the error message if there are any problems initializing the backend
pipe or socket.
* Add 'installstart' command to the UNIX shell script in order to install and
then automatically start the Wrapper as a daemon process.
* On AIX and HPUX Itanium, the Wrapper will no longer have the GNU version of
libiconv as a dependency. This dependency was introduced in version 3.5.26
for AIX and 3.5.27 for HPUX itanium, but caused some compatibility issues.
* Add a new '--teardown' option (and TeardownApp.bat.in) to the Windows version
which can be used to reverse changes done with the '--setup' option.
Administrative credentials will be requested. As of version 3.5.28, this will
only unregister the application/service from the event log system.
* Add a new property, wrapper.syslog.ident.enable, which tells the Wrapper to
create or delete an identification (also known as source) for the event log.
Starting with Windows Vista or Windows Server 2003, this action requires
administrative credentials. When running on a lower permission, the Wrapper
will ignore this property and start normally.
* Fix a bug where actions specified by wrapper.ping.timeout.action were only
performed the first time the JVM became hung. All subsequent hangs were
ignored. With the default configuration, this would mean the Wrapper could
only restart a hung JVM once. Since 3.5.16.
* The Wrapper is now signed with a SHA-2 certificate. SHA-2 provides stronger
security than the previously used SHA-1 algorithm. The decision to change the
certificate was made in compliance with Microsoft's SHA-1 deprecation plan
which states that Windows 7 and higher will no longer support SHA-1 after
January 1st, 2016. It should be noted that Windows XP SP2 and lower, as well
as Windows Server 2003, don't support SHA-2 and the new certificate will not
apply on these platforms. The binaries provided for Windows Itanium will also
no longer be signed.
* Fix memory errors happening on AIX when the system uses some localizations
like Japanese.
3.5.27
* Fix a misleading error message when there is a problem processing a system
error message on Windows.
* Handle system exit codes with descriptions (Windows only).
* Add new configuration file directives (#properties.on_overwrite.loglevel and
#properties.on_overwrite.exit) to better control how the Wrapper should
behave when detecting duplicate property definitions.
* Fix: No longer tries to resume a Windows service that is already running,
or pause a service that is already paused.
* Improve accuracy of status messages when installing, removing, starting,
stopping, resuming and pausing a Windows service.
* Improve the display of the available HostIds when calling 'wrapper -h'.
* Fix the console flicker bug. Happened when wrapper.ntservice.generate_console
was set to TRUE, which is required for thread dumping.
* Fix a problem on Windows with the consoleless version of the Wrapper. If a
splash screen was set at launch time, and if the Wrapper eventually failed to
start normally, the splash screen did not disappear and remained on the top
of the log window.
* Fix a problem on Windows platforms that caused the log window to overlap all
the other forms even when the focus was set on an other application.
* Add the ability to define CPU affinity for the Wrapper and JVM processes
(Windows and Linux systems, professional edition).
* The wrapper can now be executed with a '--setup' option in order to install
components under elevated mode on Windows. During the installation, the
wrapper will register the application to the Windows Event Log system.
After the Wrapper is executed with the '--setup' option, the Event Viewer
will no longer report that the installation was corrupted.
* wrapper.exe and wrapper.dll are now manifested for compatibility with newer
versions of Windows (8.1 and above).
* Modify the Community Edition license to allow the Wrapper to be integrated
and distributed with Products released under either the GPL version 2 or GPL
version 3 licenses.
* Include the PID of the Wrapper and Java processes in debug output.
* Fix a problem where the wrapper.jvm.port.min and wrapper.jvm.port.max
properties were being ignored. This meant that the defaults were always
being used. Since 3.5.26.
* Fix a very infrequent issue in which the Wrapper would produce an out of
memory error or fail when trying to get the path to the Wrapper on Windows
XP.
* Modify the wrapper.pausable and wrapper.pausable.stop_jvm properties so they
are no longer reloaded when wrapper.restart.reload_configuration=TRUE.
* Fix a bug when the child process printing the JVM version became a zombie
after completion (problem known on CentOS). Add property
wrapper.java.version.timeout to let the user set a timeout for the child
process to print the JVM version before being terminated.
* Avoid 4227 events in the Windows LogBook when using SOCKET values for the
wrapper.backend.type property. We now try to check the port status in
native code prior to opening it in Java. The Wrapper worked correctly, but
a Windows issue was causing warnings in the EventLog if the port had an
existing socket in the TIME_WAIT state from a previous JVM invocation.
* Fix a problem on AIX with OpenJRE where the Wrapper failed to load the
native library. The native library now has a '.so' extension like on other
UNIX platforms.
* Fix a problem on HP-UX when listing HostIds. If several HostIds were
available on the machine, the Wrapper could only get the first one and
reported DLPI errors when attempting to get the others.
* Fix path to remove files when uninstalling the Wrapper daemon process on
HPUX.
* Added Linux Itanium binaries in the "Delta Pack". It was removed since
version 3.5.18.
* Fix an encoding conversion error when sending email on HP-UX.
* On MacOSX, set the launchd KeepAlive key to "false" by default as
recommended by Apple. However, it is possible to set it to "true" by editing
the new MACOSX_KEEP_RUNNING variable in the script file.
3.5.26
* Improve the log messages when a JVM restart is requested when the Wrapper is
in a state that it will be ignored.
* (Standard, Professional) Add an additional debug message when a deadlock
sweep completes. No functional change but this was added to make it easy to
tell how long the sweep takes on a given application.
* Clean up the internal tracking of where environment variables were set.
No functional changes.
* When detecting Cygwin with 'uname -o' in the script file, some OS's
(Solaris, MacOS, etc.) show an error message because '-o' is not a valid
parameter. Now we hide this error message to avoid confusion and we can
guess that Cygwin is not running.
* Add the ability to control the service with systemd using the script file.
* On Mac OS X, fix a typo, add another alternative way to find Java to set
the JAVA_HOME environment variable, and use the full path to execute sysctl
in case it's not in the path. Thanks to Dannes Wessels for pointing this
out.
* Fix a problem on newer versions of Windows when customizing the Wrapper.
The certificate was not removed when creating the target. This was leading
to an error when trying to sign the target with a new certificate.
* Add missing support in the shell script for restarting/stopping the Wrapper
service with launchctl on Mac OS X.
* Add missing support in the shell script for restarting/stopping the Wrapper
service with Upstart.
* Add the ability to set the path of the 'su' command as well as the ability
to specify additional arguments in the Wrapper shell script using new SU_BIN
and SU_OPTS variables.
* Fix a problem in the WrapperSimpleApp, WrapperStartStopApp, and
WrapperJarApp helper classes where command line problems that resulted in
the JVM exiting on startup looked like unexpected exits. This meant that
the Wrapper would try to relaunch the JVM again rather than giving up on the
first attempt.
* Modified the WrapperSimpleApp, WrapperStartStopApp, and WrapperJarApp helper
classes so that their usage banners will only now be shown for command line
related problems. Issues with the specified classes, methods, or jar files
are still logged as errors, but showing the user the usage in these cases
was confusing.
* Correct the WrapperResources.getString() method that has no replacement
arguments so that its processing of the raw string is handled the same as
methods which have replacement arguments. Now all strings are processed
by the MessageFormat class before being returned. Previous versions were
not consistent about the need to escape single quotes.
* Added optional key validation to make sure that strings passed in to the
WrapperResources.getString() method are formatted correctly. See the
WrapperResources class for information how to enable.
* Clean up escaping of single quotes in a few messages.
* Add new options for property wrapper.backend.type: AUTO, SOCKET,
SOCKET_IPv4, SOCKET_IPv6, PIPE. When set to AUTO, the Wrapper will try to
open a socket ipv4 and fallback to ipv6 and to pipe in case of error.
* Fix bug when converting from multibyte to wide char without setting the
locale at startup (Unix only). Thanks to Bert.
* Add a 'CLOSE_BACKEND' alias to 'CLOSE_SOCKET' as a test command for the
wrapper.commandfile property. This is because there have been multiple
options for the backend connection for some time and the name is more
portable.
* Fix a problem on Mac when running OS X Yosemite where the script was failing
to correctly compare versions '10.10' to '10.5.0'. This was leading to the
script thinking that only 32-bit binaries could be run. This was only an
issue if the delta pack naming of the wrapper binaries was being used.
* Add a new wrapper.java.classpath.missing.loglevel property which makes it
possible to control how the Wrapper logs warnings about missing classpath
elements. Previously this was always logged as debug output and could not
be disabled.
* If there are any low level problems launching the Java process that are not
related to configuration or the JVM itself, the Wrapper will no longer try
again as such retries were meaningless.
* Windows system APIs have a problem that cause a process to crash if it
attempts to set an environment variable over 32767 characters in length.
The Wrapper now checks for this and logs an error rather than setting the
variable. This was a problem if very large classpaths were used when the
wrapper.java.classpath.use_environment property was TRUE.
* Windows does not allow a command line to be longer than 32766 characters in
length. Different versions of Windows handle it differently when such a
long command is provided. The Wrapper now does its own check and shows an
error in a consistent way.
* Improve the error message on UNIX platforms when the command line is longer
than the system maximum. This maximum varies greatly by platform and
environment and is difficult to calculate reliably, so the maximum length
is not currently shown in the message.
* Fix a problem on UNIX platforms where a very large configuration file could
cause the WrapperManager to fail to startup. This was caused by the partial
transfer of the configuration file to the WrapperManager via the backend
connection. This would happen regardless of the backend type used. The
size of the configuration file that would cause a problem varied greatly
based on the specific system.
* Fix a problem on Windows platforms where a very large configuration file
would fail to be sent to the WrapperManager on startup when the
wrapper.backend.type property was set to PIPE. The only problem was that
the WrapperManager.getProperties() method would be empty.
* (Professional) Add checks to the WrapperManager.exec() methods on Windows
for the maximum command line length of 32766, and maximum environment
variable name-value pair length of 32767.
* (Professional) Fix a problem where a free of a NULL pointer was being done
as part of the cleanup process of a WrapperManager.exec() call. This is not
known to have caused any issues.
* Added getStdOut(), getStdErr(), and getStdIn() methods to the WrapperProcess
class as aliases to the getInputStream(), getErrorStream(), and
getOutputStream() methods to help avoid confusion.
* Fix a problem on Windows 7 where long log lines got corrupted after 31397
characters when wrapper.console.direct was true. This seems to be a problem
with the underlying Windows API and was only a display issue. Reduced the
maximum number of characters that can be written with a single API call to
30000 to work around the issue. This change is internal and there is still
no limit on the length of logged lines.
* Fix a deadlock if the Wrapper failed to write to the backend when the
wrapper.backend.type property was PIPE. Found by code review and is not
known to have actually happened.
* From Mac OSX 10.5.0, the script file will use the key 'KeepAlive' in the
launchctl configuration file. Prior versions of Mac OSX will continue to use
the same key 'OnDemand'. Thanks to Robin for pointing this out.
* (Standard, Professional) Disallow the use of hostids tied to Apple Bluetooth
devices when running on a virtualized Windows system hosted on an OS X
system.
* Fix a problem where WrapperManager.log() was not working correctly when
multi-byte messages were logged.
* In the debug output the full configuration properties packet is suppressed
from the log output because it is huge and can contain sensitive data.
Add a size to the abbreviated output to assist with debugging.
* Fix a memory leak on UNIX platforms whenever an error message was reported.
This was only a problem if the message was logged repeatedly.
* Correct a couple other potential memory leaks found through code review.
Not known to have been causing any actual problems.
3.5.25
* (Professional) Improve the wrapper.timer.<n>.interval property so it is now
possible to specify ranges and lists of values as well as offsets for
interval values to more precisely control when timers are fired.
* (Professional) Fix a problem with the wrapper.timer.<n>.interval property
where timers would not fire during an interval the system time was set back.
Also fixed a problem where timers would stop firing permanently if the
system time was set forward by more than the value of the
wrapper.timer.max_catchup property and a timer had been scheduled to be
fired during that interval. Both of these issues were most likely during
daylight savings time.
* Fix a problem where signals received by the JVM were not being logged in
debug output correctly if the wrapper.ignore_signals property is set to
true. We now also log debug output even if a user event listener consumes
the signal event.
* Fix a problem on Gentoo Linux where the shell script was not correctly
detecting the system architecture. This may also be a problem on other
distributions whose 'uname -p' returns a detailed architecture.
* In the shell script, when the flag to use systemd (USE_SYSTEMD) is set,
the shell script generates a ".service" file in /etc/systemd/system/
when installing the Wrapper as a daemon.
* In the shell script, add a function to validate the size of APP_NAME when
installing or removing the daemon on AIX.
* It was possible to disable the logging of the Java command line even when
debug output was enabled by setting the wrapper.java.command.loglevel
property to NONE. This made it difficult to debug problems and is no longer
possible.
* When the wrapper.java.version.output property is set to true, add debug log
output to show the actual command line used.
* Fix a problem on Windows when the wrapper.java.version.output property is
true where it was possible that java executable being run to get the version
could be different than that used to run the application if the java
executable was being located on the default system PATH as well as the PATH
defined in the environment. The Wrapper now looks once and uses the same
fully resolved path in both places. For clarity, both java command lines are
now included in debug log output when the version is requested. (Bug #288)
* Change the timing of the logging of the Java command line on UNIX so it is
consistent with Windows.
* Improve the error message text thrown when a native feature is not available
from Java to be more clear about whether the problem is that the native
library could not be loaded versus the wrong edition being used.
* On Windows, detect when the Wrapper is running under Cygwin and set the
default value for wrapper.console.flush to TRUE. On other platforms,
the script will display a message and stop running.
* (Professional) Add support for WRAPPER_EVENT_TIME_* and WRAPPER_EVENT_RAND_*
variable references so event times can be used when events are fired.
* Fix a buffer overflow problem on AIX which caused crashes or deadlocks on
startup for some users. This had been an issue since 3.5.0 but only reported
recently.
* Remove output debug messages on UNIX when the wrapper.port.address property
was set.
* Clean up code when converting multibyte characters to wide characters. Some
error checks were not implemented correctly. Found during a code review and
is not known to have actually caused any problems.
3.5.24
* Fix a problem where the message source of remote syslog messages from the JVM
were being logged as "jvm %d" rather than "jvm 1".
* Add a new wrapper.syslog.split_messages property which controls whether or
not multi-line messages will be logged as is or first split into individual
lines.
* Fix a problem on Windows Vista and above where the wrapper.single_invocation
property was not correctly identifying Wrapper instances running in different
sessions under some circumstances.
3.5.23
* Clean up the error messages logged when the Wrapper failed to elevate itself
on Windows platforms. They are now more informative.
* (Professional) Fix a handle leak on Windows in WrapperProcess.isAlive().
* (Professional) Modify the exception thrown when WrapperManager.exec is called
while the Wrapper is shutdown so it now says that rather than saying that the
native library is not loaded.
* (Processional) The Wrapper is now more careful to make sure that the backend
is never closed while a child process is being launched to ensure that the
Wrapper knows about all child processes launched.
* (Professional) Add a warning message in case the Wrapper is not notified of
a launched child process due to the backend connection being closed.
* (Professional) Fix a potential NPE that could be thrown while reading stdout
or stderr output from a child process while the Wrapper was shutting down and
after the child process exited.
* (Professional) Fix a problem on UNIX platforms where we were getting stuck
trying to cleanup after a process which was currently blocking on a read from
stdout or stderr.
* (Professional) Fix a problem on UNIX platforms where a timeout attempting to
obtain an internal lock of the child process list was causing an internal
counter to get out of sync, leading to a other terminated child processes
being left as defunct zombies until the Java process terminated.
* (Professional) Fix a problem on UNIX platforms where pipe file descriptions
used to communicate with child processes were being incorrectly passed to all
child processes. They were not growing over time.
* (Professional) Fix a potential synchronization problem calling
WrapperProcess.waitFor() or WrapperProcess.exitValue().
* Add additional debug log output showing the various timeout values to help
with debugging user issues.
* Fix a problem where the shell script was not correctly detecting the OS
version with Mac OSX Maverick.
* Add warnings about undefined environment variables in include file references
in the configuration file.
* Add support for environment variable expansion in files specified with the
wrapper.java.additional_file and wrapper.app.parameter_file properties.
* Correct the integer formatting in the WrapperUNIXGroup.toString() method so
it is consistent with the rest of the Wrapper.
* Fix a problem where the iconv library requirement couldn't be satisfied in
FreeBSD 10. We now locate the library dynamically by looking for
/usr/local/lib/libiconv.so, /usr/local/lib/libbiconv.so, or
/lib/libkiconv.so.4 in that order.
* Fix a the WrapperPrintStream.println method so strings containing linefeeds
will correctly have each line prepended with the configured header.
* (Standard, Professional) When an unknown license type is encountered, include
the unknown type in the error message to help with debugging.
* (Standard, Professional) Fix a problem on FreeBSD systems where the
wrapper.lang.encoding was not resolving to UTF-8 correctly when the LANG
environment variable was not set.
* (Professional) Fix a memory corruption problem on z/OS when the language was
set to a double byte locale like Japanese.
* Go through and make the Wrapper much more durable when badly encoded double
byte characters are encountered.
3.5.22
* (Standard, Professional) Fix a crash in native code behind WrapperResources
instances which could happen if the system was very low on memory. Since
version 3.5.7.
* (Professional) Fix a couple slow memory leaks in the native code involved
with launching and checking on the status of child processes.
* (Professional) Fix a problem where an attempt to throw a WrapperJNIError
within native code on Z/OS would result in a ClassNotFoundException being
thrown.
* Reviewed the native JNI code and fixed a few potential crashes and memory
leaks which could occur under low memory conditions.
* Modify the way the wrapper.console.direct property works so the Wrapper will
now always downgrade itself to using piped console writing as soon as it has
determined that a physical console does not exist. In 3.5.21 we tried to
predict when the console would not exist and disabling it in advance. There
were cases where this was not correct, resulting in error messages in the
console output.
* Fix a problem where operations like installing a service on Windows 7 and
above which need to be elevated were resulting in an error that the Wrapper
could not write to the console. The actual operation was working correctly
but the console output was incorrect. Since 3.5.21.
* Move the check that the jar and wrapper versions match earlier in the startup
process so we guarantee that a warning will always be displayed. There were
some errors which could abort the startup process before this warning was
logged.
* (Standard, Professional) Fix a problem where the value of wrapper.lang.folder
was not being recognized if a wrapper.lang value was not set.
* (Standard, Professional) Fix a small memory leak resolving the language to
run the Wrapper with.
* (Professional) Fix a potential buffer overflow reading data from a child
process stderr or stdout if the amount of data available in the pipe is
larger than the buffer length passed in to WrapperProcessInputStream.
read(byte b[], int off, int len).
* (Professional) Fix a problem where reads from a WrapperProcessInputStream
were consuming too much CPU while blocking for data on Windows. Now
correctly being done asynchronously.
* (Professional) Fix a problem where JVM cleanup, including cleanup of child
processes, was not always being done completely if the user requested an
immediate shutdown by pressing CTRL-C twice.
3.5.21
* Add a new 'R' log format which will track the number of milliseconds since
the previous JVM log output. Useful for simple performance checks. See
the wrapper.console.format, wrapper.event.default.email.maillog.format,
wrapper.logdialog.format, and wrapper.logfile.format properties.
* When the ACCESS_VIOLATION testing command of the wrapper.commandfile was used
to kill the Wrapper some log output was not making it into the wrapper.log
file. Add a forced flush just before crashing the Wrapper to make sure
everything makes it into the log file.
* Add a new wrapper.javaio.buffer_size property which makes it possible to
control the size of the internal buffer used to process console output from
the JVM. Also increased the default from the system default to 65536 bytes.
* Renamed the wrapper.use_javaio_thread property to wrapper.javaio.use_thread.
The old property still exists as a deprecated alias.
* Added a new wrapper.console.direct property on Windows which tells the
Wrapper to use Windows APIs to render log output to the console rather than
writing to stdout and stderr. This results in a major speed improvement.
The drawback is that this removes the ability to pipe the output to another
program on the command line. We chose to enable this by default so the
majority of users can take advantage of the speed improvement. If your
application takes advantage of piping on Windows, you will need to disable
this property to regain the old behavior.
* Add a new "wrapperm" logging source on Windows to help differentiate which
log entries are coming from Wrapper invocations used to control the Wrapper
as a service such as starting, stopping, installing, etc. Previously the
log entries from the Wrapper service process and launching process both
used a "wrapper" logging source, which could be confusing.
* On UNIX, modify the way we keep track of whether the process is daemonized or
not. This was done to clean up a bit, but should not effect how the Wrapper
works.
* On Windows, change the timing of when PID files are created when running as
a service so any failures creating them will correctly be reported as a
service error. If the Wrapper was unable to write to a PID file because it
was read-only then the user was presented with a confusing message about
the service timing out on startup. This was in addition to the correct
error being logged.
* Fix a potential problem where internally queued log entries could fail to be
logged on shutdown. The log queue is now always processed as part of the
shutdown process.
* Modify UNIX shell script to remove all existing run level rc files for the
application on both install and remove, rather than only the ones for the
currently configured run level to avoid unexpected behavior due to old rc
files being left around. This only affects platforms which make use of
rc files.
* Add a new RUN_LEVEL variable to the UNIX shell script to make it easy to
configure the run levels when installing as a daemon on various platforms.
* Add new wrapper.logfile.close.timeout and wrapper.logfile.flush.timeout
properties, and deprecate the wrapper.logfile.inactivity.timeout property,
to increase control over when and how the logfile is flushed and closed.
* Add a new PIDFILE_CHECK_PID setting in the UNIX shell script which makes it
possible to control whether or not the script double checks that the pid in
an existing pidfile is actually the pid of the application's Wrapper. This
property makes it possible to disable this check so multiple applications
can be tied to the same pid file.
* Go through and make sure that none of the Wrapper native JNI methods are
called after the WrapperManager shutdown has completed. Doing so was causing
a JVM crash on some Linux JVMs. This was happening when a WrapperResources
instance was finalized by the garbage collector on shutdown.
* (Professional) Fix a problem where processes created by calling the
WrapperManager.exec functions could fail to be registered with the Wrapper
for cleanup if the call was made as the JVM was shutting down. This was
resolved by making sure that JNI calls can not be called after the
WrapperManager shutdown has completed.
* Modify the internal WrapperManager tick thread so it is allowed to complete
once the WrapperManager has fully shutdown. This was the only remaining
reference to the WrapperManager class.
* Add a new wrapper.property_warning.loglevel property which controls the log
level at which the Wrapper will log warnings about undefined but referenced
environment variables, as well as invalid boolean or integer values.
* Update the way environment variable references within property values are
parsed to make it possible to report those which are not defined. Each pair
of '%'s is now expected to be part of a variable reference. For example
"%AAA%BBB%CCC%", previously if "AAA" was not defined, "BBB" would be located,
but now only "AAA" and "CCC" will be recognized as variables.
* Fix a problem on Windows where a non-existent wrapper.working.dir directory
was causing multiple error messages in the log file.
* Modify the way the wrapper.environment.dump property works so it will now
log at the INFO level with the rest of Wrapper output when set to true.
When false however, the output will be logged as DEBUG output if enabled.
Previous versions always logged the output to the INFO log level in either
case.
* Fix a problem on Linux IA64 where the WrapperActionServer was throwing an
IOException when the JVM was shutdown by calling System.exit. It did not
cause any problems other than the message in the log.
* (Professional) Added new "jvm_ping_timeout", "jvm_ping_slow", and
"jvm_ping_response_slow" events to help respond to ping related issues.
* Fix a problem where a value of 0 for wrapper.ping.alert.threshold was not
correctly disabling ping threshold alerts.
* (Professional) Fix a problem where the thread that handles events would
permanently get stuck if the event queue filled up. This was very unlikely
but not impossible if a large number of filter events were triggered in a
very short time. Corrected the problem so it now recovers correctly, but
also increased the queue size to make the overflow even more unlikely.
* (Standard, Professional) Fix a problem where console output of a wrapperw.exe
processes launched when the wrapper.ntservice.console property was TRUE was
not being shown correctly. This issue was introduced in 3.5.19.
3.5.20
* Further improvements to the memory footprint of the Wrapper to minimize the
memory required when logging JVM output consisting of very long lines.
* Fix a minor potential buffer overflow, which could occur if the path of the
first classpath element is larger than 1024 characters. This overflow was
detected during a code review and we have no reports that it actually ever
caused any problems.
* Improve the error message displayed when the Wrapper's configuration file
could not be loaded so that it now includes the name of the file.
* Work around a libc system library bug on some HPUX platforms in which calls
to vswprintf can cause a crash if the expanded string does not fit into the
buffer. Worked around the problem with the help of HP support by making sure
the buffer length followed a rule so that its length was 1+N where N is a
multiple of 8.
* Fix a problem on HPUX platforms where the JVM would sometimes get stuck on
shutdown, when the shutdown was initiated within the JVM, leading to the
Wrapper having to forcibly kill it. This was caused by the Wrapper
attempting to close the backend socket when another read was blocking
attempting to read from the same socket. This was introduced in version
3.5.8.
* Fix a potential log corruption when queued log messages were larger than the
internal buffer size. Found during a code review and is not known to have
actually caused any problems.
* Fix a typo in the shell script which was breaking the 'install' command on
Solaris platforms.
* Fix a potential crash on HPUX platforms if the value of the
wrapper.port.address property had an encoding problem.
3.5.19
* Fix a problem in the batch file, where a space in the path to the Wrapper.exe
file would cause the script to locate the Wrapper.exe file. Introduced in
3.5.18.
* When running as Windows service with hiding the console of the Wrapper will
cause the Wrapper to disable unnecessary logging to the console in order
to enhance performance.
3.5.18
* Fix a problem, where an unclosed percentage character '%' was opening the
chance of a dangling pointer in the additional java parameters. The '%'
character is a special character, specifying an environment variable.
* Added variable _WRAPPER_DIR the batch files to make it possible to specify
any other directory where the Wrapper binary file is located. Until now the
batch file and exe file had to be in the same location. Thanks and credits
go to Geoff.
* Added property wrapper.port.address, which makes it possible to specify a
different address to bind the socket to when using the socket backend
connection between the Wrapper and the JVM. Until now, the socket was
always bound to the localhost loopback interface.
* The script will from now on also use the update-rc.d tool for installing
an application as daemon on Debian. Thanks and credits go to Haifeng.
* Whenever the Wrapper is causing the JVM to be forcibly terminated, the
Wrapper will make sure the JVM has actually been terminated. If it wasn't
after wrapper.jvm_terminate.timeout seconds, a pending restart will be
canceled and the Wrapper exit.
* Reworked the way the Wrapper is processing output from the JVM, in order
to increase performance on huge output on a single line and also reduce
memory usage.
3.5.17
* Add a new wrapper.java.additional.default.stripquotes property to make it
possible to specify the default value of
wrapper.java.additional.<n>.stripquotes
* Fix a bug where the timer failed to calculate the fire time when that time
was more than one week in the future. This was possible for weekly timers
which spanned a daylight savings time change which rolled the time back by
an hour in the fall.
* Fix problem in the shell script, where it might fail to remove an installed
daemon after the location of the script has been changed.
* Add additional advice messages when a Windows service fails to be started
due to file access problems involving the Wrapper binary, configuration, or
log files.
* Fix a problem where the dynamic library on MacOSX was not able to load it's
functions.
* Added wrapper.app.parameter_file property, which works similar to the
wrapper.java.additional_file property
* Reduce CPU-consumption of WrapperProcess.waitFor() function
3.5.16
* (Standard, Professional) Retry failed share mappings if the target host or
network is unreachable as that may be a temporary problem.
* (Professional) There was a problem where the IO-redirection of a child
process which got created with the WrapperManager.exec API and used the
feature to run the child process in the logged on users desktop was
only allowing to create a process once per second.
* Include information about the base configuration file in the debug output
when debugging of cascading configuration files has been enabled.
* Add a check in the UNIX script to output a more descriptive error message,
when the user specified in the RUN_AS_USER variable doesn't exist.
* (Standard, Professional) Fix a problem where console log output was not being
displayed correctly when running with the WrapperW.exe binary with the
wrapper.ntservice.console property was set to true.
* (Standard, Professional) Implement the wrapper.ntservice.generate_console
property when using the WrapperW.exe binary so it is now possible to disable
the creation of the hidden console.
* Modify the way the wrapper.ntservice.generate_console property works so
it is now easier to disable the generation of the console using just this
property.
* Improve the message logged when the Wrapper attempts to perform a thread
dump without a valid console being available.
* Add new wrapper.ping.alert.threshold and wrapper.ping.alert.loglevel
properties which make it much easier to debug ping timeout issues by asking
the Wrapper to log messages about ping responses which were shorter than the
registered wrapper.ping.timeout, but longer than the threshold.
* Add a new WrapperManager.appearSlow method which makes it easier to test
how the Wrapper behaves when the JVM is being slow to respond to commands.
* Add a new wrapper.disable_tests property which can be used to disable all of
the testing methods of the WrapperManager class. It has always been possible
to control their access with a SecurityManager, but this is simpler for most
applications.
* Update the default wrapper configuration file template so a restart due to a
matched OutOfMemoryError filter will no longer be triggered by default if the
user enables -verbose:class output.
* Fix a problem on UNIX platforms where the Wrapper would fail to start if it
was located on the system PATH. This had been a problem since version 3.3.0
but had gone unnoticed as the Wrapper is not usually referenced in this way.
* Rework the internal flags governing the generation and hiding of the backend
console on Windows so we are able to almost always obtain the console's
window handle.
* Cleanup some startup code to reduce duplication and make sure that more debug
and warning messages are logged after the "Wrapper Started" message.
* Add new wrapper.java.additional_file and
wrapper.java.additional_file.stripquotes properties to make it possible to
specify JVM parameters in a file.
* Add support for Linux on ARM systems.
* Re-Enabled the forced reloading of the SYSTEM (and if set to a specific
account, the user) registry before launching the Wrapper as a service on
Windows XP and 2003. This has been originally disabled for Windows XP and
2003 since version 3.5.5.
* (Standard, Professional) Fix a problem where the instance class names logged
when a deadlock involving ReentrantLock instances were corrupted. The actual
deadlock detection was working correctly, but this could have lead to other
problems caused by the corruption. A workaround was to set the
wrapper.check.deadlock.output property to SIMPLE.
* (Standard, Professional) Make it possible to completely disable the details
of a deadlock by setting the wrapper.check.deadlock.output property to NONE.
* (Standard, Professional) Object Ids in thread dump reports were not correctly
being logged as 64-bit ids on 64-bit JVMs in some cases.
* Fix a problem where the source code values returned by the
WrapperServiceActionEvent.getSourceCode() method were incorrect. The
constant values were incorrect and have been corrected from this release.
* Add new WrapperServiceActionEvent.getSourceCodeName() and
WrapperServiceActionEvent.getSourceCodeName(int actionSourceCode) methods
which returns a localized name of the source where the event originated.
* Fix a minor problem where a couple uncommon backend packet codes were not
being correctly identified by name in the debug log output. Functionally
they were all working correctly.
* Added property wrapper.ping.timeout.action, which will let you specify an
action in case the timeout triggers. So far the only action was to restart
the JVM.
* Fix a problem where a JVM process was not stopped completely on a UNIX
platform and stayed defunct after a forced kill until the Wrapper process
itself stopped. This was especially noticeable if the JVM is frozen and the
JVM is being killed forcibly.
* Add additional debug log output showing the various timeout values to help
with debugging user issues.
3.5.15
* Add a new _WRAPPER_CONF_OVERRIDE setting to the Wrapper dedicated command
batch files on Windows so it is now possible to control whether or not the
first parameter is the configuration file name. The ability to specify an
alternate configuration file is now disabled by default as it was confusing
for users who tried to pass other parameters to the JVM.
* Correct a couple log messages in the WrapperManager class which were missing
the correct prefix identifying where they originated.
* Remove some old reflection code needed for Java 1.2.x support as we have
required Java 1.4 since version 3.4.0.
* Remove some code to try to reconnect the backend socket from Java. It has
never been possible to do so without restarting the JVM, and the related
messages were confusing.
* Add a new wrapper.disable_forced_shutdown property to make it possible to
disable the feature to forcibly kill the JVM on shutdown if CTRL-C was
pressed twice.
* Reduce the number of times thread priorities are changed within the
WrapperManager class to simplify the startup and shutdown process.
* Fixed a dangling pointer problem, which could cause undefined behaviour
whenever a property contained an unset environment variable.
* Fix a race condition in the timer thread, which could cause a sigkill
being propagated through the whole process group rather than the timer
thread. This can only happen during the shutdown of the Wrapper.
* When a child process, which got launched by WrapperManager.exec()
failed to start due to a runtime-error (such as missing privileges), the
forked heap persisted and the child process never finished until
shutdown/restart of the JVM. The error only appears on Unix platforms
when using the FORK_EXEC start-type.
* Change log level and message if a certificate check returned a problem,
which is not directly caused by the signature of the Wrapper, but the
signature chain.
* Fix a problem when the silent query command wasn't returning the correct
exit code on windows Vista (and later) when the command was run from an
unelevated console. Thanks to Darren for pointing this out.
* The java system property wrapper.backend.so_timeout was ignored if it
was set to 0, making it not possible to explicitly set the timeout to
be indefinitely.
* Added the properties wrapper.java.additional.auto_bits.<platform> to
individually turn on/off the feature for the supported platforms.
* Fix a problem where the script was trying to use the 64-bit binaries on
Mac OSX even if the CPU was only a 32-bit architecture. This only affected
versions of Mac OSX greater 10.5.0, the vast majority of those machines are
already 64-bit CPU's.
* The Wrapper when reloading the configuration file, was trying to access
data from the call stack of a function which was actually outside of the
memory range of the stack. This access violation might yield a segmentation
fault. This issue was introduced in 3.5.5. Thanks to Lincoln for helping
finding this problem.
3.5.14
* Fix a problem in the AppCommand.bat.in file where a parenthesis in the
file name of the Wrapper binary would have caused a
"PATH was unexpected at this time" error.
* (Standard, Professional) Fix a problem when using a localized version of
the Wrapper on Windows 64-bit platforms where the Wrapper would continue
to use the default system language even wrapper.lang was used to specify
a different language. Introduced in 3.5.12.
* Fix a problem in the Windows AppCommand.bat.in command based batch file
where the 'status' command was incorrectly being reported as 'query' in the
usage output. The 'status' command had always worked correctly if used.
* Fix a problem on UNIX platforms where some asynchronous messages were
causing a warning message "Coding Error..." to be logged in place of the
intended message. This could be seen if the configured log file did not
have write permissions. Other than the incorrect log message, the Wrapper
worked correctly. Introduced in 3.5.2.
* Fix a problem in the UNIX script where running with Upstart wasn't working
correctly when RUN_AS_USER was set.
* Relax security checks when running the 'status' command against the UNIX
shell script so it now allows any user running the script to perform the
read-only check of the pid file.
* Fix a problem with the UNIX script where the 'remove' command was trying to
stop a running application even when the application had not been installed.
* Fix a buffer overflow which could potentially cause a crash during the
installation of a Windows Service when wrapper.ntservice.account was
specified. This was introduced in 3.5.12.
* Fix a heap corruption which could occur on startup and potentially cause a
crash. Only Windows systems, which use the System Event logs, were affected.
Discovered from a code review, there had never been any reports of this
causing problems for users. This could happen if the configured wrapper.log
could not be written to as the Wrapper always tries to write to the Event
Log in such cases. Introduced in 3.5.12.
* Add a new version comparison between the UNIX shell script and Wrapper to
start showing a warning in case of a version mismatch. The check will only
work if the shell script and Wrapper are each of at least version 3.5.14.
* Added a new wrapper.pidfile.strict property which will tell the Wrapper not
to start if the pid file already existed. Defaults to false for backwards
compatibility.
* Make the Java side of the backend socket more resilient in case of a read
or write timeout. The backend socket does not have a timeout set by default
so this should not have been an issue. A couple users reported problems on
specific systems however which led to this fix.
* To aid in the testing of the backend socket timeout, a new
wrapper.backend.so_timeout system property was added to make it possible to
configure the backend socket to use a timeout. See the Javadocs of the
WrapperManager class for details.
3.5.13
* Fix a typo in the script where the environment variable 'TR_BIN' should
actually be 'TREXE'. This was causing the "install" command on UNIX
platforms to fail. Introduced in 3.5.12.
* Fix a heap corruption which could lead to a crash that would occur the
second time an internal buffer used for logging was expanded. The buffer
would be expanded the first time a log line over 2048 characters in length
was encountered. Then the second expansion would happen when a line at
least 1024 characters longer was encountered. Introduced in 3.5.11.
Bug ID #3423108
3.5.12
* Put more descriptive Text in case the Wrapper is using integration method 4,
but the jar file deos not specify the Main-Class correctly in its meta
information.
* Fix a bug when failing to grant the LogOnAsService permission to a domain
user.
* Fix a bug where the ident for the syslog on Unix platforms was broken since
3.5.0. This was because when opening the syslog, the Wrapper was freeing the
memory for pointing to ident. However the string pointer ident will be
retained internally by the Syslog routines. And must not free the memory that
ident points to. Bug #3404978.
* Add a check on the script to make sure the 'tr' command exists on Unix
platforms.
* Improve the parsing of log formats so that format tokens are recocognized
even if they are lower case. This affects the wrapper.console.format,
wrapper.event.default.email.maillog.format, wrapper.logdialog.format, and
wrapper.logfile.format properties.
* The Wrapper parses log formats by looking for known tokens, any invalid
tokens are simply ignored. If the entire format is made up of invalid tokens
then this resulted in the Wrapper logging an empty line, which was not very
useful and caused confusion when encountered. The Wrapper now reverts to the
default log format in such cases. This affects the wrapper.console.format,
wrapper.event.default.email.maillog.format, wrapper.logdialog.format, and
wrapper.logfile.format properties.
* Improve the debug output while loading native libraries to avoid confusion
about the meaning of the warning logged about attempts to load alternately
named native library files.
* Fix a problem on Unix platforms where the default umask was being set to 0000
rather than inheriting it from the parent process when running as a daemon
process. This can be a security problem as log and other files have global
read/write access. Introduced in 3.5.8. Can be worked around by setting
the wrapper.umask property to a safe value.
3.5.11
* Fix a potential crash on Windows caused by a buffer overflow. This has been
a problem since version 3.5.0 and affects configurations which define more
than one wrapper.ntservice.dependency.<n>. Depending on what was in memory,
this did not always result in a crash. It has very reproducible behavior for
a given configuration file.
* Fix a problem on Windows where the Wrapper was taking 15 seconds or longer to
startup on some systems because the WinVerifyTrust system call was having
problems updating the CRL. This had been a problem since the Wrapper
binaries started being signed in version 3.5.7. If the WinVerifyTrust call
takes longer than the configured wrapper.startup_thread.timeout then the
Wrapper will continue to startup without further delay.
* (Standard, Professional) Explicitly remove the certificate of the customized
binary during customization. There were problems resigning the binary with
another certificate otherwise.
* If the Wrapper is unable to write to the configured wrapper.logfile for any
reason then we always fall back to a default log file and then log a message
about the failure. If the default also fails then that is also logged but
the messages would only be logged to the console in most cases. Modify the
Wrapper so we now always send both messages to the syslog or EventLog
regardless of what the wrapper.syslog.loglevel is set to. This is important
to help track down the cause of logfile access problems.
* Starting with version 3.5.0, it was internally possible to print out
multi-line log messages so that all of the lines would always be grouped
together in the log file. This version modifies the logging code slightly so
that such multi-line log output is now logged as a single message in the UNIX
sylog or Windows EventLog.
* Fix a problem where very long lines of output from the JVM would cause the
Wrapper to appear to hang for a while. The first time a single line of
output containing several hundred thousand characters was logged, an internal
buffer was being incrementally increased by 100 characters per cycle. The
Wrapper now increases the size based on last known size to greatly reduce the
number of cycles needed to choose a new buffer size.
* Modify the PAUSE_THREAD command so it is now possible to wait indefinitely.
Only useful for testing the Wrapper.
* Add a new PAUSE_LOGGER command to make it possible to pause the next log
entry. Only useful for testing the Wrapper.
* On UNIX, the stdout/stderr pipe between the JVM and Wrapper was not being
cleaned up correctly. This resulted in a small leak but was otherwise
harmless. The pipes are now cleaned up and initialized for each JVM
instance.
* Fix a problem where the Wrapper could fail to restart the JVM when the
restart request originated in the JVM if the system was experiencing very
heavy IO resulting in long disk IO queues. This was causing the Wrapper's
main loop to block on the write and miss the restart request, causing the
Wrapper to shutdown rather than restart. This could affect all platforms.
On Windows, it could also be reproduced by making a selection in the console
to freeze output and then making a request from within the JVM to restart.
* Add a new WrapperPropertyUtil helper class to make it easer to access Wrapper
property values from within the JVM.
* Fix a bug on some platforms where java log output could get corrupted due to
misuse of a strncpy system function. This function warns that some
implementations do not support overlapping memory copies. The problem could
only be reproduced on a single Linux test machine in lines following an empty
line of output. This problem has existed since 3.4.0.
3.5.10
* Setting wrapper.jvm.port to '0' (zero) will make the JVM to assign an
available port for the backend socket by itself.
* Add warnings in the log file if an integer configuration property value
contains a non-numerical value. Previously, the Wrapper would silently
ignore the problem and use the value of 0 if the number started with an
invalid character, it will now return the default value. If the property
value started with valid numerical characters then those were, and still will
be, used to generate a value, but the invalid characters will be trimmed.
The later is being kept this way to avoid breaking old configurations.
* Add warnings in the log file if a boolean configuration property has any
value other than TRUE or FALSE. It will still return a value of FALSE
for other values to avoid breaking old configurations.
* Add a warning if an invalid value is specified for the wrapper.on_exit.<n>
property.
* Add a new wrapper.log.lf_delay.threshold property which makes it possible
to control how long a partial line of Java log output will be allowed to be
buffered until it is completed with a line feed. If the threshold is
exceeded then the partial line will be logged as a full line resulting in an
extra line feed in the log output. All previous versions would do this
within 1-2 ms. The default is now 500ms.
* (Standard, Professional) Make it possible to customize the manufacturer
through the customize options.
* (Professional) Fix a problem where the Wrapper was sending a CTRL-BREAK
rather than a CTRL-C signal to child processes launched with
WrapperManager.exec when destroying them on Windows. For most child
processes this was not a problem, but if the direct child process was a JVM
then the CTRL-BREAK was triggering a thread dump rather than asking the JVM
to exit. The Wrapper was then timing out and forcibly killing the JVM child
process.
* (Standard, Professional) Fixed a bug, where the timezone ICT when set by
the wrapper.timezone property got misinterpreted as IST.
* (Standard, Professional) Fixed a problem where the UTC offset value in the
wrapper.timezone property was not being parsed correctly on UNIX platforms.
This led to the Wrapper to using an offset UTC0000.
* Take out the warning about unset LANG environment variable on Linux and
AIX systems. On system startup, some systems fail to set the LANG
environment variable. This is not really a problem for the Wrapper and the
warning was causing confusion for users so we decided to remove it.
3.5.9
* (Standard, Professional) Fix a problem on Windows where network adapters
whose names contained "PRO/1000" were being removed from the list of hostids
displayed when "wrapper.exe -h" was run. This did not affect existing server
license key files generated for hostIds reported by 3.5.7 or earlier, or
development license keys. But it did cause the Wrapper to report that no
valid hostIds could be found when the Wrapper was started without a license
file. This was caused by some test code added in 3.5.8 that we failed to
remove.
* Fix a problem where the Wrapper was not correctly yielding control back to
its main loop when very large amounts of continuous output was being logged
from the JVM. Introduced in version 3.4.0. In versions prior to 3.5.8, this
could have caused the JVM to timeout and restart itself. That particular
issue was resolved but the Wrapper process in 3.5.8 would still have been
unresponsive when this was happening. The Wrapper will now always yeild back
to its main loop after 250 milliseconds of continuous logging.
* Fix a problem where the WrapperManager could block trying write debug output
if the current user application was writing very large amounts of output to
the console as well. In extreme circumstances this led to the Wrapper
thinking that the JVM was frozen. This was only an issue if debug output was
enabled.
* Restructured the shell script so all editions now use the same script again.
3.5.8
* (Standard, Professional) Starting with version 3.5.5, we invalidated the use
of all 00ff* hostids on Windows to avoid problems with changing hostids when
users have a Juniper Network Connect network adapter on their system. This
turned out to be too restrictive as Guest OSs running under Parallels also
make use of this hostid range. The Wrapper is now more careful to only
invalidate actual Juniper Network Connect hostids.
* (Standard, Professional) Improve the message shown to the user when the
Wrapper is unable to locate any hostids for a system.
* Fixed a problem with the wrapper script on Solaris, where the option -F was
not available for grep.
* Added Windows version information on the wrapper debug output.
* Added a wrapper.log.warning.threshold property which makes the Wrapper show
a warning whenever it detects that the Wrapper took a long time to record a
log message. This was added to test a reported issue caused by slow IO on
very heavily loaded systems.
* Added a new 'G' log format to log the time in milliseconds of the previous
log message. See documentation with the wrapper.log.warning.threshold
property. Added to the wrapper.console.format, wrapper.logfile.format, and
wrapper.logdialog.format properties.
* Fix a problem where a filter that requested the JVM to restart would be
ignored if the JVM exited on its own immediately. The Wrapper is now more
consistent so that restart requests from within the JVM or filters will
always take priority over such exit requests. External shutdown requests, or
those from other actions will still behave as they did in the past and
continue to shutdown the Wrapper. The Wrapper also logs messages in debug
output if an outstanding restart request is being preserved or ignored.
* Fixed a problem in the AppCommand.bat batch file which could occur on some
Windows platforms with certain multi-byte system encodings. The script has
been rewritten and questionable parts have been simplified. The functionality
of the script has been preserved.
* Added the environment variable WRAPPER_CONF_DIR, which can be used for
the configuration properties. Feature Request #3160644.
* Made the script exit with the right exit code received when running the
script as different user, specified in RUN_AS_USER. Bug #3185281.
* Fix an access violation which could happen when reporting that the code
signing certificate has failed to been verified.
* Log an error if the backend socket is forcibly closed externally. It had
been getting logged at a debug log level. The message is "An existing
connection was forcibly closed by the remote host. (0x2746)". Because the
message was only logged if debug output was enabled, the JVM would be
restarted with no clear explanation as to what happened. The source of the
socket closure is under investigation.
* (Professional) Added the Java call fireUserEvent to the WrapperManager API.
This enables to fire user event mails, actions without the filter trigger.
* Fix a warning on Mac versions if the configured java command was not a
universal binary. A check was added in 3.4.0 to make sure that the
wrapper.java.command pointed directly to an executable to avoid unexpected
behavior when running a script. The message is only a warning and the
Wrapper continues regardless. Standard ppc, ppc_64, x86_64, i386, as well
as the universal binaries will now all work correctly without a warning.
* The default value of the wrapper.*.umask properties is using the current
umask the process has. Before the default value was always 0022.
* Add a new wrapper.backend.type property that is used to control whether the
Wrapper communicates with the JVM using the traditional "SOCKET" or new
experimental "PIPE". This was added as a workaround to a rare problem where
some Windows machines are closing the socket at an OS level. This was only
ever seen on Windows 2003, but could exist on other Windows versions as well.
* Add a new experimental wrapper.use_javaio_thread property which causes the
Wrapper to handle all java console output in a dedicated thread.
* Add a new WrapperManager.isNativeLibraryOk() method which lets user code
easily test whether or not the native library was loaded and initialized on
startup.
* Add a new PAUSE_THREAD command to the wrapper.commandfile property which
makes it possible to test how the Wrapper behaves when various threads block
or freeze. This was used to simulate and reproduce issues on heavily IO
bound servers.
* Improve the way the Java side of the Wrapper behaves when the Wrapper fails
to ping the JVM for an extended period of time. The JVM used to exit to let
itself resync itself with the JVM. This was causing problems on systems
which were heavily IO bound because the Wrapper could block for a while while
trying to write to the log file and the JVM was exiting. The JVM will now
never exit under such circumstances. The JVM will never become orphaned
because it will still exit almost immediately if the backend socket or pipe
with the Wrapper is ever closed.
* Deprecate the WrapperManager.appearOrphan() method as it is used to simulate
a failure mode which is no longer possible with the Wrapper.
* Changed the way the Wrapper is handling certificate errors regarding the
code signing/timestamping certificate. The Wrapper will now only shutdown
itself if the signature of the binary was not successfully verified because
the binary or signature has been malformed but not if any problem with
the counter-signer has been found. Starting with 3.5.7, the Windows Wrapper
binaries are signed. Some users with locked down Windows 2008 systems had
problems with the Wrapper refusing to start because the Comodo certificate
had been disabled on their system.
* Add a new wrapper.java.detach_started property which makes it possible to use
the Wrapper as a simple tool to launch Java applications. When enabled, the
Wrapper terminates immediately and the JVM is left to run on its own. Also
add new wrapper.java.outfile and wrapper.java.errfile properties which make
it possible to redirect the stdout and stderr of the JVM to files when
detached.
* When running the Wrapper as a specified User Account, through the
wrapper.ntservice.account property, the Wrapper will add permission for the
account to log on as service automatically upon install. Feature Request
#3286491.
* Fixed a problem binding the backend socket on Windows. If another process
bound a port inside the wrapper.port.min and wrapper.port.max range using the
SO_EXCLUSIVEADDRUSE option, the Wrapper would stop at this port report
an Access Permission problem and omits binding any further port in the range.
This problem existed ever since the Wrapper was released.
3.5.7
* Changed the way the script is installing the daemon gets installed on an AIX
system. The script now uses inittab & SRC.
* Fix a problem in the shell script that was preventing the script from
starting the Wrapper correctly if a file or directory existed in the current
working directory which was one character in length. This was only a problem
when the delta-pack naming of the Wrapper was used. This was easy to
reproduce on AIX systems on system restart because a "u" directory exists in
the root directory by default. This had been a problem since 3.4.0 when
it was introduced as a fix to a Solaris problem. The root cause was a
missing set of quotes in the tr command.
* Fix a problem in the shell script that was preventing the script from finding
the running wrapper process when it was started when the working directory
was in the same directory as the wrapper binary, but queried later from
another location. It would also fail if it was started from another
location, but then queried from the location of the Wrapper. This was
introduced in version 3.5.6 when the script stopped changing the working
directory in the script.
* Add a new GC action that will cause the JVM to immediately perform a full
garbage collection sweep. See the wrapper.commandfile,
wrapper.filter.action.<n>, wrapper.check.deadlock.action, and
wrapper.timer.<n>.action properties for details.
* (Professional) Modify the wrapper.event.<event_name>.command.block.action
property slightly so it will now correctly warn if an unknown action is
encountered. It had been defaulting to CONTINUE silently.
* Modify the timing of the message shown when an #encoding directive is missing
from the top of a configuration file. It was only being logged if debug
output was enabled. It will now also be logged if the #include.debug
directive is specified.
* Fix the indentation of warning messages about encoding or include problems in
configuration files.
* (Standard, Professional) Fix a problem where include file problems could
cause the shell script to have errors due to invalid translated output from
the Wrapper.
* Add a warning when the maximum include depth is reached and include debugging
is enabled. The Wrapper had always just silently skipped the include.
* Fix a problem where #include.required directive was not correctly preventing
startup if the include file was missing but the required include was in a
nested include.
* Fix a problem where the cause of some fatal include problems were not being
logged correctly, resulting in a simple, non-informative message only that
the configuration file failed to be loaded. This was a problem since 3.5.5.
* Fix a Windows problem where the Wrapper could fail to start as a service if a
defined environment variable would expand to a length larger than the 32k
limit specified in the ExpandEnvironmentStrings system function. This was a
problem on all Windows platforms prior to version 3.5.5, but only on Windows
2000 since then, when the code used to reload the environment from the
registry was disabled for newer versions of Windows. We now simply skip the
expansion of the problem variable and continue with a warning. Bug #3103776.
* Add a set of optional system properties that the WrapperSimpleApp,
WrapperStartStopApp, and WrapperJarApp helper classes are aware of to tell
them to ignore uncaught exceptions thrown within the main methods of the user
application. The exceptions will still be logged, but they can now be
configured so that the main method is just allowed to end without causing the
Wrapper to shutdown in an error state. Java on its own will stay running in
such a case as long as it has launched at least one non-daemon thread prior
to the uncaught exception being thrown. This does not affect most users, but
an application was found that was having problems because of this difference
in behavior. See the javadocs of the helper classes for details.
* (Professional) Fix a problem when looking for the correct exit code to use
for the wrapper.event.<event_name>.command.on_exit.<n> property. The Wrapper
now searches for a value as follows:
wrapper.event.<event_name>.command.on_exit.<n>,
wrapper.event.<event_name>.command.on_exit.default,
wrapper.event.default.command.on_exit.<n>, then
wrapper.event.default.command.on_exit.default. The third pattern had been
getting skipped in previous versions since it was added in version 3.3.0.
* (Professional) Add logic to report a warning if an unexpected value is
specified for the wrapper.event.<event_name>.command.on_exit.<n> or
wrapper.event.<event_name>.command.block.action properties.
* (Professional) Clean up the message log levels so the output is as expected
when using the wrapper.event.<event_name>.command.loglevel property.
* (Professional) Improve the wrapper.event.<event_name>.command.on_exit.<n>
property so the configured action will now work even if the command exits
after the block time out has expired. In previous versions, there was no
way to make the Wrapper do anything other than continue.
* (Professional) Fix a problem where the Wrapper was failing to detect a JVM
exit correctly if an event command had been fired first. The only problem
was that the Wrapper was always reporting a JVM exit code of 0 rather than
the actual exit code.
* Fix a buffer overflow on Windows when either installing as a service, or
updating an existing service. The problem only occurred when properties
containing spaces, or Java passthrough arguments containing spaces were
specified on the command line. The running service did not have any
problems. This was introduced in 3.5.0.
* (Standard, Professional) Improve the error message logged when an unlicensed
version of the Wrapper's native library is used.
* (Standard, Professional) Fix a buffer overflow problem on Windows when
creating a customized Wrapper binary if the target binary name did not
include the ".exe" extension. This problem existed since its intruduction in
version 3.3.7.
* The wrapper.exe, wrapperw.exe and wrapper.dll binaries are now being signed
on Windows making it possible to verify that valid Tanuki Software binaries
are being used.
* Implemented a way to install, remove, start, stop, etc., the Wrapper as a
Windows service from a non-elevated (UAC) console. The Wrapper is elevated
transparently using a child process. This is needed starting with Windows
Vista and 2008 for smooth interaction with the Windows Service Manager.
* (Standard, Professional) Fix a problem where the wrapperjni_*.mo localized
files were not being loaded correctly. These messages are only shown when
debug output is enabled. Application and Wrapper localization was working
fine. Introduced in 3.5.5.
* (Standard, Professional) Enhanced the ability to run with localizations
other than the system language on Windows. The Wrapper process locale was
not being set correctly. So Japanese text was not always showing correctly
if the wrapper.lang property was set when the OS was English or German.
The Java process still has an issue where it will always start with the
system default value for the file.encoding system property. This can still
cause problems writing Japanese text when the file.encoding is German for
example.
* Added support in the shell script for starting/installing the wrapper on
system boot with Upstart.
* Fix a problem in the shell script where it would fail to recognize a running
Wrapper if the Wrapper command line or path contained a square bracket.
* Modify the way we test for the existance of the temp directory so we now
generate our own file name rather than using File.createTempFile. On some
systems createTempFile was taking a long time because it requires that Java
initialize its internal entropy. We discovered that large numbers of files
in the java.tmpdir directory makes Java's entropy initialization code very
slow. This has been a potential issue since 3.5.0.
* Fixed a problem on Windows where passthrough arguments after a "--" which
contained spaces were not being passed through to the JVM intact, they were
being split at the spaces into multiple arguments.
* Fix a problem on Windows where the Wrapper could sometimes crash on shutdown
if more than one thread got into the cleanup code at the same time. This
did not affect running applications and was only an issue on shutdown. It
was more likely if a language pack was loaded. Introduced in 3.5.3.
3.5.6
* Fix a problem on UNIX platforms where the log file path was being calculated
incorrectly if an absolute path was specified for wrapper.logfile, and the
file did not already exist. A warning message was being displayed but the
Wrapper would continue using the default log file. There was a problem in
the message displayed which caused a crash on some platforms include Mac OSX.
Introduced in version 3.5.5.
* Fix a problem on Windows platforms where the Wrapper would crash if it could
not access the directory of the configured wrapper.logfile.
Introduced in version 3.5.5. Bug #3087424.
* Improve the way warnings are logged when there are problems writing to the
configured wrapper.logfile so that the message will now be logged into the
log file that the Wrapper ends up using in case it is successful in falling
back to a default log file.
* Fix a problem on Windows platforms where wrapper.java.additional.<n>
properties that were specified on the command line, and contained spaces,
were not being requoted correctly when building up the Java command line.
Introduced in version 3.3.6.
* Fix a problem where the warning message logged for invalid values of the
wrapper.java.additional.<n> property, contained corrupted text. Introduced
in version 3.3.6.
* Fix a problem on UNIX platforms where an invalid value for the
wrapper.java.additional.<n> property was correctly being reported and then
skipped, but the resulting command line to launch the JVM had a blank value
that was causing the JVM to fail to launch. An invalid value is any value
that does not begin with a "-" character.
* Add a new WRAPPER_INIT_DIR environment variable which can be used to
reference the working directory from which the Wrapper was launched. This is
needed for certain applications because the Wrapper always changes its
working directory to the location of the Wrapper binary.
* Modify the UNIX shell script so it no longer changes the current working dir
to the location of the script. This is no longer needed because the Wrapper
has been changing the working directory to its own location since version
3.2.0.
* Add a new wrapper.request_thread_dump_on_failed_jvm_exit.delay property to
control how long the Wrapper will wait after doing a thread dump before
killing the Java process. This delay has always been hardcoded to 5 seconds.
* Clean up the text of several warning messages about invalid configuration
values to make them more consistent.
* (Professional) Add a new wrapper.jvm_kill.delay property which makes it
possible to control the amount of time to allow between the jvm_kill event
being fired and the JVM actually being killed. Useful if an external event
command is fired that needs to do something with the JVM process first.
* (Professional) Fix a problem where the output of the
wrapper.event.<event_name>.message and wrapper.event.<event_name>.loglevel
properties were not displaying correctly on UNIX platforms.
* (Professional) Fix a problem on UNIX platforms where the Java side of the
Wrapper was not being correctly notified if a large number of child
processes that had been launched with WrapperManager.exec, exited at the
same instant. Some of them were going into a defunct state until the next
child exited, at which point they would be cleaned up. This was mainly an
issue on JVM shutdown if the user code was calling WrapperProcess.waitFor()
as part of its shutdown process. WaitFor calls at any point were getting
stuck and would remain so until another child exited. As part of this fix,
there were also several changes to the Windows implementation to bring the
two code bases into sync.
* Fix a problem on Windows when multiple threads were creating Childobjects,
Handles could have been unintendedly get inherited by another Child Process,
causing problems on reading/writing to the Input/Output/Errorstream.
* Fix a problem on solaris and AIX when errno calls were not thread safe due
to a compiler switch.
* Fix a problem where debug level warning output while loading the Wrapper
configuration was being displayed on startup. This could be fixed because
the Wrapper actually loads the configuration twice, and such output is now
only logged on the second call.
* (Standard, Professional) Remove the undocumented ability to define a single
file share mapping without the index. This would cause confusion if used,
and complicated the code.
* (Standard, Professional) Fix a byte alignment problem caused by a bad
compiler directive on Windows platforms. It was known to cause a crash when
defining mapped drives on 64-bit Windows versions. The problem was in the
source since version 3.3.7, but is not known to cause any other issues.
* (Standard, Professional) Modify the messages displayed when network shares
are mapped or fail for some reason. Also add messages about them being
unmapped on shutdown.
* On some Windows platforms, a failure to delete a rolled log file was not
being reported correctly. The system function to delete a file was
returning success even if it had failed. We now double check.
* Fix a deadlock in the code that is used to send data to the Java process.
It was only possible if debug level output was enabled and log file rolling
was enabled. Introduced in 3.3.7.
* Fix a problem where the Wrapper was not notifying the JVM whenever the log
file was rolled and the new name was the same as the previous one, as it is
when wrapper.logfile.rollmode is anything other than NONE or DATE.
* Fix a problem where the WrapperManager.getWrapperLogFile() was not returning
the accurate log file name until the first time the log file was rolled after
each JVM invocation. This was only noticeable if the wrapper.logfile
contained either the "ROLLNUM" or "YYYYMMDD" tokens.
* Correct an error message that was displayed on UNIX platforms when the
configured java binary could not be accessed. The message referenced a
buffer whose contents were undefined on some platforms.
* Fix a problem on z/OS where due a difference in the API used to lock a
mutex compared to all other UNIX platforms, the mutex's locking and
unlocking code were effectively being ignored. This means that multiple
threads were able to access code which was not thread safe and could lead to
a crash of the Wrapper. This is a problem that has been in the code since
the first z/OS release and is not known to have actually caused any problems.
Starting with 3.5.1, this was only an issue if debug output was enabled.
Versions 3.3.9 through 3.5.0 could have also had problems whenever the
Wrapper received a system signal.
3.5.5
* Add new wrapper.filter.trigger.<n> action, "SUCCESS". If this gets triggered
then the Wrapper will treat the current JVM invocation as a success, and
reset its internal failed invocation counter. This is useful for
applications that need to be restarted frequently.
* (Standard, Professional) Ignore Juniper Network Connect hostIds as they
change on each reboot and are thus unreliable as hostIds.
* Added a PASS_THROUGH setting to the UNIX shell script and Windows
AppCommand.bat.in files which tells them to pass any extra arguments directly
on to the JVM when it is launched.
* Added a FIXED_COMMAND setting to the UNIX shell script and Windows
AppCommand.bat.in files to make it possible to run either without specifying
a command. Mainly useful in conjunction with PASS_THROUGH.
* (Standard, Professional) Added a --passthrough option to the exe
customization, in order to tell the wrapper to precede the whole command line
through to the application in the JVM.
* (Standard, Professional) Added a --conf option to change the default conf
file, the wrapper tries opening when no conf file was explicitly specified.
* Added wrapper.ntservice.account.prompt. If set to TRUE the wrapper will
prompt for all account details (domain, account name, password).
* Fix a minor issue in #include file declarations where a leading space was not
required.
* Add a new #include.required directive which works the same as the #include
directive except that it will output an error and prevent the loading of the
configuration if the included file does not exist. Normally include files
are optional by design.
* Modify the error messages displayed when configuration files fail to load so
they now provide more information about where specifically the problem was.
* Disabled the forced reloading of the SYSTEM (and if set to a specific
account, the user) registry before launching the Wrapper as a service on
Windows. This was done originally in Windows NT because changes to the
configured environment were not being reflected when running a service unless
the system was first rebooted. Microsoft appears to have solved this problem
in Windows XP and 2003. In Windows 7 and 2008, this was actually causing a
problem because the SYSTEM registry contains a setting "USERNAME=SYSTEM" by
default that was overwriting the USERNAME when run as specific user. It was
decided to disable this registry loading for Windows versions starting with
XP and 2003. Of the supported versions, only 2000 is now reloading its
environment. The only difference from version 3.5.4 and earlier that could
be found is that when running as the SYSTEM user on Windows 7 or 2008, the
USERNAME environment variable will now be set to the host name followed by a
dollar sign rather than SYSTEM. This is actually how all other services
work. But just in case this is a problem, it can we resolved by adding a
"set.USERNAME=SYSTEM" property into the Wrapper configuration file.
Bug #3061490.
* (Standard, Professional) Fix a problem for Solaris and HP-UX where the socket
timeout properties for the email notifications were ignored.
* (Standard, Professional) Added wrapper.ntservice.recovery.<x> properties to
define system level actions in the event that the Wrapper process itself
has a failure.
* (Standard, Professional) Fixed a problem in the WrapperProcess.waitFor() and
WrapperProcess.exitValue() call, where it would fail to return when called
after the Wrapper had initiated the shutdown of the JVM.
* (Standard, Professional) Add WrapperProcessConfig.setSoftShutdownTimeout(int)
method to tell the Wrapper how long to wait after nicely asking the child
process to shutdown cleanly when calling WrapperProcess.destroy(). Once the
timeout has ellapsed, the child process will be forcibly terminated. This
timeout had been hard coded to 5 seconds in earlier versions.
* Add more detailed usage output to the UNIX shell script.
* Make it possible to 'pause' and 'resume' the JVM from the UNIX shell and
Windows batch scripts.
* (Professional) Fix a minor memory memory leak while initializing timers.
* Fix a memory leak which could happen if there were any invalid strings in
localization resources.
* (Professional) Fix a bug where the wrapper.event.<event_type>.command.argv.<n>
properties were not correctly parsed on Windows. This issue was introduced
in version 3.5.0.
* (Professional) Add the ability to define wrapper.event.default.command.argv.<n>
properties that will be used if the event specific specific commands are not
defined. Mainly useful for testing.
* Fix a problem occuring when the wrapper failed to roll the log file causing
to write to the wrapper's default log (wrapper.log) file rather than
continuing to write to the current logfile.
* (Standard, Professional) Fix a put problem in the internal hash map
implemenation used for localization where values could be lost. This was
not a visible issue because of the data used.
* Add new wrapper.filter.allow_wildcards.<n> property and make it possible to
specify wrapper.filter.trigger.<n> patterns which contain '*' and '?'
wildcards.
* Add a commented alternative in the default OutOfMemoryError filter
configuration to make it more specific to only trigger on uncaught exception
stack traces. This is to avoid output like that from the
-XX:+PrintClassHistogram JVM argument from causing the JVM to restart with a
false out of memory warning. See the wrapper.filter.trigger.<n>
OutOfMemoryError example for more details.
* Localize the default filter message.
* Added ISO-8859-* encoding support and a few other encodings.
* (Standard, Professional) Fix a problem on UNIX versions, parsing dates in
license keys that was introduced in version 3.5.0. Windows verisons did not
have this problem. All license upgrade terms and lease terms which contained
"08" or "09" as either a month or day were being parsed incorrectly. This
was leading the Wrapper to interpret those date components as "00". If the
number was the date, then this would cause the date to be set to the last day
of the previous month. If it was the month however, it would cause the date
to be set to December of the previous year. For example "2010-08-20" was
being interpreted as "2009-12-20", and "2010-10-08" was being interpreted as
"2009-09-30". This would have prevented some licenses from being able to
start because the upgrade terms were in effect prior to the Wrapper's release
date. Some trial licenses could also have stopped early because their lease
term end was earlier that it should may have been. For normal licenses, his
will have no effect on installations once they are up and running because
they do not use the lease term.
* Fix a problem on Windows when a service received several service control
codes in rapid succession. Since version 3.5.1, the Wrapper was only to
process a single control code in each cycle of its main loop. This was
resulting in messages like "Previous control code (4) was still in queue,
overwriting with (4)." in the logs. The Wrapper can now handle up to 25
control codes per 10ms cycle.
* Fix a problem where it was not possible to send passthrough arguments to the
JVM when installing or updating a Windows Service. Passthrough using the
"--" argument was added in 3.5.2.
* Add a new wrapper.pause_on_startup property which makes it possible to tell
the Wrapper to go directly into a paused state without ever launching a JVM.
* Fix a problem where the STOP command set in a command file was being ignored
if the Wrapper was currently in a paused state.
* Make it possible to specify DEFAULT for the configuration file encoding.
This will cause the file to be loaded using the default system encoding. We
added this by request, but recommend using a portable encoding like UTF-8 to
ensure that the configuration file will load correctly on all systems.
* Added a WRAPPER_LANG environment variable which makes it possible to reference
the current locale language code in the configuration file. One common use
is to do localization using inclues.
(e.g. #include ../conf/wrapper-%WRAPPER_LANG%.conf)
3.5.4
* Add optional support for custom public static methods in the
WrapperSimpleApp and WrapperStartStopApp helper classes. Feature Request
#2812276.
* Add a new special configuration file directive "#properties.debug" which
enables debug output about the properties as they are loaded by the
configuration file. This can be useful to tell if and why certain properties
are being overwritten. Feature Request #3042959.
* Fix a minor problem where the "#include.debug" configuration file directive
was sticky so it would be enabled when the configuration file was reloaded
even if the reloaded configuration file no longer had the directive set.
This was only an issue if the wrapper.restart.reload_configuration property
was set.
* Messages about missing included configuration files that were output when the
#include.debug" configuration file directive was active were being logged at
the ERROR level even though they were not problems.
* Fix a minor problem where the WRAPPER_JAVA_HOME environment variable was not
correctly being set to final when it was set internally by Wrapper. This
could lead to unexected results if the user overwrote it later in their
configuration file.
* Fix a problem on AIX and z/OS, when running the Wrapper without any
arguments. The Wrapper was attempting to use the default wrapper.conf file
but the check for the file was failing causing the Wrapper to continue even
though the file did not exist. This caused a confusing error message to be
displayed, but was otherwise harmless.
* Clean up some debug code associated with sleeping where log output was being
queued when it did not need to be.
* (Standard, Professional) Consolidate some redundant code associated with
waiting for interfaces on startup.
* (Professional) Fix a problem in the email feature of the Wrapper where a
subject of more than 27 bytes in length when encoded as UTF-8. This was
caused by a miscalculation in the Base64 conversion of the subject.
* (Professional) Fix a problem when the WrapperManager.exec method which takes
an array of command elements was called on Windows. The command elements
need to be combined into a single command line, but if any of the elements
contained spaces, the resulting command line was not being correctly quoted.
* Add a new wrapper.java.command.resolve property to control whether or not the
Wrapper tries to resolve any symbolic links in the Java command, specified
with the wrapper.java.command property. Historically, it has always done so,
but some jvm started applications like run-java-tool on Gentoo will fail if
it is run directly as they have a check to make sure it is launched via a
symbolic link.
* Fix a problem on Windows versions where a path to the Wrapper binary,
including the Wrapper binary itself, which was more than 100 characters would
cause a buffer overflow when installing the service. A second similar
problem would happen if the same path was more than 128 characters, whenever
the Wrapper was launched. These were both very old issues and only happened
on 32-bit versions of Windows XP and 2000. Microsoft documentation says that
the issue should also exist on the 64-bit versions, but we were unable to
reproduce it there. Newer versions of Windows are all fine.
3.5.3
* Fix a typo in the UNIX shell scripts that was causing "command not found"
errors to be shown when running the Community Edition.
* Add new wrapper.console.fatal_to_stderr, wrapper.console.error_to_stderr,
and wrapper.console.warn_to_stderr properties to control whether the output
at the FATAL, ERROR, and WARN log levels go to stdout or stderr. In the past
they all went to stdout. With this change, FATAL and ERROR log levels now
default to stderr output.
* Fix a problem where the shell script would produce unexpected results if the
Standard or Professional Edition shell scripts were used with the Community
Edition Wrapper. Fix was in Wrapper binary by changing the default ERROR and
FATAL log level console output to stderr rather than stdout.
* (Standard, Professional) Fix a problem where script error message output was
not being shown if the wrapper.conf file specified in the script did not
exist.
* Fix a problem where errors from failed forks on Windows were always being
flushed immediately rather than honoring the value of the
wrapper.console.flush property.
* Fix a problem on Windows 2000 systems where a new feature added in 3.5.2 was
preventing the Wrapper from running because the API used was too new.
* Change the font of the wrapperw dialog in order to have prettier output of
multibyte characters.
* Add a line feed after the first message when starting the Wrapper from the
UNIX script.
* Add a note in the debug output so the configured java temporary directory is
always logged to help with debugging.
* Add a workaround for a bug in both Sun and IBM JVMs which cause an invalid
exception to be thrown when a socket is already bound. It had been causing
the Wrapper to report: "Unexpected exception opening backend socket:
java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind":
http://bugs.sun.com/view_bug.do?bug_id=6965962
* Add the encoding of the subjects in the event mails to be always UTF-8
Base-64 encoded.
* Add new wrapper.event.<x>.email.smtp.auth.type,
wrapper.event.<x>.email.smtp.auth.userid, and
wrapper.event.<x>.email.smtp.auth.password properties which make it possible
to do LOGIN and PLAIN connection authorizations. Currently SSL (STARTTLS)
connections to the mail are server are not yet supported.
* Fix a buffer overflow while loading the configuration file on Mac OSX
versions. Introduced in 3.5.0.
* Fix a several memory leaks on UNIX versions that were added in 3.5.0, as well
as a few others on all platforms, some from quite early versions.
* Fix some places where a resolved path of exactly MAX_PATH characters in
length could have resulted in a buffer overflow.
* (Standard, Professional) Fix a memory leak disposing language packs.
* Go through and increase the consistency of text strings.
* Fix a problem on HP-UX where the Wrapper was logging a warning that the
configured JVM was invalid if it was a PA-RISC 2.0 binary. Bug #3037317.
* Fix a problem where the WrapperManager was failing to trap and hide errors
initializing the MBean server on some JVMs that did not support it.
3.5.2
* Added new command line argument "--" . All arguments following will be
preceded and passed to the java application. The arguments are attached after
the arguments used in wrapper.app.parameter.<n>
* Fixed a problem in the shell script which could lead to report failed starts
of a daemon incorrectly on the command line.
* Implemented some small logic in the wrapper script which tries to change the
permissions of the wrapper binary to executable if it wasn't set.
* The Demo Application had problems locating the right conf file on Unix
platforms and failed to launch the internal demonstration wrapper process.
* Improved the error message logged if the Windows version of the Wrapper exits
with an internal error. It now logs more information about the internal
state of the Wrapper as well as saving a mini dump file which can be sent to
support to make it easier to diagnose the cause of the problem.
* Fix a problem where the names and displayNames in WrapperWin32Service
instances were corrupted. List affected the WrapperManager.listServices()
and WrapperManager.sendServiceControlCode() methods. There was a similar
problem with the WrapperManger.getUser(), WrapperManager.getInteractiveUser()
and WrapperManager.setConsoleTitle() methods. Introduced in 3.5.0.
* Fix a problem on Windows where wildcards would sometimes fail to be resolved
or cause the Wrapper to crash. This affected the generation of classpaths
and logfile rolling. Introduced in 3.5.0.
* Fix a problem on UNIX platforms where some error messages related to a failed
fork to launch the JVM were not being logged correctly. Introduced in 3.5.0.
* Fix a problem where invalid characters in configuration files that did not
declare an encoding could cause the Wrapper to crash on startup. This could
be issue for users upgrading from versions prior to 3.5.0 as older versions
did not do any character set translations and would not have had a problem.
* Fix a problem in code to check whether a drive was a mapped network drive or
not was failing. This would sometimes lead to a false warning that the drive
could not be identified. Introduced in 3.5.0.
* Add a new ACCESS_VIOLATION command to the wrapper.commandfile property to
test how the Wrapper and external systems behave if the Wrapper were to
crash. Only enabled when the wrapper.commandfile.enable_tests property is
enabled.
3.5.1
* Start using a system function to determine whether or not a character in the
configuration file is a control character or not. This way it works on
non-ASCII platforms.
* (Standard, Professional) Fix a crash on Windows platforms caused by freeing
up unallocated memory while loading the Wrapper's configuration.
* Add debug output describing the system and current code pages on Windows
versions to help understand encoding and mojibake issues.
* Add a Japanese localized src/conf/wrapper.conf.in_ja template configuration
file to assist Japanese users.
* Fix an potential deadlock on UNIX platforms if the JVM exits while logging
is taking place and the wrapper.debug or undocumented wrapper.state_output
properties were set to TRUE.
* Fix a problem where a failed JVM invocation that happened immediately after
being launched would cause the Wrapper to immediately give up and shutdown.
This should not have been possible with normal JVM configurations, but was
turned up in testing.
* Fix a problem where some startup output of the tick timer debug output was
corrupted. This was only an issue if the wrapper.tick_output property was
set.
* (Standard, Professional) Rework the way text is localized so that mallocs
are all handled on initialization. 3.5.0 had problems with occassional
freezes and crashes caused by mallocs being made within signal handlers.
The problems were rare unless debug output was enabled.
* Greatly simplify signal handlers on all platforms so they now do as little
as possible, actions are now queued and then processed by the main thread.
* (Standard, Professional) Fix a problem where the hostname in the
wrapper.syslog.remote.host couldn't resolve a hostname (IP Address was
working).
* (Standard, Professional) Add debug output on Windows versions to help debug
localization and code page issues.
* (Standard, Professional) Fix a localization problem on Windows where the
Wrapper was using the system-wide language rather than that of the current
process. This was resulting in mojibake if the Wrapper was launched in a
new console if that new console did not support the required code page.
This was only an issue if the user had changed the active code page from the
default for their Windows desktop.
* Fix a problem on Windows platforms where the JVM child output was being
logged with an extra line feed in some cases.
* Fix a problem running the DemoApp from some Network shares on Windows.
* Add a new WrapperManager.isWindows() and WrapperManager.isMacOSX() methods to
make it easy to write such conditional code as both platforms can require non
standard code.
* (Standard, Professional) Make the GetHostId.bat file more robust so it can be
executed using a relative reference from the command line. It also now
supports Delta-pack style Wrapper binary naming and falling back to use which
binaries are available.
* Change the timing of when the wrapper.working.dir is set so that any error
messages generated while loading the configuration will be logged to the
correct log file. It is also needed for Standard and Professional Editions
to ensure that the language pack is loaded from the correct location so that
all such messages will be in the correct locale.
* Fix a problem on UNIX platforms where the status command was failing with an
error due to the localization feature added in 3.5.0.
3.5.0
* (Standard) Added the ability to detect and react to thread dead locks in
the JVM. Requires at Java 1.5. Added wrapper.check.deadlock,
wrapper.check.deadlock.interval, wrapper.check.deadlock.action, and
wrapper.check.deadlock.output properties to configure the detection.
* (Professional) Add a new jvm_deadlock event which is fired in response to
a thread deadlock being detected within the JVM.
* Fix a problem where the intervals like wrapper.ping.interval were all
rounding down causing them to function at a rate one second shorter than
configured.
* Fix a minor memory leak calling WrapperManager.exec.
* Add a new wrapper.filter.message.<n> property which can be used to control
the message which is logged when a wrapper.filter.trigger.<n> is matched.
* Rework the way actions are fired for the wrapper.filter.<n>.action and
wrapper.timer.<n>.action properties so there is no longer any duplicate
code.
* Modify the way the wrapper.filter.<n>.action and wrapper.timer.<n>.action
properties work so it is now possible to specify a list of actions which will
happen in the order specified. This makes it possible to do a thread dump
and then restart in response to an error.
* Add the DEBUG action to the wrapper.filter.<n>.action property for
consistency.
* (Professional) Implement the ability to fire user defined events as actions
of the wrapper.filter.<n>.action, wrapper.timer.<n>.action, and
wrapper.check.deadlock.action properties.
* Fix a problem in the WrapperProcess.destroy() function, when a child process
couldn't have been forcibly killed.
* Add GetHosdID.bat file for Windows platforms. This file will open a dialog
displaying the HostId of the machine.
* Fix a problem in the shell script which, on a rc based OS, could lead to
problems starting the Wrapper when the APP_NAME in the script contained
capital letters.
* (Standard, Professional) Added a set of wrapper.share.<n>.* properties which
makes it possible to configure the Wrapper to map specific network resources
before launching the JVM on Windows.
* Corrected the way the Wrapper is installing itself as a Windows service when
the binary and/or conf file are located on a Mapped Drive.
* Add new wrapper.pausable and wrapper.pausable.stop_jvm properties to control
whether the JVM can be paused or not, and deprecate the use of the Windows
specific wrapper.ntservice.pausable and wrapper.ntservice.pausable.stop_jvm
properties.
* Modified the wrapper.commandfile property so PAUSE and RESUME commands are
now supported on all platforms at any time.
* Modified the wrapper.filter.action.<n> property so PAUSE, RESUME, and DEBUG
actions are now supported.
* (Professional) Modified the wrapper.timer.<n>.action property so PAUSE and
RESUME actions are now supported.
* (Professional) Modified the wrapper.event.<event_name>.command.block.action
property so PAUSE and RESUME actions are now supported.
* Added new WrapperServicePauseEvent and WrapperServiceResumeEvent classes to
make it possible to notify an application that it has been paused or resumed.
To date, this was only possible when the Windows service was paused or
resumed
* (Professional) Add new "wrapper_pause" and "wrapper_resume" event types that
are fired whenever the Wrapper is paused or resumed.
* Enhance the command line parsing for the WrapperManager.exec() command. The
single commandLine version of the exec call will handle quotes more
sophisticated.
* Modified the wrapper.syslog.ident property so its value is now silently
trimmed to 32 characters in length. This is needed to avoid problems with
syslog servers. (See RFC 3164 section 4.1.3)
* (Standard, Professional) Add new wrapper.syslog.remote.host,
wrapper.syslog.remote.port, and wrapper.syslog.local.host properties which
can be used to redirect all syslog (UNIX) or Event Log (Windows) output to
a remote syslog server.
* Add support for the wrapper.syslog.facility property on Windows so remote
syslog entries can be sent from Windows versions of the Wrapper.
* Add debug output from the WrapperManager class which shows information about
the current wrapper.jar, including its size, location, and MD5 hash.
* Add a check for wrapper.java.classpath.<n> entries containing quotes. The
quotes are now stripped and a debug warning logged.
* (Standard, Professional) Increase the size of the wrapperw.exe error dialog
so it is a little easier to read. Also changed the font for the same reason.
* (Standard, Professional) Modify the title of the wrapperw.exe error dialog
so it now includes the value of the wrapper.displayname property.
* Add a new check for the writability of the configured Java temporary
directory. When running on Vista, it will not be writable and can lead to
errors.
* Added new wrapper.java.tmpdir.required and wrapper.java.tmpdir.warn_silently
properties to control whether the temporary directory is required.
* Add a note in Wrapper conf template showing users how to configure a specific
Java version to use.
* Add a new CLOSE_SOCKET command to the wrapper.commandfile property and added
a new wrapper.commandfile.enable_tests property to control whether it can be
used.
* Fix a debug warning while shutting down caused by one thread closing the
backend socket when another expected it to be open.
* If the backend socket between the JVM and Wrapper is somehow closed, make the
JVM respond promptly by restarting the JVM immediately to resync with the
Wrapper. Added log information to make it clear when this happens.
* Add a new wrapper.use_tick_mutex property to control whether or not the
internal tick timer is protected by a mutex. (Experimental)
* (Standard, Professional) Add support for zLinux 32 and 64-bit on s390 and
s390x systems.
* Change the internal encoding of the wrapper from native characters to
UNICODE. This will allow the wrapper to handle correctly any characters in
its configuration file and internally.
* (Standard, Professional) Implement a new WrapperResources class which makes
it possible for user applications to localize their applications using the
same methods common to native applications. The Wrapper uses this internally
to provide localized versions of the Wrapper.
* Remove the old org.tanukisoftware.wrapper.resources package as it is no
longer being used.
* (Standard, Professional) Add Japanese language pack to localize the Wrapper
to Japanese.
* Fix a problem in the WrapperManager class where unexpected exceptions thrown
in the main socket loop were being thrown away without being logged.
* Make the Wrapper more robust against failures removing the Wrapper's shutdown
hook on shutdown. It had been causing the clean shutdown of the JVM to fail
as an unexpected exit.
* Fixed a problem in the wrapper customize code where customized multi layer
icons may get scaled incorrectly by Windows. Bug #3015848
* Modify the wrapper.on_exit.<n> property so it is now possible to PAUSE the
Wrapper when a JVM exits. This delays the restart of the JVM until the
Wrapper is resumed.
* Add a new log format, 'U', which logs the approximate time in seconds since
the Wrapper was launched. It is based on the internal tick timer and will
be a few percent lower than the actual number of seconds that have elapsed.
Added to the wrapper.console.format, wrapper.logfile.format, and
wrapper.logdialog.format properties.
* Fix a problem where deleting the configured anchor file was not recognized
if the JVM was not running at the time. The Wrapper was not noticing that
it was missing until the next JVM was launched.
* (Standard, Professional) Add a new NOTICE log level which is used to log
license related message. These will only show up trial license log output.
* (Standard, Professional) Add a new default 15 minute trial license which
can be used out of the box on any machine without the need to register and
obtain a trial license or purchase a license.
* Add a new wrapper.environment.dump property which will dump all of the
environment variables to the log, along with where the variables originated.
* Force the Wrapper to flush all logfile output for each line until the
configuration file has been loaded. There is normally no output up to this
point anyway, but this ensures that any errors are logged in a consistent
location.
* Move the registration of the main thread with the logging system up a bit
to make it possible to perform low level debug logging earlier.
* Add a set of checks to display an error and prevent the Wrapper from starting
if the batch or shell scripts being used are based on the TestWrapper demo
application. It is important that the user start with the default template
files in the distribution src/bin and src/conf directories to make sure the
integration goes smoothly.
3.4.1
* Fix a problem where the wrapper.app.parameter.1 property was always being
set to an empty string when launched from launchd on Mac OSX. It worked
correctly with the testwrapper application, but would fail for most user
applications.
* (Professional) Fix a potential synchronization problem in the log output
of the tick timer, event command and event email code. This had been in
the code since 3.3.0 without any reports of problems.
* Improve the error message displayed when the configured wrapper.java.command
can not be found on the path.
* Log the name of the signal in the logs when a SIGSEGV is detected from the
JVM. It had been logged as Unknown.
* Add some comments to the wrapper.conf.in template to help users get started
with a new license key file.
* Add some default properties to the wrapper.conf.in template file to make
it easier to get up and running with out of memory checks, as well as
sending out alert emails.
* Add a small debug message when running wrapperw.exe so it is clear which
wrapper binary is being used.
* Fix a problem where the wrapper.logfile.maxfiles was not being applied on
startup when the current log file did not yet exist. This was true for any
wrapper.logfile value which contained a unique value like a PID.
* (Professional) Fix a problem in the WrapperProcess.destroy() function, where
the function was failing to forcibly kill the child process.
* (Standard, Professional) Add a new GetHostID.bat file for Windows platforms.
This file will open a dialog displaying the HostId of the machine to help
new users get up and running.
* Add a new WrapperManager.appearOrphan() method which can be used to test
how the WrapperManager shuts down the JVM in the event that the Wrapper
process ever crashes or freezes. This was not due to any particular problem
and was added to fill out our test coverage.
* (Professional) Fix a problem where event commands were being left in a
defunct state after execution on UNIX platforms.
* Fix a potential problem on 64-bit versions where the internal tick timer was
not rolling over in the same way as the 32-bit versions. This has been in all
previous versions but is not known to have caused any problems. It was fixed
for consistency.
* Modify the WrapperManager class so it will now request a JVM hard exit only
after 4-times the ping timeout, in seconds, since the last contact with the
JVM. This had been 90 seconds more than the ping timeout, which was not
always long enough when the wrapper.ping.timeout was very large.
* Shift the initial start point of the tick counter so it will roll over 50
seconds after startup. This shouldn't be noticeable to the user, but makes
sure that this roll over is much better tested as it always happens the first
time on startup.
* Add a new wrapper.java.classpath.use_environment property which makes it
possible to set the classpath using the CLASSPATH environment variable rather
than including it on the Java command line.
* Fix a problem where requests to shutdown the Wrapper when in the state where
it was just about to launch a JVM would being ignored. This was fixed in all
editions, but was only an issue in the Professional Edition when the
wrapper.event.jvm_prelaunch.command.on_exit.<n>=SHUTDOWN property was being
used with the wrapper.event.jvm_prelaunch.command.block=TRUE property and the
command exited with a code that triggered the SHUTDOWN.
* (Professional) Add a new wrapper.event.<event_type>.command.block.action
property to control how the Wrapper behaves when a command does not complete
execution within the configured timeout. Accepted values are CONTINUE, KILL,
KILL_SHUTDOWN and KILL_RESTART. Default value is CONTINUE.
* (Professional) Made it possible to use the "default" event type with the
wrapper.event.<event_type>.command.loglevel,
wrapper.event.<event_type>.command.block,
wrapper.event.<event_type>.command.block.timeout,
wrapper.event.<event_type>.command.on_exit.<n>, and
wrapper.event.<event_type>.command.on_exit.default properties.
* Fixed a single byte buffer overflow which takes place just before the JVM is
launched on Windows platforms. This was introduced in 3.4.0.
* Add a message pointing the user to the Wrapper's log file when the service
fails to start after it has been launched.
* Update the debug message displayed when attempting to open the backend socket
if the port is unavailable so it doesn't seem like a problem. It will retry
with another port.
* Work around an issue on some Solaris problems where the shell script would fail
if /usr/ucb/ps wasn't installed.
* Fix a problem on UNIX versions where the Wrapper would fail to resolve the
correct location of java if it was located using the system PATH, and that PATH
element pointed to a binary via a relative symbolic link. This was introduced
in 3.4.0.
3.4.0
* Increased the minimum supported Java version from 1.2 to 1.4.
* Removed the reflection code used to manage the Wrapper's shutdown hook.
The Runtime methods are now called normally.
* Add a note in the TestWrapper shell script to make it clear that the user
should always use the scripts in the WRAPPER_HOME/src/bin/ directory when
generating scripts for their own applications. This became more of an
issue because of changes to the TestWrapper script starting with 3.3.8.
Bug #2902843.
* (Professional) Added new WrapperManager.exec methods and a new
WrapperProcess class to allow the launching and management of child
processes through the Wrapper rather than using the standard Runtime
class. This makes it possible to clean up child processes when the
JVM crashes or is restarted, as well as solves severe memory issues with
the way processes are forked on some UNIX platforms.
* (Professional) Added a new wrapper.child.status.loglevel property to make
it easier to debug the status of child processes.
* (Professional) Added a new wrapper.child.count.interval property to control
the interval at which the number of waiting child processes is logged after
a JVM is shutdown.
* (Professional) Added a new wrapper.jvm_cleanup.timeout property to control
the amount of time that managed child processes still running after the JVM
has exited are given to shutdown before being forcibly killed.
* Fix a problem with WrapperManager.getUser() and getInteractiveUser() methods
which was preventing us from using the latest compiler on 32-bit Windows.
(The compiler used to build 32-bit Windows versions was rolled back to the
version used through the 3.3.5 release in 3.3.9 to work around the problem
that was causing these methods to always return null.) The change in this
version should not affect how the Wrapper functions.
* The old compiler used in 3.3.9 for Windows 32-bit builds was causing a false
hit on Symantec security software. The new compiler causes the Wrapper to
once again pass without any warnings.
* Added a warning while starting up the JVM which will be displayed if the
Java command in wrapper.java.command does not point to a valid java binary
file.
* [Changed the scripts and batch files to try to load the wrapper executable
according to the system, i.e. on 64-bit systems the 64bit binary of the
wrapper is attempted to be executed first and after this fails the 32 bit
gets attempted to be loaded. This behaviour is primaly useful with the
delta-pack of the wrapper.]
* Add some debug output logging the current timezone to assist supporting
time related problems.
* (Standard, Professional) Added a new wrapper.license.debug property which
will log information about the license key(s) being tested on startup.
* (Standard, Professional) Fix a problem where license validation was
failing at certain times of the day for servers with timezones east of
Japan. Development license keys which have their update times obfuscated
were not affected. This was a problem introduced in 3.3.7.
* Fixed a bug in the wrapper shell script which occurred when running the script
on a Solaris within a non singlebyte locale. Bug #2910327
* Fixed a potential bug in the wrapper script where requesting a Thread Dump,
the shell is sending the wrapper console to the background and returning
with a prompt.
* Fix a problem where Java log output would sometimes get extra line feeds
when under heavy load.
* Fix a problem which was leading to a resource not found error when trying
to start a service, if it was installed on a Mapped Network Drive under
Windows.
* Added some advice messages recommending the use of UNC paths if a resource
located on a Mapped Network Drive is used in the configuration file on
Windows versions.
* (Standard, Professional) Fix a bug in the wrapper binary customization,
which occurred when the source binary file was set to read only.
* Fixed a null string problem in the error message if a classpath value
wasn't found.
* (Professional) Added the option to include a logfile into the wrapper's
EmailNotification mails via wrapper.event.default.attach_log=TRUE
* Improve the message displayed when a user calls
WrapperManager.requestThreadDump() in JVM which does not have console
window on Windows. This should never be an issue when run with the Wrapper,
but can happen if running standalone without the wrapper binary.
* Update the Windows batch scripts so they now take AMD64 and IA64
architectures into account when deciding which version of the Wrapper to
run when using the delta pack.
* Update the UNIX shell script so it now does a much better job of resolving
the ideal platform bits to run the correct version of the Wrapper when using
the delta pack. Thanks to Leo Leung for the patch.
* Add install and remove commands to the UNIX shell script so it is now much
easier to install and remove the Wrapper on many UNIX plattforms to start
and stop on system startup and shutdown. Thanks to Leo Leung for the patch.
* Update the Windows batch scripts so it is now easier to change the location
of the Wrapper configuration file or rename the Wrapper binary when using
the scripts.
* Added a new QueryApp-NT.bat.in template script which can be used to query
the current running status of the service on Windows.
* (Standard, Professional) Add a new "-u" or "--update" command to the Wrapper
which allows you to effectively reinstall the Wrapper as a service without
having to provide the account credentials if the service is running as a
specific user. This is very useful for installers upgrading an application
to a new version.
* Add a new "update" command to the Windows AppCommand.bat.in batch script.
* Go through and clean up the messages displayed when controlling the Wrapper
as a service so the messages are consistent and more meaningful to the user.
* Add wrapper.wait_for_hostid and wrapper.max_hostid_timeout property.
This properties set if and how long the wrapper shall wait when starting up
until the hostid is available. This is important to make sure that server
licenses are validated correctly on UNIX platforms as the OS is booting up.
* (Professional) Fix a problem where environment variables referenced in
property values were not being expanded correctly the first time they were
referenced if the property's value was a default value. The underlying fix
was in all editions, but this was only causing a problem in the Professional
Edition where the WRAPPER_HOSTNAME variable was not being expanded in the
subject and body of emails sent out for the "wrapper_start" event if the
defaults were used.
* (Professional) Fix a problem where backslashes in the body of emails,
configured with the wrapper.event.<event_name>.email.body property, were
not being handled correctly when displaying things like paths from
environment variable references.
* Fix a problem on UNIX platforms where the Wrapper was displaying an error
about not being able to locate the configuration file when the Wrapper was
run without any arguments.
* (Standard, Professional) Improve the message shown when a License Key is not
found.
* Add a new message to the Community Edition when the user requests a HostId.
* Add WAIT_FOR_STARTED_STATUS and WAIT_FOR_STARTED_TIMEOUT to the script. This
lets the script wait (up to timeout sec.) when starting a daemonized process
until the process has been started.
Thanks to Dobes V. Feature Requests #2917391.
* Improve the error message displayed when the user tries to run the Wrapper
with the internal -s or --service commands.
* Fix a problem where the WrapperSystemPropertyUtil.getBooleanValue() method
was not correctly returning the specified default value when the looked up
property was missing. Also added a new getStringValue() method.
* Improve the error message displayed when the user tries to install and remove
the wrapper as Service on Windows Versions after Windows Vista.
* Add an advice message when MacOSX applications launched with launchd
encounter a "Returning nil _server" error when displaying a GUI.
3.3.9
* Modify the way JNI functions are called from within the native library so
they work correctly on platforms which are not ASCII based.
* (Professional) Add support for IBM z/OS 390 servers. This is still an alpha
release and will be made available on request.
* Improve the message displayed when a server license key is used on a
different server.
* Add a minimum max file size of 1024 bytes to the wrapper.logfile.maxsize
property to avoid the log file rotating too often if the user enters a
very small value.
* Add a message that shows up in the console when the Wrapper fails to write
to the configured log file. As with previous versions, it will then fall
back to writing to wrapper.log in the current working directory.
* On UNIX platforms, automatically set the wrapper.disable_console_input
property when wrapper.daemonize is set.
* Fix a problem introduced in 3.3.8 where relative configuration file includes
were failing to resolve correctly when the wrapper.working.dir and
wrapper.daemonize properties were used together. The wrapper.daemonize
property causes the configuration to be loaded twice on startup and the
working directly was not being reset correctly before it was loaded the
second time.
* Fix a problem introduced in 3.3.8 where wildcard selection of files on
Windows failed in some cases.
* Fix a problem introduced in 3.3.8 where setting the wrapper.logfile.maxfiles
property to 0 was causing all log files to be deleted rather than none when
the ROLLNUM file pattern was used.
* Revert the way rolled log files are deleted when using the ROLLNUM file
pattern to the functionality used in versions 3.3.7 and earlier. Files such
as wrapper.log.bak or other files manually created with the same log file
base name were also being deleted with 3.3.8.
* (Standard, Professional) Fix a problem where the close window button in the
title of the WrapperW log dialog was not correctly cancelling the dialog.
* (Standard, Professional) Fix a problem where the WrapperW log dialog would
sometimes fail to show itself on top of other windows if the splashscreen
had been displayed on startup.
* Fix a problem on 32-bit Windows versions where starting with he Wrapper,
the WrapperManager.getUser() and getInteractiveUser() methods were always
returning null. This problem was introduced in version 3.3.6.
* (Professional) Fix a buffer overflow when sending alert emails to multiple
addresses. This would sometimes cause crashes in versions 3.3.7 and 3.3.8
when sending alert emails to even a single recipient. Because of the nature
of the overflow, in most cases did not cause any problems.
3.3.8
* Add the new start type DELAY_START for NT Services, which startes the service
after other auto-start services are started plus a short delay.
* Fix a problem where the Wrapper's PID file was not being set to the correct
PID when the wrapper was launched daemonized. With the shell scripts that
ship with the Wrapper, this means that it would not be possible to stop the
Wrapper using the script because the expected PID did not exist. This was
a problem introduced in 3.3.7.
* Changed the timing for the wrapper's splashscreen when the splash screen
mode was set to JVM_STARTING. Now the splashscreen will disappear when the
JVM has been initialized.
* Fix a problem where the splashscreen was being shown when starting a service
or performing other command line operations.
* Remove some extra debug output on startup for Mac versions.
* Fix a crash in the Community Edition on PPC platforms of the Mac OSX version.
This crash has been reproduced in all versions starting with 3.3.1. The OSX
distribution is a universal binary but does not appear to result in a crash
on x86 servers. Standard and Professional Editions were not affected.
* Fix a problem on Windows versions where problems accessing the registry were
not reporting the correct error message. This did not cause any problems in
and of itself, but it made it difficult to track the down the cause.
* When wildcards are used in the classpath elements, the list of matching jar
files included in the classpath are now sorted to ensure that their order
is consistent across installations. Normally it would not matter, but if
certain classes or resources are redefined in multiple jars this will ensure
that the application now always works the same.
* Fix a problem where wrapper.logfile.maxfiles was being ignored when
wrapper.logfile.rollmode=JVM was set.
* Changed the way the wrapper.logfile.maxfiles property works with the ROLLNUM
token. Now when the log files are rolled, all files greater than maxfiles
count will be deleted. Previously, the Wrapper would roll within the maxfiles
count and ignore extra files if they existed. This would cause extra files to
be left around if the maxfiles property value was decreased.
* Add new wrapper.logfile.purge.pattern and wrapper.logfile.purge.sort
properties which make it possible to limit the number of log files in some
advanced cases. Be sure to read the documentation before playing with them.
* Fix a potential crash when referencing non-existent environment variables
in the value of wrapper.logfile.
* Modify the way all properties used to define file names behave so that
undefined environment variable references will now have their '%' characters
replaced by '_'. This is to avoid problems caused by file names containing
'%' characters on some platforms.
* Fix a problem introduced in 3.3.6 where the windows shown by the JVM or its
child processes could not be displayed when running in iteractive mode.
* Rework the TestWrapper application a bit so it can now be run in headless
mode for testing.
* Fix a problem on some UNIX platforms where the shell script was showing an
extra '-n' when run with the "start" command.
* Fix a problem for FreeBSD which could cause the wrapper being unable to stop
the wrapper daemon if the ps command buffer size (kern.ps_arg_cache_limit)
was too small to contain the wrapper command line.
3.3.7
* (Professional and Standard) Added the ability to customize the wrapper.exe
and wrapperw.exe binaries on Windows with a user specified icon and splash
screen.
* (Professional and Standard) Added a new wrapper.splashscreen.mode property
to control how long the splashscreen is visible.
* Fix a problem on SELinux where a strict security policy could lead the
Wrapper fail to load the libwrapper library. Thanks to Jean for the hint.
* Fixed a problem in the obfuscated license date, which caused a license to
be reported as invalid if run in a timezone west of Japan. This feature
was implemented in 3.3.6, but disabled on the site until the release of
version 3.3.7. Thanks to Leo for the hint.
* Added a new WRAPPER_PID environment variable. Feature Request #2870136.
* Added a new WrapperManager.getWrapperLogFile() method and
WrapperLogFileChangedEvent class that can be used to receive notifications
of changes to the Wrapper log file currently in use.
Feature Request #2870133.
* (Profesional) Improved the wrapper.event.<event_name>.email.to property
so it now supports the ability to specify multiple recipients.
3.3.6
* Introduce the wrapper.timezone property. This property allows to set the
timezone in which the wrapper will be executed. This property is available
in the standard and the professional Edition of the Java Service Wrapper.
* Fix a potential problem on Windows platforms where a failure to register the
control handler was not being logged. If this happened, user logoffs would
not be trapped correctly but no other problems would have occurred.
* Fixed a problem in the shell script on Solaris platforms where a deep
directory structure would cause the script to incorrectly report that the
Wrapper was not running. That could lead to multiple zombie copies of the
Wrapper and its application running in memory.
Bug #1664303.
* Fixed a problem in the shell script on HP-UX platforms where a deep
directory structure would cause the script to incorrectly report that the
Wrapper was not running. That could lead to multiple zombie copies of the
Wrapper and its application running in memory.
Bug #2812207.
* Improve the error message displayed when there are problems initializing the
main class specified for the WrapperSimpleApp, WrapperStartStopApp, or
WrapperJarApp helper classes.
* (Professional) Add new wrapper.event.<event_name>.loglevel and
wrapper.event.<event_name>.message properties which can be used to output
a customizable message like "Event: <event_name>" to the logs at an arbitrary
log level.
* Add debug output in the Windows version to log the full path of the native
library.
* Add a new wrapper.java.detect_debug_jvm property which will control whether
or not the Wrapper disabled timeouts when java's debugger is in use. The
Wrapper has automatically disabled timeouts in this case since version 3.2.1.
Thanks to Ruslan Gainutdinov for the patch.
* Fix a buffer overflow problem for values of wrapper.ntservice.name.
* Fix a problem with where the wrapper.syslog.ident property was not working
as documented. It had been necessary to use wrapper.ntservice.name in its
place.
* Add a new wrapper.ignore_sequence_gaps property which makes it possible to
have non sequential numbered property values. This affects the
wrapper.app.parameter.<n>, wrapper.event.<event_name>.command.argv.<n>,
wrapper.filter.trigger.<n>, wrapper.java.additional.<n>,
wrapper.java.classpath.<n>, wrapper.java.library.path.<n>,
wrapper.ntservice.dependency.<n>, and wrapper.timer.<n>.interval,
properties. The default value maintains past functionality.
Feature Request #1930298.
* (Professional) Fix a problem where the Event Handler Variables
were not being set correctly in the values of the
wrapper.event.<event_name>.command.argv.<n> properties.
* (Professional) Fix a potential access violation if memory allocations fail
while sending event mails or executing event commands.
* Add a new WRAPPER_HOSTNAME default environment variable as an alias of the
existing WRAPPER_HOST_NAME variable.
* (Professional) Deprecate the use of the wrapper.event.<event_name>.set_environment
property. It will remain in the product for compatibility but its use is
discouraged as it does not always work correctly when the configuration
file is reloaded. See the property's documentation for more details.
* Add a new DUMP action to the wrapper.filter.action.<n> property to make it
possible to invoke a thread dump in response to a specific string in the
JVM's console output.
* Fix a problem where the WrapperManager.stopAndReturn method was dead locking
if called when the JVM was being run in standalone mode without the Wrapper.
Bug #2711872.
* (Standard, Professional) Modify the way the licensing times work so the
Wrapper compares the License Upgrade Term to an official release date
rather than the build date. This makes it possible to release additional
platforms at a later date while keeping the use of a license consistent.
* (Standard, Professional) Make it possible to obfuscate the upgrade term in
License Key files for development licenses so it is not visible to an end
user what the development license holder's upgrade term is. This feature
is accessed from the License Management Page when downloading a new or
existing License Key file.
3.3.5
* Fix a problem on some UNIX platforms introduced in 3.3.4 where the Wrapper
would crash on startup if the configured JVM could not be found.
* Fix a problem introduced in 3.3.2 where the Wrapper could crash if the
system host name was longer than 27 characters in length.
* Fix a potential problem with the way thread ids were being compared on UNIX
systems.
* Add a new wrapper.java.additional.auto_bits property which will automatically
add the -d32 or -d64 arguments to the JVM for platforms whose JVMs typically
expect the argument.
* (Professional) Fix a problem with the Date field of outgoing event emails.
3.3.4
* (Standard, Professional) Update the development license to version 1.1
so that a new copyright notice file can be shipped with user applications
rather than the full license text.
* The Community Edition may be licensed under either the GPL2 based Community
License, or the Development License. The source for the Standard and
Professional Editions of the Wrapper are proprietary.
http://wrapper.tanukisoftware.org/doc/english/licenseOverview.html
* Fix a problem introduced in 3.3.2 where querying a the status of a Windows
service with the -q or -qs commands resulted in an access violation. The
running status of the service was reported correctly but additional
configuration information was failing. Bug #2644515.
* Add a new wrapper.disable_restarts.automatic property to disable only
restarts caused by JVM timeouts, crashes, etc. Manual or configured
restarts will still be allowed.
* Switch to using make for HPUX IA 32/64 builds.
* Add Advice comments when the Wrapper fails to launch the JVM process.
* Fix a problem on UNIX platforms where log entries made by the forked Wrapper
process would result in two blocks of log entries in the log file because
the parent Wrapper process would think they were console output from the JVM
process.
* Add a set of new wrapper environment variables that can be referenced in the
wrapper.conf file to generate random numbers, or timestamps for use in
generating unique file names, etc. See the Default Environment Variable
definitions section for more details.
* (Standard, Professional) Fix a problem with Development licenses being
able to authorize applications using Integration Method #4 which was
added in version 3.3.3.
* Add the number of bits of the current Wrapper to the startup banner to aid
in support requests.
* (Standard, Professional) Fix a crash problem on HPUX versions which would
reliably happen on some machines at startup.
3.3.3
* Modify the wrapper.ignore_signals property so it now takes the values
WRAPPER, JAVA, and BOTH, in addition to TRUE and FALSE.
* Modify the WrapperManager so it is now careful never to poll the native
library once the JVM is flagged as being ready to shutdown. This is to
make sure that the JVM never exits in the middle of a call as that could
lead to the JVM crashing.
* Add a pair of methods to allow threads to request and release locks which
will prevent the Wrapper from letting the JVM exit while certain operations
are in progress. See WrapperManager.requestShutdownLock() and
WrapperManager.releaseShutdownLock().
* Fix a problem where interactive services would sometimes leave a console
window visible when after starting up. The Wrapper is now more resilient
about closing the window even if it fails to do so initially.
* Add a new integration method (#4), which makes it easy to configure the
Wrapper to execute an executable jar file.
* Fix a problem where the random generator was not being seeded correctly
before naming the Wrapper's console window when running as a Windows
service. This was leading to problems identifying the wrapper's console
when more than one service was running on the same machine.
3.3.2
* Add a file information record to the wrapper.exe and wrapperw.exe binaries
so the Version tab will be displayed correctly in the Properties dialog of
the file.
* (Standard, Professional) Fix a problem with the wrapperw.exe binary where
the log dialog was not being displayed correctly when the Wrapper was
launched with the "-?", "-v", or "-h" arguments.
* (Standard, Professional) Fix a problem with the wrapperw.exe binary where
a message was being displayed in the dialog with the location of the full
log file even if there had not been any entries written to the log.
* (Professional) Improve the debug output produced when sending event emails
when the wrapper.event.<event_name>.email.debug property enabled.
* (Professional) Add wrapper.event.<event_name>.email.send.timeout and
wrapper.event.<event_name>.email.receive.timeout properties to avoid the
wrapper hanging waiting for a response from a remote mail server.
Bug #2064885.
* (Professional) Fix a problem where the Wrapper would get stuck and fail to
send emails with some mail servers. Problems was being caused by incorrect
linefeeds in the body of the email.
* Add a warning if the leading '#' is missing from an '#include' in the
configuration file to assist users with include file problems.
* Added a new wrapper.ntservice.generate_console property which will cause
the Wrapper to always generate a console when running as a service and
then hide it immediately. This will cause a slight flicker but is needed
to support thread dumps. Bug #2060181.
* Fix a problem in the Windows version where the console window would
sometimes be left visible when running as an interactive service even when
it was configured to be hidden.
* Add support for PowerEvents so Windows services can respond to suspend
and resume events.
* Fix a problem where the wrapper.key system property passed to the JVM was
being generated incorrectly randomly, 1 in 2048 times the JVM was launched.
This would result in the JVM failing to start and the Wrapper shutting down.
* Add a new wrapper.disable_console_input to disable to feature which allows
the Wrapper to pass console input on to the Java process.
* Fix a buffer overflow problem in the logging code which would happen once on
startup. This was benign on most platforms but was causing intermittent
crashes in the 32-bit AIX version.
* Modify the way configuration properties are parsed so that their names are
no longer case sensitive.
* Modify the WrapperServiceException so that a new getErrorCode method can be
used to obtain the integer error code which caused the exception.
Feature Request #2188280.
* (Standard, Professional) Fix a problem where on some Windows machines the
Wrapper would return a random hostId that changed each time the system was
rebooted.
* (Standard, Professional) Make it possible to define License Keys so that
their property names are encoded using either the host name or hostId. This
makes it possible to define multiple keys within the same configuration file,
visible on the same host. This was necessary to support some load balanced
network adapters where the visible hostId changes depending on the active
physical network adapter.
* Rework the Java side state engine so it is now possible for the Java side of
the Wrapper to respond to stop events while the WrapperListener.start method
is still in progress.
* Add a new wrapper.listener.force_stop property which allows control over
whether the WrapperListener.stop method is called on shutdown even if the
WrapperListener.start method has not yet completed.
* Fix a problem on Windows where the ability to start and stop the Wrapper as
a service using the Wrapper itself was requiring the Administrator permission
when a lower permission should have been possible. The Wrapper should now
allow service control to do whatever is possible from the Services control
panel.
* Fix a memory corruption error if the value of wrapper.java.maxmemory was more
than 4 digits in length. wrapper.java.initmemory did not have any problems.
* (Professional) Add a new wrapper.event.<event_name>.email.client.host
property which makes it possible to configure the host name sent in EHLO and
HELO commands to the SMTP server.
* Add a new default environment variable, WRAPPER_HOST_NAME, which stores the
name of the machine where the Wrapper is running.
3.3.1
* Add debug output showing the current os name and architecture to aid in
debugging problems.
* (Standard, Professional) Improve the message displayed when a license key
is found but is deemed to be invalid.
* Modify the template wrapper.conf file to help users debug include file
problems.
* Disable the console title feature on all UNIX platforms other than LINUX
because the console title does not get reset correctly when the Wrapper
process terminates.
* Add support for HP-UX IA64 CPUs.
* Update the license banner in source files so it is clearer that the user
is restricted by the license they agreed to.
* Modify the Community edition so it will now display a Licensed to banner
on startup if shipped with a Development License. This is required to
enable the distribution of the Community Edition under the Development
License.
* (Professional) Fix a problem where the UNIX versions of the Professional
Edition would sometimes deadlock on startup when run as a daemon process.
Bug #1989355.
* (Professional) Added two new events; jvm_failed_invocation and
jvm_max_failed_invocations. Feature Request #1994718.
* Fix a problem where the Windows service exit code was not being set
correctly when the JVM exited with a non-zero exit code. The problem
could be seen by running "sc query {service}" from the command line.
Bug #1859061.
* Added support for the Windows Itanium 64-bit platform.
* Added support for the HP-UX Itanium 32 and 64-bit platforms.
* Added support for the MAC OSX 64-bit platform.
* (Standard, Professional) Fix a problem on Windows versions where servers
which reported a large number of possible host ids could cause a buffer
overflow on startup. This crash was possible when using either
Development or Server licenses. Removed duplicate host ids from the list
of possible ids.
* Add a new "condrestart" command to the shell script which will restart
the Wrapper only if it is already running. Feature Request #1928045.
* Fix a problem where the 64-bit Solaris x86 version was unable to load its
JNI library. Bug #1992039.
* Fix a problem on Windows versions where a frozen JVM process was not always
being killed. This could result in the zombie JVM processes being left
around that consumed memory and other resources.
* Add a new wrapper.ignore_console_logouts property which allows the Wrapper
and JVM to survive logouts when launched as a console application from
another service.
* (Standard, Professional) Add a wrapperw.exe binary in Windows implementations
which makes it possible to run the Wrapper without a console. A console still
flickers for an instant when the Wrapper starts. This is the same issue that
has existed when running as an interactive service and is required to make
thread dumping possible.
* (Standard, Professional) Add new wrapper.logdialog.enable,
wrapper.logdialog.format, wrapper.logdialog.lines, and
wrapper.logdialog.loglevel properties used to configure the display of a Log
dialog when the wrapperw.exe binary exits in an error state.
* Fix a problem where the Wrapper was attempting to reopen its backend port
even when the JVM was down. This was only a problem when the defined port
range was limited to a single port with the wrapper.port.min and
wrapper.port.max properties. In such a case one or more warning messages
were being displayed because the port is locked for a few moments after
being closed.
* (Standard, Professional) The wrapper.initmemory.percent and
wrapper.maxmemory.percent properties were not correctly being calculated
relative to a maximum of 2048MB for 32-bit versions of the Wrapper.
Bug #2053167.
3.3.0
* Add a new wrapper.ping.interval.logged property which makes it possible to
reduce the debug output caused by ping transactions between the Wrapper and
JVM.
* Fix a problem on Windows where the Windows Service Manager was not waiting
the full configured time of the wrapper.jvm_exit.timeout and
wrapper.shutdown.timeout properties. This was leading to the net stop
command timing out and the system shutting down without the java application
having fully stopped. Bug #1582568.
* If internal firewalls were preventing the backend socket from being created,
it was not being made clear what the cause was. It was also possible that
the JVM would deadlock on shutdown. This second problem was recovered from
when the Wrapper killed the JVM.
* Rework the console output from all Wrapper classes to make it much more
obvious that that is their source.
* Submit a patch to the UNIX sh script by Chris Dance which makes it possible
to tell the shell to wait a few seconds for the wrapper to start up. Also
includes some modifications to work correctly on older Debian and RedHat
systems.
* Fix a problem where the local copy of ant was not always being used
correctly on UNIX systems which have a default copy of any installed.
Thanks to Robey Pointer for the patch.
* Add the -lm to the command line when building Linux 32 and 64 bit versions
of the wrapper on Linux. This is to support building on recent Debian
and Ubuntu versions. Thanks to Robey Pointer for the patch.
* Add support for the SIGUSR1 and SIGUSR2 signals so they can now trigger a
shutdown, restart or be forwarded to the JVM for custom functionality.
See the wrapper.signal.mode.usr1 and wrapper.signal.mode.usr2 properties.
Based on a patch by Robey Pointer. Note that the JVM process does not
trap SIGUSR1 or SIGUSR2 signals as they are used internally by the JVM
as part of the garbage collection process.
* Fix a problem where the WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS
environment variables were not being initialized correctly for the various
unix platforms.
* Removed the 4096Mb upper limit set on the wrapper.java.initmemory and
wrapper.java.maxmemory properties. 64bit users need to go way beyond that.
* Fix a problem where relative include file references in the configuration
file were not working correctly if the wrapper.working.dir was used to
change the working directory. The working directory is now always reset
to its original value as the configuration file is being loaded.
* Added a new wrapper.registry.java_home property which makes it
possible to specify the location of java within the registry.
* Set a new WRAPPER_JAVA_HOME environment variable if the JAVA_HOME is
located in the Windows registry.
* Modify the way properties are looked up so that any unreplaced environment
variable references will be reevaluated in case they were set after the
property was originally set. This is possible with some WRAPPER_*
environment variables or depending on the placement of set.* properties
in the configuration file.
* Set any unset properties to their default values internally. This is
necessary so the WrapperManager.getProperties() method returns the
correct set of active properties.
* Fix an occasional crash with 64-bit UNIX caused by a native synchronization
problem when system signals are trapped. Bug #1614010.
* Fix a problem on Solaris versions, where the Wrapper was not correctly
recovering and attempting another back end port when the first was already
in use. Bug #1594073.
* Fix a problem on Solaris and AIX where the RUN_AS_USER feature of the
shell script was not working due to lack of support for the "-m" option of
su. The shell script now uses "su -". Bug #1590168.
* Add HP-UX Makefiles for building with make. Fix some problems in the
shell script to make the script work better on HP-UX. Thanks to David
Brown and Nicolas Varney for the patches.
* Fix a problem where any signals received by the JVM and triggering a
SIGCHLD signal in the Wrapper were being interpretted as the JVM having
stopped. This was not always true. Bug #1643666.
* The Wrapper is now able to detect when the JVM process is stopped and
continued. It will still timeout if stopped, but a descriptive warning
is now logged.
* Increase the maximum number of log entries which can be queued to avoid
losing them. These are only used for log entries outside of the primary
thread.
* Fix a problem in the shell script which was making it impossible to stop
the Wrapper or query its status on OSX.
* Add support for 64 bit AIX. Thanks to Nicolas Varney for supplying a
Makefile.
* Correct the AIX library extension to be ".a".
* Rename the UNIX Makefiles so it is more obvious which tool must be used
to build with them.
* Fix a problem where the HP-UX native library would not be located
correctly for some processor types if the file had a platform specific
name.
* Internally rename the WRAPPER_JSTATE_LAUNCH state to
WRAPPER_JSTATE_LAUNCH_DELAY for clarity.
* Fix a problem where the UNIX versions of the Wrapper would shutdown
rather than restarting a frozen JVM if the arrival of the SIGCHLD signal
from the old JVM process was delayed by more than a second or two.
* Rework the Windows build so it now uses nmake and a Makefile rather than
vcbuild. This is probably not as clean, but it was needed to get the
64-bit build working.
* Fix a problem on Windows versions where quoted values specified from the
command line were not always being requoted correctly when generating the
java command line.
* Add validation checks for Windows versions to make sure that all additional
parameters, application arguments, the classpath, and library path all
contain values which are quoted correctly. Incorrectly quoted values will
now result in a warning message that will help resolve the problem.
* Fix a memory leak when calling WrapperManager.listServices() on Windows.
Bug #1665947.
* Fix a buffer overflow problem if the Wrapper was launched without explicitly
specifying a configuration file.
* Add tests of the return values of all malloc calls to catch out of memory
errors and recover as gracefully as possible. Bug #1649880.
* Modify the WrapperManager.signalStarting and signalStopping methods so that
they will never have the effect of shortening the existing timeout.
Updated the javadocs of both methods so they more accurately reflect what
the methods do.
* Move the Wrapper Copyright banner into the Wrapper process so it will be
output more consistently.
* Branch the code to support Community, Standard, and Professional Editions
of the Java Service Wrapper.
* (Standard, Professional) Add support for Server (Fixed) as well as
Development (OEM based) licenses.
* (Standard, Professional) Add 64-bit versions of the Windows version. The
64-bit Community Edition will not be distributed initially to support
ongoing development costs.
* (Professional) Add event handling callbacks for Wrapper start/stop, JVM
start/stop, JVM started/stopped, JVM restart, JVM killed, and JVM unexpected
exit events.
* (Professional) Add the ability to send emails in response to any event
callback.
* (Professional) Add the ability to execute a a user configured command in
response to any event callback.
* Add WRAPPER_BIN_DIR and WRAPPER_WORKING_DIR environment variables which are
now available for use within the wrapper.conf file as well as by any child
processes.
* Add documentation to the integration pages about existing system properties
that be used to control the way the WrapperSimpleApp and WrapperStartStopApp
handle application startup.
* Remove support for native PPC and x86 distributions of the Wrapper for
MAC OSX in favor of the universal X-Code distribution. This appears to be
the standard for the market and saves lots of time on testing.
* Add a new '-it' command to the Windows version which makes it possible to
install and start a service as a single command.
* Fix a problem where the PATH environment variable was not being set correctly
on Windows versions when run as a service if the wrapper.ntservice.account
was set and a PATH was set for both the SYSTEM and user accounts.
Bug #1702274.
* Modify the shell script to set JAVA_HOME to the default JVM location on
OSX systems if it is not already set. OSX always places the JVM in a known
location so this is possible. Thanks to Andrew Williams for the patch.
* Fix a problem where the UNIX shell script would fail if the APP_NAME was set
to a value containing spaces. Thanks to Andrew Williams for the patch.
Bug #1695678.
* Fix a problem where the DIST_ARCH was not being resolved correctly on HP-UX
systems. Thanks to Matej Kraus for the patch. Patch #1697421.
* Log output from the timer thread was not being queued correctly, this could
have lead to timing problems if there were any delays writing to disk.
* Add partial support for OS/400 into the build file. Still needs a Makefile.
* Fix a problem where the WrapperActionServer would deadlock in its stop method
if the JVM shutdown was initiated by a call to the shutdown or restart
actions.
* Add support for wrapper.console.title on UNIX platforms. Add a set of
wrapper.console.title.<platform> properties which make it possible to set the
title based on the platform.
* Fix a problem where the wrapper.ntservice.account and
wrapper.ntservice.password properties were being stored in the system
registry if the they were specified on the command line when the Wrapper
was installed as a service. This was broken in version 3.2.2.
Bug #1538725.
* Fix a problem where the DUMP command was not working with the
wrapper.commandfile property when run as a service on Windows.
Bug #1644421.
* Fix a problem where wildcards like "*.*" or "*" in a classpath property were
including the "." and ".." files on Windows versions. Bug #1517928.
* Modify the debug log output when the Wrapper is attempting to load its native
library in an attempt to make the expected failures less threatening.
* Commit a patch by Rob Oxspring which adds the start_msg and stop_msg commands
to the shell script. These are expected by init scripts on HP-UX.
Patch #1750027.
* Add a DETAIL_STATUS flag to the UNIX shell script which will cause the
status, start_msg, and stop_msg commands to display the current internal
status of both the Wrapper and Java processes.
* Commit a patch by Rob Oxspring which adds an init block to the UNIX shell
script to make it work with install_initd and remove_initd scripts used by
SUSE linux. Patch #1750028.
* Commit a patch by Travis Carlson, ia64 systems were being grouped as "x86"
systems. They now are assigned the name "ia" which makes it possible to
create a distribution for them. Patch #1663887.
* (Standard, Professional) Add new wrapper.java.initmemory.percent and
wrapper.java.maxmemory.percent properties which make it possible to set
the initial and maximum memory values relative to the amount of physical
memory on the system. Feature Request #1741051.
* Add a new #include.debug declaration in the wrapper configuration file which
makes it much easier to debug problems with cascading include files.
* Add -l and --controlcode commands to the Windows version which make it easy
to send user defined control codes to the Wrapper running as a service.
* Fix a synchronization problem in the logging code which could result in
data corruption or access violations.
* Add version numbers to the bat and sh scripts to make them easier to
support.
* Make the wrapper.ntservice.name, wrapper.ntservice.displayname, and
wrapper.ntservice.description properties aliases of new wrapper.name,
wrapper.displayname, and wrapper.description properties as they are now
used on UNIX platforms as well as Windows.
* Fix a problem where the wrapper would sometimes fail to send a packet to
the JVM because the sending of the packet would block. Thanks to Peter
Gorgon for the patch.
* Fix a problem where CPUs identifying themselves as 'ia64n' or 'ia64w' were
not correctly being categorized as 'ia'. Thanks to Stirling Chow for the
patch. Patch #1859412.
* Add -d and --dump commands to the Windows version which make it possible to
send thread dump requests to the Wrapper when running as a service. Works
in association with the new wrapper.thread_dump_control_code property.
Feature Request #1118110.
* (Professional) Add wrapper.timer.<n>.interval and wrapper.timer.<n>.action
properties which make it possible to schedule Wrapper shutdowns, JVM
restarts and thread dumps at arbitrary times.
* Fix a problem where the default configuration file name was being corrupted
by a buffer overrun. Thanks to Rob Joyce for the patch. Patch #1879049.
* Fix a problem where the WrapperManager would sometimes attempt to unregister
its shutdown hook after the shutdown hook had been initiated. Bug #1799489.
* Fix a problem where log files were limited to 2GB on Linux systems.
Bug #1881038.
3.2.3
* Add support for x86 Mac OS X distributions.
* The 3.2.2 Windows version was accidentally released with its MFC libraries
dynamically linked. This meant that anyone who did not have VS8 installed
were not able to run the Wrapper due to missing DLLs. This version fixes
that snafu by correctly using statically linked libraries as was done in
previous versions built with VS6. Bug #1578554.
3.2.2
* Correct a typo in the usage output of the WrapperStartStopApp. Thanks to
Michael Giroux for pointing it out.
* Fix a problem on OSF1 systems where the backend socket was not listening
correctly due to a backlog of 0. This was broken in 3.2.0. Thanks to
Phillip Gussow for supplying a patch.
* Remove the com.silveregg.wrapper package classes that were deprecated in
version 3.0.0.
* Fix a potential problem in the UNIX script where the lock file permissions
were not being set correctly if the LOCKFILE and RUN_AS_USER variables are
specified but the group of the specified user could not be resolved.
* Fix a problem where the exit code returned by WrapperListener.stop was being
ignored in some cases.
* Fix a problem where the shell script would not work correctly when the
wrapper or its configuration files were located in a directory path
containing spaces.
* Apply a series of patches by Michael Saya to get the Windows 64 bit build
working.
* Fix a problem in UNIX versions where the SIGTERM handler was being disabled
when a SIGCHLD was received.
* Added support in UNIX versions for the SIGHUP signal.
* Migrated the source to Subversion from CVS. Did a bunch of cleanup in the
source, removing CVS specific tags.
* Fix a problem in UNIX versions were the pid file specified by the
wrapper.java.pidfile property contained the wrapper pid rather than the
jvm pid. Bug #1565011.
* Fix a problem in UNIX versions where the file specified by the
wrapper.java.pidfile property was not always being deleted when the JVM
process went away.
* A user encountered a JVM bug where calls to System.exit were resulting in
an IllegalThreadStateException being thrown. Added some code to trap this
and shut down the JVM using other means to avoid a hang during shutdown.
* Fix a NullPointerException caused by users incorrectly implementing
an Integration Method #3 class and then calling WrapperManager.start with
a null value for the args parameter.
* Update the banner displayed by the Wrapper on startup to include a
copyright notice. Please see the license page of the documentation for
details.
* Add a new 'Z' log format which will log the time to millisecond accuracy.
* Fix a problem where the JVM exit code was not being set correctly when
the JVM was shutdown using WrapperManager.stopImmediate(). The exit code
of the Wrapper was being set correctly through other means however.
* Fix a potential synchronization problem in the logging code if a JVM exits
with debug output enabled.
* Updated the WrapperListener.stop method javadocs to better explain the
exitCode value under certain exit modes.
* On UNIX versions, add a log message which records the signal that caused
the JVM process to exit when it terminates unexpectedly.
* Fix a problem where the wrapper.on_exit.<n> property was not working
correctly in some cases on UNIX. With help from Andreas Schafer.
* Add support for building the Wrapper with Visual Studio 8 for Windows.
Releases will now be done using this compiler.
* Fix a CRITICAL bug in the 3.2.0 and 3.2.1 Windows versions of the Wrapper
where the Wrapper would crash under rare circumstances when running as a
service. If the service manager interrogated the service at the same
instant as the wrapper was pinging the JVM, the wrapper was sometimes
crashing due to a synchronization problem. The problem did not exist
prior to 3.2.0. Bug #1574537.
* Fix a minor logging problem where the 'D' format was not displaying the
correct thread name for queued log messages.
3.2.1
* Fix a problem with the solaris-sparc-64 makefile.
* Add a solaris-x86-64 makefile.
* Merge in a patch by Hugo Weber to make it possible to configure the Wrapper
to pull the JRE from the system registry on windows.
* Fix a batch file bug added in 3.2.0 where the scripts would not function
correctly if the full path to the batch file contained spaces.
Bug #1450601.
* Modify the message shown when a native library fails to load so the
exception message text is now shown in the log without having to enable
debug log output.
* Modify the UNIX shell script to be more informative if the script is unable
to locate a wrapper binary due to a executable bit permission problem.
* Fix a minor permission problem with the build for the delta-pack.
* Commit a patch by Juergen Hermann to make the error shown when realpath
fails clearer.
* Add the ability to use a default wrapper.conf file that is in the same
directory as the wrapper binary. The file will be named based on the
name of the wrapper binary.
* Synchronize the command line so that both the Windows and UNIX versions
are now the same. The old command line syntaxes are now supported
everywhere so there will be no compatibility problems.
* It is no longer possible to specify arguments using the '/c' syntax.
This was undocumented so hopefully it is not being used. The documented
'-c' syntax must now be used. The change was necessary to synchronize
the command line between UNIX and windows platforms.
* The 32-bit HP-UX 3.2.0 build was generating a libwrapper.so file rather
than libwrapper.sl.
* Make the WrapperManager.setConsoleTitle, getWrapperPID, and getJavaPID
methods available through JMX.
* Fix a state engine problem introduced in 3.2.0 which was causing the
wrapper.on_exit.<n> properties to be ignored in most cases.
* Fix a potential problem that could have caused crashes when debug logging
was enabled.
* Fix a problem where signals were not being handled correctly on some UNIX
platforms, including AIX. This was making it impossible to shutdown the
wrapper cleanly with the TERM signal. Bug #1477619.
* Add new default environment variables which can be referenced in a
configuration file to configure platform specific directories and file
names. WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS.
* Add a -v argument to make it possible to request the version from a wrapper
binary.
* Add support for registering the WrapperManager MBean with the
PlatformMBeanServer when run on a 1.5+ JVM. See the JMX section in the
documentation for details.
* Rework the way timeout properties are handled. Values of 0 now actually
disable the timeouts rather than setting them to a large value. To avoid
overflow problems when converting to internal timer ticks, timeouts are now
restricted to a maximum of 20 days, or 1728000 seconds. Change affects the
wrapper.cpu.timeout, wrapper.startup.timeout, wrapper.ping.timeout,
wrapper.shutdown.timeout, and wrapper.jvm_exit.timeout properties. For
values less than 20 days, there should be no change in functionality.
* Add support for debuggers. The Wrapper will now show a warning on startup
and then again the first time a timeout occurs. But all timeouts will be
ignored. This is to avoid problems with the Wrapper restarting a suspended
JVM in the middle of a debugging session. The wrapper enters this mode if
the wrapper.java.command ends with the string "jdb" or "jdb.exe", or the
"-Xdebug" parameter is passed to the JVM.
* Add 'athlon' to the list of supported architectures.
* Fix a problem where the environment variables loaded when a service was
started were always the system environment even if the service was running
as a specific account. The environment of a specific account will now be
loaded on top of the system environment if the USERNAME environment
variable is set by the system. Bug #1491138.
* Added new wrapper.ntservice.pausable and wrapper.ntservice.pausable.stop_jvm
properties to make it possible to pause and resume the Wrapper when installed
as a Windows service.
* Added new Pause and Resume batch files as well as modified the command batch
file to support pause and resume.
* Added PAUSE and RESUME commands for use by the wrapper.commandfile property.
* Fix a problem with the wrapper.pidfile, wrapper.java.pidfile,
wrapper.anchorfile, wrapper.commandfile, wrapper.statusfile,
wrapper.java.statusfile, wrapper.java.idfile, and wrapper.lockfile
properties where forward slashes in paths were not being changed to back
slashes on Windows versions.
* Simplify the code used to load a native library by using the
System.mapLibraryName method rather than doing the same thing manually.
* Add a new wrapper.syslog.facility property which makes it possible to
specify the syslog facility on UNIX systems. Thanks for the patch from
Bruce Pennypacker.
* Removed the custom thread counting used to keep track of when the wrapped
Java application has completed. It is now done in a different way that
will work on all Java implementations without requiring any special
consideration of the current JVM. Deprecated the
wrapper.monitor_thread_count and wrapper.thread_count_delay properties.
Bug #1470265.
* The WrapperStartStopApp helper class still requires thread counting if the
stopWait parameter is set to true. Previous versions all hardcoded the
system thread count to 1 which worked for most JVMs. A new system property,
org.tanukisoftware.wrapper.WrapperStartStopApp.systemThreadCount, was added
to make it possible to customize. It currently defaults to 1.
* Make it possible to extend the WrapperSimpleApp and WrapperStartStopApp
helper classes. Feature Request #1510274.
* Add warning messages if the old org.silveregg.wrapper package classes are
still being used. They will be removed in the next release.
3.2.0
* Rework the release cycle so that the wrapper.jar file released for all
platforms is now built on the same machine. This resolves a few
incompatibility problems caused by jars built on very new JVMs but run
on old JVMs.
* Add additional output when the JVM can not be launched due to security
restrictions on Windows.
* Greatly improved the performance of file logging. On a windows test machine
3.1.2 could log 67210 lines of output in 20 seconds with a 80-15% split
between the Wrapper and JVM process CPU usage. It now outputs 215214 lines
with a 64-34% split, also showing less load on the system process. This is
a 220% increase in performance. In both cases, the JVM was completely idle
other than the console output which makes the Wrapper appear to be a bit of
a CPU hog. In fact it is the only process doing any work in this case.
This improvement was accomplished by keeping the log file open unless idle.
The idle time can be controlled using the new
wrapper.logfile.inactivity.timeout property. The speed increase on UNIX
platforms was much smaller at around 10%.
* Add a new property, wrapper.disable_restarts, which will completely disable
the Wrapper's ability to restart JVMs.
* Add a pair of new properties, wrapper.port.min and wrapper.port.max, which
make it possible to define the port range used when a specific wrapper.port
is not specified.
* Fix a problem where certain characters like umlauts were being stripped from
property values. Bug #1049528.
* Make the PIDs of the Wrapper and Java process easier to access by providing
a new pair os system properties; wrapper.pid and wrapper.java.pid, as well
as a new pair of methods; WrapperManager.getWrapperPID() and
WrapperManager.getJavaPID().
* Add a new WrapperEventListener class which can be implemented to receive
a wide variety of events from the Wrapper.
* Add a WrapperServiceControlEvent class which will report any service control
codes received by the Wrapper as it is running as an NT service. This was
added to make it possible for other applications to sent custom codes to the
Wrapper using the Window Service Manager.
* Add a WrapperManager.listServices() method which can be used to obtain the
status of all services on a Windows system.
* Add a WrapperManager.sendServiceControlCode() method which makes it possible
to start, stop, pause, continue, any service on Windows systems. It is also
possible to send custom user codes via the service manager.
* Add comments in the sh script to support the chkconfig command.
* Implement the ability to read from standard input via System.in. Feature
Request #1024693.
* Made the tick based timer the default by changing the default value of the
wrapper.use_system_time property to false. Most users should see an
improvement in reliability under heavy loads with this new setting. If you
have extended any timeouts in the past, you may wish to try going back to
defaults as they may no longer need to be extended.
* Add a new wrapper.restart.reload_configuration property which causes the
Wrapper to reload its configuration file immediately before a JVM restart.
Properties which can not be reloaded have comments stating that fact in
their documentation. Feature Request #981060.
* Fix a problem in the UNIX shell script which was preventing the script from
locating the PID and anchor files when the wrapper.working.dir property was
used.
* Modify UNIX versions so that the wrapper binary will now force its working
directory to the location of the wrapper binary. This change was made to
make the UNIX version work the same way as the Windows version and thus make
configuration files that modify their working directory work correctly on
a cross platform basis. Users which have been using the scripts supplied
with the Wrapper should not encounter any problems. Other users may require
slight changes to their configuration file to deal with the new way that the
Wrapper deals with its initial working directory.
* Add a new method WrapperManager.getProperties() which makes it possible to
access any property in the Wrapper configuration file.
* Fix a problem where TERM signals were not being correctly ignored by the
JVM process on UNIX platforms even if the wrapper.ignore_signals property
was set to true. Earlier versions of the Wrapper would generate a
WRAPPER_CTRL_SHUTDOWN_EVENT when a TERM signal was received. On Windows
that signal should never be ignored. To resolve this a new
WRAPPER_CTRL_TERM_EVENT was added making it possible to selectively ignore
the TERM signals. This change may affect user implementations of the
WrapperListener.controlEvent() method. Bug #1086344.
* The Windows version has a feature which allows the user to immediately kill
the Wrapper and its Java application without waiting for a clean shutdown
by pressing CTRL-C twice. Windows sends the CTRL-C signal to both the
Wrapper and Java processes. Due to a rare timing problem, it was possible
for the Java process to get the signal first and initialize a shutdown
before the Wrapper could respond to the signal. In this case the Wrapper
was interpreting this as a second CTRL-C signal even though the user only
pressed it once.
* If the wrapper.anchorfile or wrapper.pidfile properties are used on Windows
they were being unintentionally deleted if the -t, -p, -i, or -r commands
were used while another Wrapper instance was running. In the case of the
anchor file, this would result in the Wrapper being shutdown unintentionally.
This was not an issue on non-Windows versions. Bug #1108517.
* Fix a security problem where the value of the wrapper.ntservice.account
and wrapper.ntservice.password properties were being stored in plain text
within the registry if they were specified on the command line when
installing the Wrapper as a Windows service. Bug #1110183.
* Add a pair of properties wrapper.ntservice.password.prompt and
wrapper.ntservice.password.prompt.mask which which will cause the Wrapper
to prompt the user for an account password when it is being installed as
an NT service.
* Added system properties to make it possible to configure whether or not
the WrapperSimpleApp and WrapperStartStopApp helper classes will wait
for the configured main methods to complete before reporting that the
application has started. See the javadocs for these classes for more
details.
* Modify the HP-UX build so that it now dynamically links with the pthread
library. This was to make the binaries work with HP-UX 11.00. Thanks to
Sun Kun Choi for the patch.
* Add new wrapper.statusfile and wrapper.java.statusfile properties which can
be used by external applications to monitor the internal state of the Wrapper
or JVM at any given time. These will not be useful to most users.
* Add a new wrapper.commandfile property which can be used by external
applications to control the Wrapper and its JVM.
* Add a new wrapper.java.idfile property which can be used by external
applications to monitor the internal state of the JVM at any given time.
* Add a warning on startup if the JVM has a SecurityManager set but the
wrapper.jar has not been granted the AllPermissions permission. Failure
to do so will almost certainly lead to the Wrapper throwing a number of
errors and this helps to point out the cause.
* Add a security model which protects most Wrapper method calls when a
SecurityManager has been registered. See the Security Model section
for more details.
* Add a new pair of batch files which can be used to start and stop the
Wrapper when installed as a service.
* Add new -q and -qs commands to the Windows version of the Wrapper which
make it possible to query the currently installed status of the service.
* Fix a problem where the wrapper.java.library.path.append_system_path
property was not working correctly on Windows when the system PATH
contained quotes. Bug #1238726.
* Modify the usage output of the Wrapper on all platforms so the Wrapper's
version is now included. It was not previously possible to get the version
of the Wrapper being used without launching a JVM.
* Add a pair of new methods WrapperManager.stopAndReturn() and
WrapperManager.restartAndReturn() which make it possible for code to
stop or restart the JVM and then continue until the JVM is shutdown.
This can be useful for shutdowns initiated within places like servlets,
whose operation is expected to complete.
* Fix a problem on UNIX where the child JVM was sometimes leaving around
zombie processes after a restart. The SIGCHLD signal was not being handled
correctly. Thanks to Traun Leyden for the patch. Bug #1291201.
* Implement the ability to catch control events using the WrapperEventLisener.
Feature Request #836975.
* Add new wrapper.jvm.port, wrapper.jvm.port.min, and wrapper.jvm.port.max
properties which make it possible to control the port the JVM uses to open
a connection back to the JVM. The Wrapper uses to leave this up to the
OS, but some users were having problems with the default conflicting with
other ports.
* Switch from using ftime() to gettimeofday() on UNIX platforms to work around
a problem where the Wrapper would not run on new versions of OSX because
they deprecated the ftime() function call. Thanks for the patch by
Michael Macaluso. Bug #1313162.
* Remove the shutdown timeout from the UNIX shell script. It is not needed
and can cause a zombie JVM if the wrapper's internal shutdown timeout was
longer than that of the shell script.
* Add the ability to specify integer property values in base 8 or 16 in
addition to base 10. Base 8 values start with a '0' and base 16 values
start with a '0x'.
* Make it possible to set the umask on all files created by the Wrapper
as well as the default umask of files created by the JVM. Added new
wrapper.umask, wrapper.java.umask, wrapper.pidfile.umask,
wrapper.lockfile.umask, wrapper.java.pidfile.umask,
wrapper.java.idfile.umask, wrapper.statusfile.umask,
wrapper.java.statusfile.umask, wrapper.anchorfile.umask, and
wrapper.logfile.umask properties.
* Improve the message when the native library can not be loaded to make mention
of the possibility of a 32/64 bit mismatch.
* Add a new wrapper.monitor_thread_count property which makes it possible to
disable the Wrapper's counting of non-daemon threads and thus the shutting
down of the JVM when they have all completed.
* Add support for BELOW_NORMAL and ABOVE_NORMAL options to the
wrapper.ntservice.process_priority property. Feature Request #1373922.
* Ignore '#' characters which are included within double quotes in the value
of a property in the configuration file. Unquoted values must be escaped
with a second '#' characters or it will be interpreted as a comment.
* Display the Wrapper banner in the JVM earlier so that it is displayed
even where there are startup errors.
* Modify the WrapperSimpleApp and WrapperStartStopApp classes so that the
WrapperManager is always initialized immediately. This makes the output
clearer in the event of startup errors.
* Fix a problem where the Windows ServiceManager was not correctly reporting
a startup error if a service failed on startup. The service was being
reported as having started even though it failed to start.
* Fix a problem on UNIX versions where the Wrapper would go into a recursive
state of attempting to launch the JVM from failed child processes if there
was any problems executing the configured java process.
* Rework the way the RUN_AS_USER setting in the UNIX shell script works so
the specified user is now set regardless of the command being executed.
To make sure the user never has to enter the password twice when running
the script, it now recurses after changing the user. The script then
runs entirely as the configured user.
* Improve the message that is displayed when attempting to start, stop, or
remove a windows service which is not installed.
* Add new wrapper.lockfile property which makes it possible to specify a
lock file containing a pid.
* Modified the sh script so it now creates a lock file on startup in the
/var/lock/subsys directory if it exists. This is needed by fedora systems
on shutdown.
* Store javadocs in tar distibutions in a nested tar file to avoid problems
with long filenames in some tar distributions.
* Fix a problem with the WrapperSimpleApp and WrapperStartStopApp helper
classes where on heavily loaded systems it was possible for the Wrapper
to get a running thread count of 0 and shutdown before the main thread
had a chance to be started.
* Add a new wrapper.thread_count_delay property which will force the
WrapperManager to wait the specified number of seconds before it begins
to check the number of running threads.
* Fix a problem where the wrapper.java.library.path.append_system_path
property was appending the PATH rather than the LD_LIBRARY_PATH environment
variable on Unix systems. PATH is correct for Windows systems.
* Add a new wrapper.logfile.rollmode property which makes it possible to
control how and when the logfile is rolled. Feature Requests #864463,
#1085097, and #1085850.
* Fix a problem on Linux where the test for the status of the Java child
process would sometimes fail causing the Wrapper to shutdown with the
error "Critical error: wait for JVM process failed (No child processes)"
rather than restart the child JVM. Users who encountered this problem
found it easy to reproduce, but it only happened on some systems.
* Modify the way the UNIX shell script tests for the existence of a process
matching the pid in an existing pid file. It now verifies the process
command as well as the pid to fix a system reboot problem where a stale
pid has been reused by another application, making the script think the
wrapper was already running.
* Add support for the GNU libjcj JVM. Like JRocket, it requires slightly
different thread counting.
* Add support for Linux 64-bit PPC and Solaris 32-bit x86 versions.
* Add a new set.default.ENV syntax to the configuration file making it
possible to environment variable values which do not overwrite existing
values, ie. to specify a default value.
* Added a new wrapper.console.flush property which forces the wrapper to
explicitly flush stdout after each line of log output.
* Change the error shown when the JVM shuts down prematurely during a
shutdown to a warning message.
* Fix a problem where the Wrapper would show the following error message
if user code called System.exit from within the WrapperListener.stop
callback method. This would happen if the stop class's main method
registered with the WrapperStartStopApp called System.exit.
"JVM exited unexpectedly while stopping the application."
Bug #945976.
* Add a new wrapper.syslog.ident property which makes it possible to
specify the identity used in syslog entries on UNIX. This was possible
in older versions but was set using the wrapper.ntservice.name property.
Bug #1432855.
* Add support for MacOSX Universal Binary distributions.
* Add support for Delta Pack distributions. This is a distribution that
contains the binaries of multiple platforms.
3.1.2
* Modify the way boolean system properties are resolved by the WrapperManager
so it is now possible to set them to true or false rather than assuming they
are true if set.
* Fix a problem where some localized error messages were not having their
tokens replaced correctly.
* Fix a problem when using the WrapperStartStopApp helper class. The usage
text was incorrectly being displayed in the console if an exception was
thrown while executing the main method of the configured stop class. This
did not change the functionality of the application, but it did cause some
confusion.
* Fix a problem on Windows where a library path or class path which ended in
a backslash was preventing the Wrapper from launching the JVM. The Windows
OS was using the backslash to escape the quote used to close the path. The
fix was to add a second backslash where needed.
* Added a new wrapper.java.command.loglevel property which makes it possible
to control the log level of the generated java command.
* Add support for escaped quotes when stripping quotes on UNIX for the
wrapper.java.additional.<n> and wrapper.app.parameter.<n> properties.
* Change the default value of wrapper.jvm_exit.timeout from 5 to 15 seconds.
The old default was too fast for some applications which take a while to
exit. Applications which were exiting promptly will not see any difference.
* Fix a problem where the JVM would restart at certain times when using the
system time based timer due to an overflow error. This problem was
introduced in 3.1.0. Due to a separate bug in 3.1.0, the Wrapper would
shutdown rather than simply restarting the JVM as was happening in 3.1.1.
The last restart happened on Aug 21, 2004. It will next occur Oct 10, 2004
and repeat at regular intervals. There are no problems when using the new
Tick based timer. Bug #1014405.
* Correct the wrapper.logfile.maxsize property so that a a kilobyte is now 1024
rather than 1000, and a megabyte is a megabyte. We aren't a hard drive
manufacturer after all.
* Add try-catch blocks around all thread entry points in the Windows version.
This has always been done in the main function, but these blocks will help
to narrow down the cause of problems should they ever be encountered in
control or service handlers.
* Centralize shutdown code on UNIX version in an appExit method as was already
being done for Windows versions.
* Fix a problem where the build.sh was not correctly using the included ant
if an ANT_HOME environment variable was defined.
* Add a new wrapper.single_invocation property which will prevent multiple
invocations of an application from being started on Windows platforms.
The shell script handles this on UNIX platforms. Feature Request #889123.
* Fix a crash problem introduced in 3.1.1, caused by a pair of uninitialized
pointers. The crash was possible on all platforms but would only happen
if the Wrapper was started without any arguments. It would not affect
users running the Wrapper normally. Bug #1018481.
* Fix a problem with the run as user feature of the shell script on Solaris.
Needed to be using /usr/xpg4/bin/id rather than /usr/bin/in if available.
Bug #1024008.
* Replace calls to usleep with nanosleep on platforms where it is available.
This was to fix an occasional hang on a specific Solaris machine. It would
occasionally hang on calls to usleep. From research, it appears that usleep
has problems when signals are encountered while sleeping. Still testing
whether or not this change solved the problem.
* Upgrade the version of Ant included with source releases to 1.6.2 to fix
some problems generating jni headers when building with Java 1.4.2.
* Upgrade the version of Cocoon included with source releases to 2.0.4 to
fix some problems generating documentation using Java 1.4.2.
* Display a warning if the exit status of a JVM process ever returns the
STILL_ACTIVE status on Windows. There was no known problem here, just
noticed it while looking over the code.
* Display a descriptive error message on Windows if the JVM process crashes
due to an uncaught exception in native JVM code.
* Add a test for invalid jvm arguments set using the wrapper.java.additional.<n>
properties. Invalid arguments could cause the Wrapper startup to fail in
non obvious ways if they are mistaken by the JVM as the main class.
3.1.1
* Modified the way libwrapper.so is built on Solaris and Linux so that it
no longer statically links its required libraries.
* Fix a file handle leak when calling WrapperManager.getUser or
WrapperManager.getInteractiveUser on Windows platforms.
* Fix a problem introduced in 3.1.0 where the JVM would not be restarted
correctly if it quit after a ping timeout to let the Wrapper resynch and
restart it.
* Fix a problem where CTRL-C was not being handled correctly if the console
was configured to be shown when running as an NT service.
* Fix a problem where signals fired at UNIX versions of the wrapper were
not being handled correctly when the tick timer was being used.
* Fix a synchronization problem in the logging code which would
occassionally cause the Wrapper to crash with an Access Violation.
The problem was only encountered when the tick timer was enabled,
and was only seen on multi-CPU systems. Bug #949877.
* Fix a problem when using the tick timer where the Wrapper would sometimes
exit on startup due to an uncaught SIGALRM. Only reported on multi-CPU
Solaris systems.
* Fix a problem where the Wrapper would sometimes hang on shutdown if
another thread called System.exit while the Wrapper was shutting down.
Bug #955248.
* Fix a problem introduced in 3.1.0 where a very very large CPU timeout
warning message was being displayed if the system time was set back
while using the default system timer.
* Added a new property, wrapper.anchorfile, which makes it possible to
cause the Wrapper to shutdown by deleting an anchor file. The UNIX sh
script has been modified to optionally make use of this feature.
* Add a debug message at startup which makes it clear which timer is being
used.
* A Windows user reported that using forward slashes in the path the log
file was failing. Avoid this problem by always converting '/' to '\'
in the wrapper.logfile property on Windows.
* Fix a problem where it was not possible disable the wrapper log file as
documented in the wrapper.logfile property. Most likely broken way back
in version 2.2.5.
* Add some additional error checks after calls to control the pipe between
the JVM and Wrapper as well as improving the messages around other socket
related error messages.
* Fix a problem on some HP-UX systems were not working correctly because
the EAGAIN and EWOULDBLOCK constants are not equal with some compilers.
* Change some of the defaults in the src/conf/wrapper.conf.in file which
ships with the Wrapper to avoid confusion with new users.
* Rewrote the routine which reads and logs console output from the JVM
for Windows versions. Internal buffers are now scaled dynamically,
fixing a problem where long lines were being wrapped at 1024 characters.
This rewrite also resulted in a 4 fold increase in speed when the JVM is
sending large quantities of output to the console.
* Increase debug output on UNIX platforms when a signal is caught. When
possible, information about where the signal came from is now logged.
* Modified the way log output from within signal handlers is handled so it
is now queued and then logged by the main event loop.
* Back out a 3.1.0 change where a JVM that had failed to exit cleanly was
sent a SIGTERM prior to a SIGKILL. The SIGTERM made no difference and
slowed down the forced shutdown. A modification to the event loop made
the functionality more difficult to implement.
* Add the ability to set the user that the Wrapper and its JVM will run as
from within the sh script on UNIX platforms.
* Add an icon resource to the Wrapper binary on Windows versions.
* Fix a typo in the UNIX sh script which caused an extra slash to be included
in the path of the pid file. Was not causing any known problems.
* Added support for 64-bit HP-UX. Big thanks to Venkatesh Sellappa for
supplying the patch.
* Fix a deadlock problem introduced in 3.1.0 with some FreeBSD systems. Not
all users were experiencing it, but those who did were able to reliably
reproduce the problem. The problem appears to have been caused by
FreeBSD bug #kern/64313.
* Make the signal handling variables in the wrapper native library volatile.
Directly this was to fix a compiler warning on HP-UX64 systems but it
should also make the calls more efficient.
3.1.0
* The license was revised for this version to include a copyright omission.
This change is to be retroactively applied to all versions of the Java
Service Wrapper starting with version 3.0.0. The changes should have
no effect on users.
* The Online documentation and web site were both reworked. The logo has
been updated so that Duke is no longer used. The new online site now
has the ability for users to logon and append comments to any page.
* Added a new batch file which accepts commands like the UNIX shell script.
The new file is offered as an alternative to the default batch files, and
can be found at src/bin/AppCommand.bat.in. Thanks to Mike Castle for
donating the new script.
* The Windows version of the Wrapper was not correctly registering that it
would accept SHUTDOWN messages when running as a service. The Wrapper
was getting the message anyway so this should not change functionality.
Thanks to Jason Tishler for noticing this and sending in a patch.
* Add a new property, wrapper.native_library, which can be used to specify
the base name of the native library which is loaded by the WrapperManager
class.
* Modify the WrapperManager class so it now stores references to System.out
and System.err on initialization and always writes to those stored streams.
This makes sure that all Wrapper console output always goes to the
wrapper.log file even if user code overrides those streams with calls to
System.setOut and System.setErr. This was necessary to prevent deadlocks
in such user code from affecting the functionality of the Wrapper.
* Fixed a problem where some environment variables where not being correctly
loaded from the system registry when running as an NT service. Big thanks
to Eric Smith for tracking this down and submitting a patch. It turns out
that the putenv function was not being used correctly.
* Modified the way the wrapper.conf file is loaded so it will now read the
contents correctly even if the line feeds in the file are incorrect for
the current platform. Windows line feeds had been causing problems when
used on UNIX platforms. Feature Request #829896.
* Added a new property, wrapper.ntservice.console, which allows a console to
be displayed when running as an NT service.
* Fixed a problem where the request thread dump on failed JVM exit feature
had never worked when running as an NT service. Bug #831775.
* Add a new property, wrapper.console.title, which makes it possible to set
the title of the console in which the Wrapper is currently running. This
currently only works on Windows platforms.
* Added a new method, setConsoleTitle, to the WrapperManager class which
enables the application to dynamically set the console title. Like the
wrapper.console.title property, this only works on Windows platforms.
* Improved the algorithm of the request thread dump on failed JVM exit feature
so that extremely large thread dumps will not be truncated when the JVM
is killed.
* Fix a problem where CTRL-C was being ignored by the WrapperManager if a
WrapperListener is never registered. This is not possible if the Wrapper
is being used correctly but never the less a user did come across it.
* Add some additional debug output to help identify the cause of problems
loading the native library.
* The WrapperManager class now checks to make sure that its current version
matches the version of the native library and Wrapper. If there are any
discrepancies found then appropriate warnings will be displayed, but the
Application will still be allowed to start. This was added to make obvious
the cause of problems resulting from mismatched versions.
* Added a new property wrapper.use_system_time system time. By setting this
property to false, the Wrapper will start using a new experimental timer
which uses a background thread to manage time rather than the system time.
This has a number of advantages over using the system time and should give
most users even more reliable behavior when the system is under high load
or there are changes being made to the system time. The timer is very
critical to the operation of the Wrapper so the old behavior is left as
the default for the time being until this feature has had the chance to be
"time" tested. If all goes well then this will be enabled as the default
in a future version of the Wrapper.
A pair of related properties, wrapper.timer_fast_threshold and
wrapper.timer_slow_threshold were also added to aid in debugging.
* Rework the logging code so it is now thread safe. The addition of the
timer thread means that there is now more than a single thread accessing
that code. This was causing problems as the two threads tried to use the
same buffers. As part of this change, a new format variable 'D' was added
to display the thread which is doing the logging.
* Fix a problem where a thread dump would be invoked if the request thread
dump on failed JVM exit was enabled and the user forced an immediate
shutdown by pressing CTRL-C more than once.
* Add getUser and getInteractiveUser methods to the WrapperManager class to
make it possible for user code to query information about the user running
Wrapper or the user who is interacting with the Wrapper and its JVM.
Feature Request #812175.
* The Wrapper will now always exit with the exit code used to terminate the JVM
whether System.exit is used or WrapperManager.stop. When running as an NT
service the Wrapper now correctly returns the correct exit code to the
service manager so failure recovery tools should now work correctly.
Feature Request #852491.
* Add a status command to the UNIX shell script which can be used to find out
whether or not the wrapper is currently running. Patch submitted by
Joseph Benavidez.
* Modify the WrapperSimpleApp and WrapperStartStopApp so that the main method
of a class is located even if it exists in a parent class rather than the
class specified.
* To make debugging classpath problems easier, the Wrapper now verifies all
classpath entries before launching a JVM and logs debug level warnings for
any entries that do not exist.
* Fix a problem where it was possible to define a zero length filter that would
trigger on any output.
* Add some additional debug output to make it easier to debug startup,
shutdown and restart problems.
* Modify the way the Wrapper forcibly kills a frozen JVM on UNIX platforms so
that it now sends a SIGTERM, waits up to 5 seconds, then sends a SIGKILL.
* Add a new wrapper.java.library.path.append_system_path property which will
cause the Wrapper to append the system path to the generated library path.
Feature Request #917902.
* Fix a problem where spaces around the '=' character of a property definition
were rendering the property invisible to the Wrapper. Bug #916001.
* Fix a problem where the first ping timeout after the JVM was started was
still hard coded at 30 seconds. This was causing a combination of large
values of wrapper.ping.interval and wrapper.ping.timeout to fail.
* Fix a problem where the JVM would fail to shutdown cleanly if the Wrapper
was asked to stop too soon after launching a JVM. This was leading to the
JVM being killed after the shutdown timeout expired. Bug #917281.
* Added an adviser which will print out explanatory messages to the console
and wrapper log file when the Wrapper encounters a commonly made
configuration mistake. This is designed to cut down on support requests
by new users. Can be disabled using the wrapper.adviser property.
* The bash script and the realpath utility have been deprecated since version
3.0.3. They have been removed in this release. The sh script is recommended
on all UNIX platforms, and the realpath utility which was used by pre-3.0.3
bash and sh scripts has not been used since.
* Add the wrapper.startup.delay property along with console and service
specific variants which make it possible to configure a delay between the
Wrapper being launched and the first JVM being launched.
* Promote the wrapper.debug property back from being "deprecated". It has
continued to be useful and deserved documentation and official status.
* Add wrapper.on_exit.<n> properties to control what happens when a exits
based on the exit code.
* Modify the way calls to System.in.read() are handled so that they now block
rather than throwing an exception. Currently, System.in can not be used with
the Wrapper because of the way I/O is passed between the Wrapper and JVM.
* Modified the Windows batch files to fix a problem where the path to the
Wrapper.exe contained more than one "/bin". The new batch files are much
simpler and should be easier to customize if needed. Bug #925308.
* Modified the wrapper.java.initmemory and wrapper.java.maxmemory properties
so that they now default to a value of 0 which causes the -Xms and -Xmx
parameters to be omitted from the command used to launch Java. This
will cause the JVM to use its own default values and also makes it possible
to specify the memory parameters using the wrapper.java.additional.<n>
properties.
* Added a pair of environment variables, WRAPPER_FILE_SEPARATOR and
WRAPPER_PATH_SEPARATOR, whose values are set to either '/' and ':' or
'\' and ';' on startup. They can be used in the wrapper.conf file
to construct platform independent property values.
* Add a new wrapper.working.dir property which makes if possible to change
the Wrapper and JVM's working directory to a location other than the
location of the Wrapper binary. Feature Request #738160.
3.0.5
* Added support for SGI Irix. Big thanks to Andreas Wendt for supplying the
patch.
* Due to a bug in the build, the native library was not included in the 3.0.3
or 3.0.4 binary releases for OSX, building from source was working correctly.
This has been fixed and the build greatly simplified to avoid such problems
in the future. Bug #791755.
* Changed the default location of the pid file generated by the sh script to
exist in the same directory as the sh script rather than in the /var/run.
This can be changed by setting the PIDDIR variable in the sh script used to
launch the Wrapper.
* Added support for the wrapper.pidfile property on the Windows platform.
* Added the wrapper.java.pidfile property which will cause the pid of the
java process to be written to a specified file.
(WINDOWS USERS) If you are using a wrapper.conf file that was created prior
to version 3.0.0 of the Wrapper, then you may have this property defined in
your configuration file. You will get an error on startup if the specified
path does not exist.
* Stop clearing the file creation mask when the Unix version of the Wrapper is
run as a daemon process. The file creation mask will not be inherited from
the process which launches the Wrapper. Bug #788849.
* Modify the sh script so it works on Linux, then deprecate the bash script.
This means that all Unix platforms can now use the same script to control
the Wrapper. Thanks to Mike Castle for the patch. The bash script can still
be found in the release, but it is deprecated and will be removed in a
future version.
* Modified the sh script so it is now possible to set the nice priority in the
script configuration block.
* Remove output to System.out in the WrapperManager.requestThreadDump() method.
If some JVM threads were hung while accessing the System.out object,
attempting to do a thread a dump would cause the calling thread to hang as
well. Thanks to Thomas Hart for the patch.
* Make it obvious in the log whether or not the Wrapper was started as a
daemon process on UNIX systems.
* Modify the way restarts requested from the JVM, or caused by a filter are
handled. The Wrapper will no longer reset the restart count in either of
these cases. If an application runs for longer than the
wrapper.successful_invocation_time timeout then the count will still be
reset back to 0.
* Added a new wrapper.ignore_signals property which makes it possible to
configure the Wrapper so it will ignore CTRL-C, HALT and INT signals.
* Modify the WrapperManager.isLaunchedAsService() method on UNIX systems so it
now returns true if the Wrapper was launched with the wrapper.daemonize flag
set.
* Added a pair of MBean interfaces which allow the Wrapper to be controlled
using JMX. See the new JMX section in the documentation for details.
Thanks to Sal Ingrilli for help with testing.
* Modify the Windows build so the Wrapper.exe and Wrapper.dll files can now
be built from Ant if MSVC is installed.
* Added a new wrapper.ping.interval property which lets users control the
frequency that the Wrapper pings the JVM. Feature Request #607768.
* When a JVM refuses to shutdown, the Wrapper can be configured to request a
thread dump using the wrapper.request_thread_dump_on_failed_jvm_exit
property. The Wrapper was then waiting 1 second before the process was
killed. This was not always long enough, resulting in a truncated thread
dump. Increased the pause to 3 seconds. Feature Request #633761.
* Fix a bug where wrapper.app.parameter.<n> and wrapper.java.additional.<n>
properties declared from the Windows command line were not correctly
handling spaces in their values. Support Request #802139.
3.0.4
* Fix a problem on UNIX systems where requesting a second thread dump any time
during the life of a single Wrapper process would cause the Wrapper and JVM
to shutdown rather than perform the thread dump.
* Fix a problem where a, user without permission, attempting to stop an
application was able to delete the pid file even though they were unable
to stop the application itself. This would make the scripts think that
the application was stopped when was actually still running.
* Fix a problem where an application was being killed prematurely if it took
longer than 6 seconds to exit on its own. The scripts now make sure that
an application always has enough time to shutdown cleanly.
* Improve the debug output so that packet codes are now shown using a name
rather than a raw number.
* Reduce the frequency of "Waiting to stop..." messages displayed when removing
an NT service that is currently running. Decreased frequency from once per
second to once every five seconds.
* Fix a minor problem where the hour in the date returned by
WrapperInfo.getBuildTime() was not base 24.
* Added -t and -p command line options to the Windows version of the Wrapper
to sTart and stoP the Wrapper as an NT service. This can be used in place
of "net start" and "net stop", which do not always work correctly when a
service takes a long time to start up or shutdown. See the Launching Your
Application (Win32) section for more details.
* Add a new method WrapperManager.stopImmediate which will cause the JVM to
exit immediately without calling any stop methods or shutdown hooks.
* Add a new class, WrapperActionServer, which makes it easy to remotely control
the Wrapper remotely by opening a socket and sending commands. See the
javadocs of the class for more details.
* Fix bug #744801. A Java GUI was not being displayed when the application was
run in either console mode or as a service with wrapper.ntservice.interactive
enabled. This problem was introduced in Version 3.0.0 when using 1.2.x or
1.3.x versions of Java. To use interactive services with 1.2.x or 1.3.x
versions of java, please review the documentation for the
wrapper.ntservice.interactive property.
* Fix a problem where the JVM was not receiving CTRL-C and CTRL-CLOSE events
when running under the Wrapper on Windows. This was not a problem in most
cases as the Wrapper was taking care of the processing of the events. But
the WrapperListener.controlEvent() method was not being called as documented.
* Changed the way the WrapperSimpleApp and WrapperStartStopApp respond to
control events so that the JVM will respond and call WrapperManager.stop()
even when being controlled by the Wrapper.
* Modified the suggested behavior of the WrapperListener.controlEvent() method.
Users who have implemented the WrapperListener interface themselves should
review the Javadocs. The changes are not required and applications will
continue to function as they did before.
* Added support for DEC OSF1 (Alpha). Big thanks to Andreas Wendt for
supplying the patch.
* Fix a problem where the sh and bash scripts were failing if the path to the
script contained spaces.
* Fix a problem where the JVM would sometimes hang when trying to shutdown if
the wrapper.key parameter was passed to the JVM while not being controlled
by the Wrapper. This would happen if a user copied the command from the
Wrapper's debug output and attempted to run it as is without first removing
the wrapper.key parameter.
* Implement the ability to specify an NT service's load order group in response
to feature request #764143. See the javadocs for the new
wrapper.ntservice.load_order_group property for details.
* Improve the error message displayed when the NT EventLog is full in response
to feature request #643617. The EventLog output will now be disabled if any
errors are encountered while logging events. This prevents the error from
repeating.
* Improve the error message displayed on Windows when the configured Java
command can not be executed or does not exist.
* Fix a problem where the Wrapper was leaving a pipe unclosed each time the JVM
was restarted on all UNIX platforms. This was causing the Wrapper to run out
of file handles. Bug #767267, discovered and patched by David Wong.
* Fix a problem where the '#' character, which signifies a comment, could not
be included in property values. A double hash, '##' will now resolve into a
'#' within the property value. Bug #777303.
* Added support for FreeBSD. Big thanks to Alphonse Bendt for supplying the
patch.
* Make the wrapper.port property optional.
* Changed the way environment variables are loaded from the registry on Windows
platforms so users will no longer get warning messages about not being able
to handle very large environment variables. Prior versions could only handle
environment variables whose expanded value was less than 2048 characters in
length.
* Fix a problem on UNIX platforms where a shell used to start the Wrapper
running as a detached process would hang when the user attempted to exit
the shell. Thanks to Mike Castle for this patch.
3.0.3
* Added support for Mac OS X. Big thanks to Andy Barnett for supplying the
patch.
* Fix a segmentation fault on UNIX systems when the first console output
from the JVM was an empty line. Thanks to Mike Castle for finding this.
* Fix a problem where a 0 length malloc was being called if there were no
configured filters. This was fine on most platforms but caused a crash
on MAC OS X.
* Rework the initialization of the bash and sh scripts so that they will
work correctly when referenced as symbolic links. Thanks go out to Richard
Emberson for the code to resolve symbolic links.
* Deprecated the realpath binary in the *NIX distributions as it is no longer
used by the bash or sh scripts. It is being left in for now so as not to
break the build scripts of other projects, but it will be removed after a
couple more releases.
* Added a test to make sure that wrapper.ntservice.interactive is not set to
TRUE when an account is specified using wrapper.ntservice.account.
3.0.2
* Modified the sh and bash scripts so that console log output is disabled by
default when the scripts are launched with the 'start' action. Running with
the 'console' action will still send output to the console. Logging to the
file is still enabled.
* Modified the wrapper.ping.timeout property so it also controls the ping
timeout within the JVM. Before the timeout on responses to the Wrapper
could be controlled, but the ping timeout within the JVM was hardcoded to
30 seconds.
* In the last release, some work was done to avoid false timeouts caused by
large quantities of output. On some heavily loaded systems, timeouts were
still being encountered. Rather than reading up to 50 lines of input, the
code will now read for a maximum of 250ms before returning to give the main
event loop more cycles.
* Fix a problem where the values of environment variables set in the
configuration file were not correct when those values included references
to other environment variables.
* Fix a potential buffer overflow problem if configuration properties
referenced extremely large environment variables.
* Fix a potential problem where the inability to expand very large environment
variables would have led to an access violation when run as an NT service.
* Add some extra checks in the event where the native library can not be loaded
so that the WrapperManager can differentiate between the library missing and
not being readable due to permission problems.
* Remove the wrapper.ntservice.process_priority from the default wrapper.conf
because its use can produce unexpected results if used improperly. Please
see the property documentation for details.
* Fix a problem where environment variables in the registry which had no value
were causing the Wrapper to crash with an access violation. This was
introduced in version 3.0.0 with the feature to load environment variables
from the registry. The offending registry entry was WV_GATEWAY_CFG which
appears to be related to Oracle.
3.0.1
* Fix a problem with the wrapper.disable_shutdown_hook. Due to a typo in the
source, the property was being ignored. This was broken in the 3.0.0
release.
* Fix a problem with the HP-UX release build reported by Ashish Gawarikar.
* Add the ability to set environment variables from within the configuration
file or from the command line.
* Fix a problem on HP-UX and AIX machines where the stop() function in the
shell scripts was causing a syntax error due to a conflict with a like named
shell command on those platforms. This appears to be an issue with the
Korn shell on all platforms.
* Fix a problem where very heavy output from the JVM can cause the Wrapper to
give a false timeout. The Wrapper now only reads 50 lines of input at a time
to guarantee that the Wrapper's event loop always gets cycles.
* Fix a problem on UNIX versions where extra line breaks would sometimes be
added to the logged output when there was large amounts of output being
sent from the JVM.
* Fix a problem where a large number of calls to WrapperManager.log()
immediately before the JVM exits could lead to the Wrapper incorrectly
reporting that the JVM exited unexpectedly.
3.0.0
* Deprecated the com.silveregg.wrapper package in favor of
org.tanukisoftware.wrapper. The classes and interfaces in the silveregg
package will continue to function, but migration to the new package should
be done when possible. See the project history for details.
* On Windows systems change any forward slashes in the wrapper.java.command
property to back slashes. Some users had reported having problems on
Windows XP.
* Implemented feature request #633178. Added WrapperManager.requestThreadDump()
to force the current JVM to immediately perform a thread dump.
* Fixed bug where wrapper.logfile.maxsize was being set to 0 if the 'k' or 'm'
unit was omitted.
* Add the ability to specify an account name and password when installing an
NT service.
* Add a property, wrapper.ntservice.interactive, which makes it possible to
control whether or not the Java process can gain access to the desktop while
it is running as an NT service.
* Add limited support for 1.2.x versions of Java. Shutdown hooks are
supported until Java 1.3 so those functions will be disabled. If the
application displays a GUI then Java 1.3 should be used as the GUI can not
currently be displayed when using Java 1.2.x.
* Made it possible to use the wrapper.pidfile property on all *nix platforms.
Please notice that the property has been removed from the default
wrapper.conf file. The property is not needed when the wrapper is launched
with the bash shell script. The sh shell script will set the wrapper.pidfile
when the wrapper is launched. If either of the scripts provided with the
Wrapper distribution are used then the wrapper.pidfile should always be
removed from your wrapper.conf file.
* Added a new wrapper.daemonize property which, when set, will form the wrapper
process to be a detached non-session group leader. This makes it possible to
launch the wrapper in such a way that it will not be terminated when the user
launching the process logs out. This had been a problem on Solaris systems
when using the sh shell. The default sh and bash scripts both make use of
this in the default. Please update your scripts for use with this version.
Thanks to Rajiv Subrahmanyam for the patch.
* Fix a problem where the Wrapper was incorrectly counting the number of
non-daemon threads in BEA's JRockit Virtual Machine. This was causing the
application to shutdown when the non-daemon thread count dropped to 1.
* Added support for building the wrapper on AIX and HP-UX systems. Thanks for
the patches involved go out to Ashish Gawarikar and William Lee.
* Implement feature request #653131 to force the JVM to immediately exit when
the user presses CTRL-C multiple times.
* Added a 'console' action to the bash and sh scripts to make it possible to
launch the Wrapper in the current shell process. The 'start' task will launch
the Wrapper as a spawned daemon process.
* Fixed a problem where missing environment variables specified in classpath
or library path properties were not being handled correctly.
* Implemented feature request #676599 to enable the filtering of JVM output to
trigger JVM restarts or Wrapper shutdowns. See the new
wrapper.filter.trigger.n and wrapper.filter.action.n properties.
* Modify the Win32 version of the Wrapper so that Environment Variables are
always read from the system registry when the Wrapper is run as a service.
By doing this, it makes it possible to change or add the system environment
variables and have them take effect without having to first reboot the
machine.
* Implemented cascading configuration files.
* Changed the default value for the wrapper.java.initmemory property to be 3Mb.
The default on Windows and Linux JVMs is 2Mb, but the Solaris JVM requires
a minimum of 3Mb. The minimum value accepted by the Wrapper was changed
from 8Mb to 1Mb to make it possible to reduce the footprint of applications
to what is possible without using the wrapper.
* Improve the parsing of configuration files so that leading and trailing white
space is now correctly trimmed. It is also now possible to have comments at
the end of a line containing a property.
* Modify the way exceptions thrown by an application's main method are
presented to the user by the WrapperSimpleApp and WrapperStartStopApp so
they no longer look like a problem with Wrapper configuration.
2.2.9
* Added a new property, wrapperper.restart.delay, which allows the user to control
the amount of time to pause between a JVM exiting and a new JVM being
launched.
* Fixed bug #611024. The Wrapper would sometimes fail to start if
wrapper.max_failed_invocations is set to 1.
* Fix a problem where the number of non-daemon threads was not being calculated
in some cases.
* Implemented feature request #491443. Environment variables referenced in the
wrapper.conf file will now be evaluated as the file is loaded. The windows
syntax for environment variables is used on all platforms to make them
platform independent.
* Fixed a problem where the wrapper.conf was being open with both read and
write locks when a read lock is all that is needed. Made the wrapper fail
on startup if another application held a read lock on the conf file.
* Modified the message displayed when the native library could not be found,
so that it is much more descriptive. Hopefully it will cut down on questions
caused by configuration problems.
* Implemented feature request #613539. Modified the wrapper.java.library.path
to function like the wrapper.java.classpath.n properties so that multiple
directories can be specified in the library path in a platform independent
way. The old property is still supported, but deprecated.
* Fix Bug #632215. The WrapperManager.isLaunchedAsService() method was always
returning false, even when run as a service under Windows. On linux, the
Wrapper is always run as a console app, so this method will always return
false.
* Improve the message thrown when user code attempts to access System.in from
within a JVM being controlled by the Wrapper. System.in will not work
because the JVM is a spawned process.
2.2.8
* Fixed a compiler problem on Solaris some systems.
* Added a new property, wrapper.cpu.timeout, which allows the user to control
how much time without receiving any CPU the Wrapper will tolerate before
displaying a warning message. The CPU timeout feature was added in 2.2.7
but the default timeout of 10 seconds was not configurable.
* The Wrapper was only allowing 5 seconds between the JVM informing the
Wrapper that it was going to exit and the JVM process actually exiting.
This would cause the Wrapper to terminate the process prematurely in
cases where an application shutdown thread took longer than 5 seconds to
complete. The Wrapper now allows wrapper.jvm_exit.timeout seconds for
the JVM process to exit on its own before being forcibly terminated.
* When there is a configuration problem or a resource is unavailable, a JVM
will sometimes exit abnormally very shortly after being launched. This
can lead the JVM being infinitely restarted due to a simple class
path misconfiguration. To work around this, the Wrapper has always had
a hard limit of 5 restarts within a short period of time. If the JVM
has been running for more than a few minutes, then the count was reset.
In this version, a new property. wrapper.max_failed_invocations was added
to allow the max value to be set. The time period which the JVM must
now be running for the JVM launch to have been considered a success for
restart purposes is set using the new wrapper.successful_invocation_time
property.
* The number of advanced properties which most users do not need has been
increasing as the Wrapper has been made more and more flexible. This
has been causing confusion in their usage by people who play with them
without first reading the documentation. To solve this, the advanced
properties were removed from the default configuration file. They still
function. But users must now read to the advanced configuration
documentation to learn about their existence. Added quite about to the
descriptions of these properties to hopefully clear up any confusion
about their usage.
* When the JVM exits abnormally, the Wrapper will pause for a few seconds
before starting another JVM. If the user pressed CTRL-C during this
pause, a new JVM would still be launched. The new JVM was exiting
immediately but it was a waste of time. The Wrapper now recognizes the
event and aborts launching the new JVM.
* Added a page to the documentation which shows inline javadocs. This
will hopefully make it easier to navigate them as part of the full
documentation set.
* Added a new method to the WrapperManager which enables user code to
log at any log level.
* Added a new Helper class WrapperStartStopApp which allows users to easily
integrate applications like Tomcat which use a separate class to stop
the application.
* Added a samples section to the documentation. Just includes Tomcat 4
for now.
2.2.7
* Fix a problem where the JVM was trying to reconnect the Wrapper as it was
being shutdown. This was causing problems if the JVM was being restarted.
* Added support for the system being suspended to RAM or disk. Also improved
wrapper performance when a system is under 100% load. See the new example
output in the example section.
* Fix a problem where the log output was not being directed to a file called
wrapper.log in the same directory as the Wrapper binary in the event that the
configured wrapper log file could not be accessed.
* Fix a problem where the Wrapper was not shutting down the JVM correctly when
all non daemon threads completed. Normally a JVM will exit when all of its
non daemon threads have completed so this was causing some problems.
(Thanks to Jung Tamas)
* Added the ability to set the priority of the Wrapper and its JVM when run
as an NT service or console application. The same thing can be better
achieved on Unix systems by using "nice" in the shell script used to launch
the Wrapper. See the documentation for for details.
* JVM information was not being displayed correctly when the Wrapper native
library could not be loaded.
* Added a new property to cause the wrapper to attempt to request a thread dump
when the JVM does not exit on request.
* Improved the documentation of the WrapperSimpleApp and WrapperListener
classes.
* Adding a new property wrapper.shutdown.timeout to allow the user to extend
the length of time that an application is allowed to take shutting down.
* Rework the way the shutdown process works so that System.exit will never be
called before the stop method in WrapperListener has had a chance to complete.
* Add a Restart button to the TestWrapper application.
* Fix a problem on Unix versions where '%' characters in Java output would
sometimes cause the wrapper to crash. Somehow missed getting this into the
last release.
* Added a test to make sure that WrapperManager.stop is not called recursively.
* Added support for building under Windows XP. Prebuilt installations had
already been working.
2.2.6
* Fix a problem where '%' characters in Java output would sometimes cause the
wrapper to crash. (Thanks to Frode Moe)
* Added support for requesting a Java thread dump without shutting down the
Java process.
* Fixed a problem on windows where the java command was looking in the windows
system and system32 directories for the java executable before checking the
path when the full path to the java executable was not specified in the
configuration file. This could lead to different JVM being run from the
Wrapper than was run if java -version was run from the command line. The
Wrapper will now attempt to resolve the full java path using the PATH
environment variable.
* Added debug output showing Java version information when the JVM first
starts.
* Modified c source to use /* */ style comments rather than // style comments.
Some people were having problems with some compilers.
2.2.5
* Added support for service descriptions for Win2k and XP.
* Fixed bug issue when reading configuration files from Windows on Unix.
* Deprecated the wrapper.debug property in favor of loglevels.
* Added new logger functionality includes the following features:
Loglevels like Log4j, NT Eventlog support, UNIX syslog support and rolling
log files.
* Added wildcard support for classpath entries in wrapper.conf.
* Added the ability to specify configuration properties from the command line.
* Changed the way NT services are installed so that a patched version of the
Wrapper.exe file no longer needs to be created to reference the
wrapper.conf file.
2.2.4
* The value of APP_NAME in the bash or sh scripts no longer needs to be the
same as the script.
* Added the ability to format and/or disable file logging and output to the
console.
* Set mode of executables in binary release tar files so that they can be run
without modification after being extracted.
* Fixed line feeds in release so that bat files are always CRLF, unix scripts
are always LF. Other source files are always CRLF in ZIP archives and LF
in tar.gz archives.
* Make the build fail if Wrapper.exe or Wrapper.dll do not exist for Windows
builds.
* Added an empty wrapper.log to the releases so that the TestWrapper example
program runs out of the box.
2.2.3
* Added template scripts and conf files for ease of integration with other
applications.
* Cleaned up the build.
* The WrapperSimpleApp method of launchine applications was not working
correctly with applications whose main method did not return.
* Add sample scripts and wrapper.conf files in the bin and lib directories.
These scripts are used to start a sample application which runs out of the
box. See the new example.html page in the documentation for more details.
* Get rid of the platform specific directories in the bin and lib directories.
* Enable relative paths for Windows version. In previous versions of Wrapper,
it was necessary to always use absolute paths because the working directory
of the wrapper would be then NT System32 directory when run as a service.
* On the windows version, the wrapper always sets the current working
directory to the location of the wrapper executable immediately after
startup.
* Improvements to the documentation / web page.
2.2.2
* Added HTML based documentation.
2.2.1
* Added Linux and Solaris build files.
* Added Linux and Solaris documentation.
2.2.0
* Initial Public Release.
|