1 | if (genericJarFile.exists() && genericJarFile.isFile()↵ | | 1 | if (genericJarFile.exists() && genericJarFile.isFile()↵
|
2 | && weblogicJarFile.exists() && weblogicJarFile.isFile()) {↵ | | 2 | && websphereJarFile.exists() && websphereJarFile.isFile()) {↵
|
3 | //open jar files↵ | | 3 | //open jar files↵
|
4 | genericJar = new JarFile(genericJarFile);↵ | | 4 | genericJar = new JarFile(genericJarFile);↵
|
5 | wlJar = new JarFile(weblogicJarFile);↵ | | 5 | wasJar = new JarFile(websphereJarFile);↵
|
|
6 | Hashtable genericEntries = new Hashtable();↵ | | 6 | Hashtable genericEntries = new Hashtable();↵
|
7 | Hashtable wlEntries = new Hashtable();↵ | | 7 | Hashtable wasEntries = new Hashtable();↵
|
8 | Hashtable replaceEntries = new Hashtable();↵ | | 8 | Hashtable replaceEntries = new Hashtable();↵
|
|
9 | //get the list of generic jar entries↵ | | 9 | //get the list of generic jar entries↵
|
10 | for (Enumeration e = genericJar.entries(); e.hasMoreElements();) {↵ | | 10 | for (Enumeration e = genericJar.entries(); e.hasMoreElements();) {↵
|
11 | JarEntry je = (JarEntry) e.nextElement();↵ | | 11 | JarEntry je = (JarEntry) e.nextElement();↵
|
|
12 | genericEntries.put(je.getName().replace('\\', '/'), je);↵ | | 12 | genericEntries.put(je.getName().replace('\\', '/'), je);↵
|
13 | }↵ | | 13 | }↵
|
14 | //get the list of weblogic jar entries↵ | | 14 | //get the list of websphere jar entries↵
|
15 | for (Enumeration e = wlJar.entries(); e.hasMoreElements();) {↵ | | 15 | for (Enumeration e = wasJar.entries(); e.hasMoreElements();) {↵
|
16 | JarEntry je = (JarEntry) e.nextElement();↵ | | 16 | JarEntry je = (JarEntry) e.nextElement();↵
|
|
17 | wlEntries.put(je.getName(), je);↵ | | 17 | wasEntries.put(je.getName(), je);↵
|
18 | }↵ | | 18 | }↵
|
|
19 | //Cycle Through generic and make sure its in weblogic↵ | | 19 | //Cycle Through generic and make sure its in websphere↵
|
20 | genericLoader = getClassLoaderFromJar(genericJarFile);↵ | | 20 | ClassLoader genericLoader = getClassLoaderFromJar(genericJarFile);↵
|
|
21 | for (Enumeration e = genericEntries.keys(); e.hasMoreElements();) {↵ | | 21 | for (Enumeration e = genericEntries.keys(); e.hasMoreElements();) {↵
|
22 | String filepath = (String) e.nextElement();↵ | | 22 | String filepath = (String) e.nextElement();↵
|
|
23 | if (wlEntries.containsKey(filepath)) {↵ | | 23 | if (wasEntries.containsKey(filepath)) {↵
|
24 | // File name/path match↵ | | 24 | // File name/path match↵
|
|
25 | // Check files see if same↵ | | 25 | // Check files see if same↵
|
26 | JarEntry genericEntry = (JarEntry) genericEntries.get(filepath);↵ | | 26 | JarEntry genericEntry = (JarEntry) genericEntries.get(filepath);↵
|
27 | JarEntry wlEntry = (JarEntry) wlEntries.get(filepath);↵ | | 27 | JarEntry wasEntry = (JarEntry) wasEntries.get(filepath);↵
|
|
28 | if ((genericEntry.getCrc() != wlEntry.getCrc())↵ | | 28 | if ((genericEntry.getCrc() != wasEntry.getCrc())↵
|
29 | || (genericEntry.getSize() != wlEntry.getSize())) {↵ | | 29 | || (genericEntry.getSize() != wasEntry.getSize())) {↵
|
|
30 | if (genericEntry.getName().endsWith(".class")) {↵ | | 30 | if (genericEntry.getName().endsWith(".class")) {↵
|
31 | //File are different see if its an object or an interface↵ | | 31 | //File are different see if its an object or an interface↵
|
32 | String classname↵ | | 32 | String classname↵
|
33 | = genericEntry.getName().replace(File.separatorChar, '.');↵ | | 33 | = genericEntry.getName().replace(File.separatorChar, '.');↵
|
|
34 | classname = classname.substring(0, classname.lastIndexOf(".class"));↵ | | 34 | classname = classname.substring(0, classname.lastIndexOf(".class"));↵
|
|
35 | Class genclass = genericLoader.loadClass(classname);↵ | | 35 | Class genclass = genericLoader.loadClass(classname);↵
|
|
36 | if (genclass.isInterface()) {↵ | | 36 | if (genclass.isInterface()) {↵
|
37 | //Interface changed rebuild jar.↵ | | 37 | //Interface changed rebuild jar.↵
|
38 | log("Interface " + genclass.getName()↵ | | 38 | log("Interface " + genclass.getName()↵
|
39 | + " has changed", Project.MSG_VERBOSE);↵ | | 39 | + " has changed", Project.MSG_VERBOSE);↵
|
40 | rebuild = true;↵ | | 40 | rebuild = true;↵
|
41 | break;↵ | | 41 | break;↵
|
42 | } else {↵ | | 42 | } else {↵
|
43 | //Object class Changed update it.↵ | | 43 | //Object class Changed update it.↵
|
44 | replaceEntries.put(filepath, genericEntry);↵ | | 44 | replaceEntries.put(filepath, genericEntry);↵
|
45 | }↵ | | 45 | }↵
|
46 | } else {↵ | | 46 | } else {↵
|
47 | // is it the manifest. If so ignore it↵ | | 47 | // is it the manifest. If so ignore it↵
|
48 | if (!genericEntry.getName().equals("META-INF/MANIFEST.MF")) {↵ | | 48 | if (!genericEntry.getName().equals("META-INF/MANIFEST.MF")) {↵
|
49 | //File other then class changed rebuild↵ | | 49 | //File other then class changed rebuild↵
|
50 | log("Non class file " + genericEntry.getName()↵ | | 50 | log("Non class file " + genericEntry.getName()↵
|
51 | + " has changed", Project.MSG_VERBOSE);↵ | | 51 | + " has changed", Project.MSG_VERBOSE);↵
|
52 | rebuild = true;↵ | | 52 | rebuild = true;↵
|
53 | break;↵ | | 53 | }↵
|
54 | }↵ | | 54 | break;↵
|
55 | }↵ | | 55 | }↵
|
56 | }↵ | | 56 | }↵
|
57 | } else {↵ | | 57 | } else {↵
|
58 | // a file doesnt exist rebuild↵ | | 58 | // a file doesn't exist rebuild↵
|
|
59 | log("File " + filepath + " not present in weblogic jar",↵ | | 59 | log("File " + filepath + " not present in websphere jar",↵
|
60 | Project.MSG_VERBOSE);↵ | | 60 | Project.MSG_VERBOSE);↵
|
61 | rebuild = true;↵ | | 61 | rebuild = true;↵
|
62 | break;↵ | | 62 | break;↵
|
63 | }↵ | | 63 | }↵
|
64 | }↵ | | 64 | }↵
|
|
65 | if (!rebuild) {↵ | | 65 | if (!rebuild) {↵
|
66 | log("No rebuild needed - updating jar", Project.MSG_VERBOSE);↵ | | 66 | log("No rebuild needed - updating jar", Project.MSG_VERBOSE);↵
|
67 | newWLJarFile = new File(weblogicJarFile.getAbsolutePath() + ".temp");↵ | | 67 | newwasJarFile = new File(websphereJarFile.getAbsolutePath() + ".temp");↵
|
68 | if (newWLJarFile.exists()) {↵ | | 68 | if (newwasJarFile.exists()) {↵
|
69 | newWLJarFile.delete();↵ | | 69 | newwasJarFile.delete();↵
|
70 | }↵ | | 70 | }↵
|
|
71 | newJarStream = new JarOutputStream(new FileOutputStream(newWLJarFile));↵ | | 71 | newJarStream = new JarOutputStream(new FileOutputStream(newwasJarFile));↵
|
72 | newJarStream.setLevel(0);↵ | | 72 | newJarStream.setLevel(0);↵
|
|
73 | //Copy files from old weblogic jar↵ | | 73 | //Copy files from old websphere jar↵
|
74 | for (Enumeration e = wlEntries.elements(); e.hasMoreElements();) {↵ | | 74 | for (Enumeration e = wasEntries.elements(); e.hasMoreElements();) {↵
|
75 | byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];↵ | | 75 | byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];↵
|
76 | int bytesRead;↵ | | 76 | int bytesRead;↵
|
77 | InputStream is;↵ | | 77 | InputStream is;↵
|
78 | JarEntry je = (JarEntry) e.nextElement();↵ | | 78 | JarEntry je = (JarEntry) e.nextElement();↵
|
|
79 | if (je.getCompressedSize() == -1↵ | | 79 | if (je.getCompressedSize() == -1↵
|
80 | || je.getCompressedSize() == je.getSize()) {↵ | | 80 | || je.getCompressedSize() == je.getSize()) {↵
|
81 | newJarStream.setLevel(0);↵ | | 81 | newJarStream.setLevel(0);↵
|
82 | } else {↵ | | 82 | } else {↵
|
83 | newJarStream.setLevel(JAR_COMPRESS_LEVEL);↵ | | 83 | newJarStream.setLevel(JAR_COMPRESS_LEVEL);↵
|
84 | }↵ | | 84 | }↵
|
|
85 | // Update with changed Bean class↵ | | 85 | // Update with changed Bean class↵
|
86 | if (replaceEntries.containsKey(je.getName())) {↵ | | 86 | if (replaceEntries.containsKey(je.getName())) {↵
|
87 | log("Updating Bean class from generic Jar "↵ | | 87 | log("Updating Bean class from generic Jar "↵
|
88 | ↵ | | 88 | + je.getName(),↵
|
89 | + je.getName(), Project.MSG_VERBOSE);↵ | | 89 | Project.MSG_VERBOSE);↵
|
90 | // Use the entry from the generic jar↵ | | 90 | // Use the entry from the generic jar↵
|
91 | je = (JarEntry) replaceEntries.get(je.getName());↵ | | 91 | je = (JarEntry) replaceEntries.get(je.getName());↵
|
92 | is = genericJar.getInputStream(je);↵ | | 92 | is = genericJar.getInputStream(je);↵
|
93 | } else {↵ | | 93 | } else {↵
|
94 | //use fle from original weblogic jar↵ | | 94 | //use fle from original websphere jar↵
|
|
95 | is = wlJar.getInputStream(je);↵ | | 95 | is = wasJar.getInputStream(je);↵
|
96 | }↵ | | 96 | }↵
|
97 | newJarStream.putNextEntry(new JarEntry(je.getName()));↵ | | 97 | newJarStream.putNextEntry(new JarEntry(je.getName()));↵
|
|
98 | while ((bytesRead = is.read(buffer)) != -1) {↵ | | 98 | while ((bytesRead = is.read(buffer)) != -1) {↵
|
99 | newJarStream.write(buffer, 0, bytesRead);↵ | | 99 | newJarStream.write(buffer, 0, bytesRead);↵
|
100 | }↵ | | 100 | }↵
|
101 | is.close();↵ | | 101 | is.close();↵
|
102 | }↵ | | 102 | }↵
|
103 | } else {↵ | | 103 | } else {↵
|
104 | log("Weblogic Jar rebuild needed due to changed "↵ | | 104 | log("websphere Jar rebuild needed due to changed "↵
|
105 | + "interface or XML", Project.MSG_VERBOSE);↵ | | 105 | + "interface or XML", Project.MSG_VERBOSE);↵
|
106 | }↵ | | 106 | }↵
|
107 | } else {↵ | | 107 | } else {↵
|
108 | rebuild = true;↵ | | 108 | rebuild = true;↵
|
109 | } | | 109 | }
|