Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
10.2.1.6
-
None
-
Windows XP Professional, JDK 1.5
-
Low
-
Repro attached
-
Seen in production
Description
I have tried a pack a db as jar file. When I create it with jar.exe everything is working fine. When i use a JarOutputStream to pack the DB I get the Exception
java.sql.SQLException: Database 'jar:(D:/p1.jar)p1' not found.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source)
at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Unknown Source)
at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
Here the code I use to get the connection.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Properties props = new Properties();
props.put("user", "JUDOCU");
props.put("password", "");
Connection con = DriverManager.getConnection("jdbc:derby:jar:(D:/p1.jar)p1", props);
con.close();
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Here the code I use to generate the jar file.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
public class SWUzipUtility {
/** Trace */
private static Trace trace = TraceManager.getInstance().getTrace(
SWUzipUtility.class);
private ZipOutputStream cpZipOutputStream = null;
private String[] strSource;
private String strTarget;
private long size = 0;
private int numOfFiles = 0;
private FileFilter filter;
public SWUzipUtility(String[] source, String target)
{ this(source, target, null); }public SWUzipUtility(String[] source, String target, FileFilter filter)
{ super(); this.strSource = source; this.strTarget = target; this.filter = filter; }public void zip()
{ zip(false); }protected ZipOutputStream createOutputStream(FileOutputStream fos)
{ return new ZipOutputStream(fos); }public void zip(boolean append) {
try {
for (int i = 0; i < this.strSource.length; i++) {
File cpFile = new File(this.strSource[i]);
if (!cpFile.isFile() && !cpFile.isDirectory())
}
FileOutputStream fos = new FileOutputStream(strTarget, append);
cpZipOutputStream = createOutputStream(fos);
cpZipOutputStream.setLevel(9);
for (int i = 0; i < this.strSource.length; i++)
{ File cpFile = new File(this.strSource[i]); zipFiles(this.strSource[i], cpFile); } cpZipOutputStream.finish();
cpZipOutputStream.close();
trace.info("Finished creating zip file " + strTarget + " from source "
+ strSource);
trace.info("Total of " + numOfFiles + " files are Zipped");
trace.info("Total of " + size + " bytes are Zipped");
} catch (Exception e)
}
private void zipFiles(String source, File cpFile) {
int byteCount;
final int DATA_BLOCK_SIZE = 2048;
FileInputStream cpFileInputStream;
if (cpFile.isDirectory()) {
if (cpFile.getName().equalsIgnoreCase(".metadata"))
File[] fList = cpFile.listFiles();
for (int i = 0; i < fList.length; i++)
}
else {
try {
if (cpFile.getAbsolutePath().equalsIgnoreCase(strTarget))
if (this.filter != null && this.filter.accept(cpFile) == false)
{ trace.info("Cancel file " + cpFile + " because of filter."); return; }trace.info("Zipping " + cpFile);
size += cpFile.length();
//String strAbsPath = cpFile.getAbsolutePath();
setNumOfFiles(numOfFiles + 1);
String strAbsPath = cpFile.getPath();
String strZipEntryName = strAbsPath.substring(source
.lastIndexOf(File.separator) + 1, strAbsPath.length());
cpFileInputStream = new FileInputStream(cpFile);
ZipEntry cpZipEntry = new ZipEntry(strZipEntryName);
cpZipOutputStream.putNextEntry(cpZipEntry);
byte[] b = new byte[DATA_BLOCK_SIZE];
while ((byteCount = cpFileInputStream.read(b, 0, DATA_BLOCK_SIZE)) != -1)
cpZipOutputStream.closeEntry();
} catch (Exception e)
}
}
public void addPropertyChangeListener(PropertyChangeListener listener)
{ propChangeSupport.addPropertyChangeListener(listener); } public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener)
public void removePropertyChangeListener(PropertyChangeListener listener)
{ propChangeSupport.removePropertyChangeListener(listener); } public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener)
public int getNumOfFiles()
{ return numOfFiles; }protected void setNumOfFiles(int numOfFiles)
{ int oldValue = this.numOfFiles; this.numOfFiles = numOfFiles; this.propChangeSupport.firePropertyChange("numOfFiles", oldValue, this.numOfFiles); }public class SWUjarUtility extends SWUzipUtility {
public SWUjarUtility(String[] source, String target, FileFilter filter)
{ super(source, target, filter); }public SWUjarUtility(String[] source, String target)
{ super(source, target); } @Override
protected ZipOutputStream createOutputStream(FileOutputStream fos) {
try
{ return new JarOutputStream(fos); } catch (IOException e) {
}
return null;
}
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
When I open the two generated jar files with Winzip they are lokking identical.