[kaffe] JBoss 3.2.2 working on kaffe
Dalibor Topic
robilad@kaffe.org
Sat Dec 6 01:39:02 2003
This is a multi-part message in MIME format.
--------------000507000904050801020305
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Hi all,
I've managed to get JBoss 3.2.2 to load & run the management console on
kaffe from CVS + a few patches that I haven't committed yet. The patches
are
a) a bugfix for Socket.close() being called twice
b) a rewrite of kaffe's RessourceBundle, since ours & classpath's was broken
c) a 'fix' for ZipFile.close releasing zip ptr.
The patches ara attached for your testing & bugfixing pleasure. They
apply vs the current CVS.
The usual rules apply: set JAVA_HOME to where you've installed kaffe,
set JAVA_OPTS to use kjc as the compiler, lots of memory and a big
stack, as in
export JAVA_OPTS="-mx256M -ss256K -Dbuild.compiler=kjc".
Will this make it into 1.1.3, you may ask. Well, a) is a bugfix and will
go in for sure, b) depends on mauve test results and if Jim OKs it for
1.1.3 and c) is somewhat of a hack, necessary for JBoss but I don't
understand why it breaks otherwise.
There is also a stack of rather weird exceptions being thrown
ocassionally, that need some fixing. I doubt I'll have the time to clear
everything up till Sunday evening, but I'll try to fix as much as I can.
Thew obligatory screenhot is at
http://www.kaffe.org/~robilad/jboss-3.2.2-screenshot.png
thanks to everyone who made this possible. keep up the great work!
cheers,
dalibor topic
--------------000507000904050801020305
Content-Type: text/plain;
name="jboss.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="jboss.diff"
Index: libraries/javalib//java/net/Socket.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/net/Socket.java,v
retrieving revision 1.28
diff -u -r1.28 Socket.java
--- libraries/javalib//java/net/Socket.java 3 Dec 2003 23:18:04 -0000 1.28
+++ libraries/javalib//java/net/Socket.java 6 Dec 2003 09:37:34 -0000
@@ -1003,7 +1003,7 @@
public synchronized void close () throws IOException
{
if (isClosed())
- throw new SocketException("socket is closed");
+ return;
getImpl().close();
impl = null;
Index: libraries/javalib//java/util/ResourceBundle.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/util/ResourceBundle.java,v
retrieving revision 1.16
diff -u -r1.16 ResourceBundle.java
--- libraries/javalib//java/util/ResourceBundle.java 28 Jun 2003 18:06:41 -0000 1.16
+++ libraries/javalib//java/util/ResourceBundle.java 6 Dec 2003 09:37:34 -0000
@@ -39,75 +39,146 @@
public static ResourceBundle getBundle(String baseName, Locale locale,
ClassLoader loader) throws MissingResourceException {
- ResourceBundle defaultBundle = getSpecificBundle (baseName, loader);
- if (defaultBundle != null) {
- defaultBundle.parent = null;
- defaultBundle.locale = new Locale ("");
- }
+ List names = generateCandidateBundleNames(baseName, locale);
+ Iterator iter = names.iterator();
- ResourceBundle ret = getBundleWithLocale(baseName, defaultBundle, locale, loader);
+ while (iter.hasNext()) {
+ String name = (String) iter.next();
- /* It would appear that if we fail to load a resource bundle
- * for a given locale, we just load the default one instead.
- */
- if (ret==defaultBundle && locale != Locale.getDefault()) {
- ret = getBundleWithLocale(baseName, defaultBundle,
- Locale.getDefault(), loader);
- }
+ ResourceBundle bundle = getFromCache(name, loader);
+ if (bundle == null) {
+ bundle = instantiate(name, loader);
+ }
+
+ if (bundle != null) {
+ putInCache(name, loader, bundle);
+ instantiateParentChain(bundle, name, loader);
+ return bundle;
+ }
+ }
+
+ throw new MissingResourceException("BaseName: " + baseName + " Locale: " + locale + " ClassLoader : " + loader, "ResourceBundle", baseName);
+}
- if (ret == null) {
- throw new MissingResourceException("Can't find bundle for base name "
- + baseName + ",locale " + locale, "ResourceBundle", baseName);
- }
- return (ret);
+ private static ResourceBundle getFromCache(String name, ClassLoader loader) {
+
+ return (ResourceBundle)cache.get (loader + name);
+ }
+
+ private static void putInCache(String name, ClassLoader loader, ResourceBundle bundle) {
+
+ cache.put (loader + name, bundle);
+ }
+
+ private static void instantiateParentChain(ResourceBundle bundle, String name, ClassLoader loader) {
+
+ int last_underscore = name.lastIndexOf('_');
+ if (last_underscore != -1) {
+ String parent_name = name.substring(0, last_underscore);
+ ResourceBundle parent = instantiate(parent_name, loader);
+ bundle.setParent(parent);
+ if (parent != null && parent.parent == null) {
+ instantiateParentChain(parent, parent_name, loader);
+ }
+ }
+ }
+
+ private static ResourceBundle loadProperties(String name, ClassLoader loader) {
+ InputStream strm;
+ strm = loader.getResourceAsStream(name.replace('.', '/')
+ + ".properties");
+ if (strm != null) {
+ try {
+ return (new PropertyResourceBundle(strm));
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return null;
+ }
+
+ private static ResourceBundle loadClass(String name, ClassLoader loader) {
+ try {
+ Class cls = Class.forName(name.replace('/', '.'), true, loader);
+ /*
+ * Only call newInstance if the cast to resource bundle
+ * will indeed succeed.
+ */
+ if (ResourceBundle.class.isAssignableFrom(cls)) {
+ return ((ResourceBundle)cls.newInstance());
+ }
+ }
+ catch (ClassNotFoundException e) {
+ // ignore
+ }
+ catch (LinkageError e) {
+ e.printStackTrace();
+ }
+ catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+ catch (InstantiationException e) {
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+private static ResourceBundle instantiate(String name, ClassLoader loader) {
+
+ ResourceBundle bundle = loadClass(name, loader);
+ if (bundle != null) {
+ return bundle;
+ }
+
+ bundle = loadProperties(name, loader);
+ return bundle;
}
-private static final ResourceBundle getBundleWithLocale(String baseName, ResourceBundle bundle,
- Locale locale, ClassLoader loader) {
- ResourceBundle nbundle = null;
-
- String lang = locale.getLanguage();
- String cntry = locale.getCountry();
- String var = locale.getVariant();
-
- StringBuffer sb = new StringBuffer(60);
- sb.append (baseName);
-
- sb.append ('_');
- if (lang.length()>0) {
- sb.append (lang);
- nbundle = getSpecificBundle(sb.toString(), loader);
- if (nbundle != null) {
- nbundle.parent = bundle;
- nbundle.locale = new Locale (lang);
- bundle = nbundle;
- }
- }
+private static List generateCandidateBundleNames(String baseName, Locale locale) {
+
+ String language1 = locale.getLanguage();
+ String country1 = locale.getCountry();
+ String variant1 = locale.getVariant();
+
+ Locale default_locale = Locale.getDefault();
+
+ String language2 = default_locale.getLanguage();
+ String country2 = default_locale.getCountry();
+ String variant2 = default_locale.getVariant();
+
+ List names = new ArrayList();
- sb.append ('_');
- if (cntry.length()>0) {
- sb.append (cntry);
- nbundle = getSpecificBundle(sb.toString(), loader);
- if (nbundle != null) {
- nbundle.parent = bundle;
- nbundle.locale = new Locale (lang, cntry);
- bundle = nbundle;
- }
- }
+ if (variant1.length() != 0) {
+ names.add(baseName + '_' + language1 + '_' + country1 + '_' + variant1);
+ }
- if (var.length()>0) {
- sb.append ('_');
- sb.append (var);
- nbundle = getSpecificBundle(sb.toString(), loader);
- if (nbundle != null) {
- nbundle.parent = bundle;
- nbundle.locale = new Locale (lang, cntry, var);
- bundle = nbundle;
- }
- }
-
- return (bundle);
+ if (country1.length() != 0) {
+ names.add(baseName + '_' + language1 + '_' + country1);
+ }
+
+ if (language1.length() != 0) {
+ names.add(baseName + '_' + language1);
+ }
+
+ if (variant2.length() != 0) {
+ names.add(baseName + '_' + language2 + '_' + country2 + '_' + variant2);
+ }
+
+ if (country2.length() != 0) {
+ names.add(baseName + '_' + language2 + '_' + country2);
+ }
+
+ if (language2.length() != 0) {
+ names.add(baseName + '_' + language2);
+ }
+
+ names.add(baseName);
+
+ return names;
}
public Locale getLocale () {
@@ -124,54 +195,13 @@
}
}
catch (MissingResourceException e) {
+ e.printStackTrace();
}
if (parent == null) {
throw new MissingResourceException("resource not found",
this.getClass().toString(), key);
}
return (parent.getObject(key));
-}
-
-private static final ResourceBundle getSpecificBundle(String baseName,
- ClassLoader loader) {
-
- ResourceBundle ret = (ResourceBundle)cache.get (loader + baseName);
- if (ret != null) {
- return ret;
- }
-
- try {
- Class cls = Class.forName(baseName, true, loader);
- /*
- * Only call newInstance if the cast to resource bundle
- * will indeed succeed.
- */
- if (ResourceBundle.class.isAssignableFrom(cls)) {
- ret = ((ResourceBundle)cls.newInstance());
- }
- }
- catch (Exception _) {
- }
-
- // Okay, failed to load bundle - attempt to load properties as bundle.
- if (ret == null) {
- InputStream strm;
- strm = loader.getResourceAsStream(baseName.replace('.', '/')
- + ".properties");
- if (strm != null) {
- try {
- ret = (new PropertyResourceBundle(strm));
- }
- catch (IOException _) {
- }
- }
- }
-
- if (ret!=null) {
- cache.put (baseName, ret);
- }
-
- return ret;
}
public final String getString(String key) throws MissingResourceException {
Index: libraries/javalib//java/util/zip/ZipFile.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/util/zip/ZipFile.java,v
retrieving revision 1.12
diff -u -r1.12 ZipFile.java
--- libraries/javalib//java/util/zip/ZipFile.java 27 Oct 2003 02:12:59 -0000 1.12
+++ libraries/javalib//java/util/zip/ZipFile.java 6 Dec 2003 09:37:34 -0000
@@ -59,10 +59,7 @@
public void close() throws IOException
{
- if (zip != null) {
- closeZipFile0(zip);
- zip = null;
- }
+ /* do nothing, or JBoss breaks for some weird reason */
}
public Enumeration entries()
@@ -71,9 +68,9 @@
return (all.elements());
}
-public ZipEntry getEntry(String zname)
+public ZipEntry getEntry(String zname) throws IllegalStateException
{
- return (getZipEntry0(zip, zname));
+ return (getZipEntry0(zip, zname));
}
public InputStream getInputStream(ZipEntry ze) throws IOException
--------------000507000904050801020305--