📄 raconfig.java
字号:
private void updateJoramAdminCfg(String hostName,
String port)
throws Exception {
File file = new File(confDir, JORAMADMIN_CFG);
FileReader fileReader = new FileReader(file);
BufferedReader reader = new BufferedReader(fileReader);
boolean end = false;
String line;
StringTokenizer tokenizer;
String firstToken;
StringBuffer buff = new StringBuffer();
while (! end) {
line = reader.readLine();
if (line == null)
end = true;
else {
tokenizer = new StringTokenizer(line);
if (tokenizer.hasMoreTokens()) {
firstToken = tokenizer.nextToken();
if (firstToken.equalsIgnoreCase("Host")) {
buff.append("Host " + hostName + "\n");
continue;
}
else if (firstToken.equalsIgnoreCase("Port")) {
buff.append("Port " + port + "\n");
continue;
}
}
buff.append(line + "\n");
}
}
file.delete();
ByteArrayInputStream bis = new ByteArrayInputStream(buff.toString().getBytes());
FileOutputStream fos = new FileOutputStream(file);
try {
dump(bis,fos);
} finally {
fos.close();
bis.close();
}
}
private void updateJoramAdminXml(String hostName,
String port)
throws Exception {
File file = new File(confDir, JORAMADMIN_XML);
FileReader fileReader = new FileReader(file);
BufferedReader reader = new BufferedReader(fileReader);
boolean end = false;
String line;
StringTokenizer tokenizer;
String firstToken;
StringBuffer buff = new StringBuffer();
int i = -1;
while (! end) {
line = reader.readLine();
if (line == null)
end = true;
else {
if (line.trim().startsWith("<connect")) {
while (true) {
i = line.indexOf("host");
if (i > 0) {
buff.append(line.substring(0,i+10));
buff.append(hostName);
int j = line.indexOf("\"",i+11);
buff.append(line.substring(j,line.length()) + "\n");
if (line.trim().endsWith("/>")) {
line = reader.readLine();
break;
}
line = reader.readLine();
continue;
}
i = line.indexOf("port");
if (i > 0) {
buff.append(line.substring(0,i+6));
buff.append(port);
int j = line.indexOf("\"",i+7);
buff.append(line.substring(j,line.length()) + "\n");
if (line.trim().endsWith("/>")) {
line = reader.readLine();
break;
}
line = reader.readLine();
continue;
}
buff.append(line + "\n");
if (line.trim().endsWith("/>")) {
line = reader.readLine();
break;
}
line = reader.readLine();
}
} else if (line.trim().startsWith("<tcp")) {
while (true) {
i = line.indexOf("host");
if (i > 0) {
buff.append(line.substring(0,i+6));
buff.append(hostName);
int j = line.indexOf("\"",i+7);
buff.append(line.substring(j,line.length()) + "\n");
if (line.trim().endsWith("/>")) {
line = reader.readLine();
break;
}
line = reader.readLine();
continue;
}
i = line.indexOf("port");
if (i > 0) {
buff.append(line.substring(0,i+6));
buff.append(port);
int j = line.indexOf("\"",i+7);
buff.append(line.substring(j,line.length()) + "\n");
if (line.trim().endsWith("/>")) {
line = reader.readLine();
break;
}
line = reader.readLine();
continue;
}
buff.append(line + "\n");
if (line.trim().endsWith("/>"))
break;
line = reader.readLine();
}
}
buff.append(line + "\n");
}
}
file.delete();
ByteArrayInputStream bis = new ByteArrayInputStream(buff.toString().getBytes());
FileOutputStream fos = new FileOutputStream(file);
try {
dump(bis,fos);
} finally {
fos.close();
bis.close();
}
}
/**
* update RA_XML file
* @param raProperties ra.properties file
*/
private void updateRAR(String raProperties) throws Exception {
if (debug)
System.out.println("RAConfig.updateRAR(" + raProperties + ")");
FileReader file = new FileReader(raProperties);
LineNumberReader lnr = new LineNumberReader(file);
// get RAR name
String line = lnr.readLine();
while (line != null) {
if (line.startsWith("RAR_NAME"))
break;
line = lnr.readLine();
}
int i = line.indexOf("RAR_NAME");
String rarName = line.substring(i+"RAR_NAME".length()).trim();
if (debug)
System.out.println("RAConfig.updateRAR : rarName = " + rarName);
else if (verbose)
System.out.println("update rar \"" + rarName +
"\" with \"" + raProperties + "\"");
// create Map of properties
Map map = new Hashtable();
Hashtable prop = null;
String nodeName = null;
line = lnr.readLine();
while (line != null) {
if (line.startsWith("[")) {
prop = new Hashtable();
nodeName = line.substring(line.indexOf("[")+1,line.indexOf("]"));
map.put(nodeName.trim(),prop);
} else {
StringTokenizer st = new StringTokenizer(line);
if (st.countTokens() == 2 && prop != null) {
prop.put(st.nextToken(),st.nextToken());
}
}
line = lnr.readLine();
}
file.close();
if (debug)
System.out.println("RAConfig.updateRAR : map = " + map);
// create ra.xml file with new values
File rarFile = new File(rarName);
if (rarFile.exists()) {
ZipFile zipFile = new ZipFile(rarFile.getAbsolutePath());
for (Enumeration zippedFiles = zipFile.entries(); zippedFiles.hasMoreElements(); ) {
// Retrieve entry of existing files
ZipEntry currEntry = (ZipEntry) zippedFiles.nextElement();
if (debug)
System.out.println("RAConfig.updateRAR : currEntry = " + currEntry);
if (currEntry.getName().equalsIgnoreCase(RA_XML)) {
InputStream reader = zipFile.getInputStream(currEntry);
createFile("ra.xml",update(reader,map));
reader.close();
break;
}
}
zipFile.close();
}
// update rar
updateZIP(rarName,RA_XML, tmpDir + "ra.xml",RA_XML);
// update a3servers.xml (host and port).
prop = (Hashtable) map.get("org.objectweb.joram.client.connector.JoramAdapter");
if (prop != null) {
if (debug)
System.out.println("RAConfig.updateRAR : prop = " + prop);
String host = (String) prop.get("HostName");
short serverId = -1;
String sid = (String) prop.get("ServerId");
if (sid != null)
serverId = new Short(sid).shortValue();
else {
if (debug)
System.out.println("RAConfig.updateRAR : ServerId not found in ra.properties");
}
String port = (String) prop.get("ServerPort");
if (host != null && host.length() > 0
&& port != null && port.length() > 0
&& serverId >= 0) {
updateA3Servers(rarName,host,port,serverId);
}
}
new File(tmpDir + "ra.xml").delete();
}
/**
* Update the RAR file
* @param zipName String JAR or RAR file
* @param path path in JAR or RAR file
* @param newFileName add new filename
* @param oldFileName remove old file from JAR or RAR
*/
private void updateZIP(String zipName,
String path,
String newFileName,
String oldFileName)
throws Exception {
if (debug)
System.out.println("RAConfig.updateZIP(" + zipName +
"," + path + "," + newFileName +
"," + oldFileName + ")");
else if (verbose)
System.out.println("updateZIP \"" + zipName +
"\", path \"" + path +
"\", new file \"" + newFileName +
"\", old file \"" + oldFileName + "\"");
ZipEntry entry = null;
File file = new File(zipName);
if (file.exists()) {
ZipFile zipFile = new ZipFile(file.getAbsolutePath());
Enumeration zipEntries = zipFile.entries();
// create your output zip file
ZipOutputStream newZip = new ZipOutputStream(
new FileOutputStream(new File(file.getAbsolutePath() + "_TMP")));
// Get all data (except the oldFileName) from zip file and
// write it to the tmp zip file
while (zipEntries.hasMoreElements()) {
entry = (ZipEntry) zipEntries.nextElement();
if (entry.getName().equalsIgnoreCase(oldFileName))
continue;
newZip.putNextEntry(new ZipEntry(entry.getName()));
InputStream is = zipFile.getInputStream(entry);
try {
dump(is,newZip);
} finally {
newZip.closeEntry();
is.close();
}
}
zipFile.close();
// Write the new fileName to the zip
entry = new ZipEntry(path);
newZip.putNextEntry(entry);
try {
FileInputStream fis = new FileInputStream(newFileName);
dump(fis,newZip);
fis.close();
} catch (Exception exc) {
System.out.println("Error reading input file: " + newFileName + " " + exc);
newZip.close();
new File(file.getAbsolutePath() + "_TMP").delete();
throw exc;
} finally {
newZip.flush();
newZip.closeEntry();
newZip.finish();
newZip.close();
}
String toRename = file.getAbsolutePath() + "_TMP";
new File(file.getAbsolutePath()).delete();
new File(toRename).renameTo(file);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -