07-16-05 10:45 PM
Hi,
There are two issues in JDOHelper.getPersistenceManagerFactory
1 - the JDOHelper.getPMF raises will raise an exception if there is no
getPMF(Properties) or getPMF(Map) in the implementation. The exception for t
he
properties method is not raised, but in its place the exception for the map
method.
2 - a try catch block is hidding JDOExceptions.
Here is the patch:
Index: C:/trunck/api20/test/java/javax/jdo/JDOHelperTest.java
========================================
===========================
--- C:/trunck/api20/test/java/javax/jdo/JDOHelperTest.java (revision 219338)
+++ C:/trunck/api20/test/java/javax/jdo/JDOHelperTest.java (working copy)
@@ -18,14 +18,14 @@
import java.io.File;
import java.io.InputStream;
-
+import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.jdo.pc.PCPoint;
+import javax.jdo.spi.I18NHelper;
import javax.jdo.util.AbstractTest;
import javax.jdo.util.BatchTestRunner;
-
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
@@ -38,6 +38,9 @@
* TBD: getPMF for valid PMF class
*/
public class JDOHelperTest extends AbstractTest {
+ /** The Internationalization message helper.
+ */
+ private final static I18NHelper msg = I18NHelper.getInstance
("javax.jdo.Bundle"); //NOI18N
/** */
public static void main(String args[]) {
@@ -130,6 +133,7 @@
// TBD test JDOHelper.isDeleted(pc) for persistent instance
}
+
/** Test null String resource with no class loader.
*/
public void testGetPMFNullResource() {
@@ -401,7 +405,21 @@
catch (JDOFatalInternalException ex) {
if (verbose)
println("Caught expected exception " + ex);
+ assertEquals(msg.msg("EXC_GetPMFNoSuchMethod"),ex.getMessage())
;
}
+ Map map = new HashMap();
+ map.put("javax.jdo.PersistenceManagerFactoryClass",
+ "javax.jdo.JDOHelperTest$BadPMFNoGetPMFMethod");
+ try {
+ pmf = JDOHelper.getPersistenceManagerFactory(map);
+ fail("Bad PersistenceManagerFactoryClass should result in
JDOFatalUserException ");
+ }
+ catch (JDOFatalInternalException ex) {
+ if (verbose)
+ println("Caught expected exception " + ex);
+ assertEquals(msg.msg("EXC_GetPMFNoSuchMethod"),ex.getMessage())
;
+ }
+
}
/** Test bad PMF class non-static getPMF method.
Index: C:/trunck/api20/src/java/javax/jdo/JDOHelper.java
========================================
===========================
--- C:/trunck/api20/src/java/javax/jdo/JDOHelper.java (revision 219338)
+++ C:/trunck/api20/src/java/javax/jdo/JDOHelper.java (working copy)
@@ -24,26 +24,21 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
-import java.io.InputStream;
import java.io.IOException;
-
-import java.lang.reflect.Method;
+import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
-
+import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.Map;
import java.util.Properties;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
import javax.jdo.spi.I18NHelper;
import javax.jdo.spi.PersistenceCapable;
-import javax.jdo.spi.StateManager; // for javadoc
-
+import javax.jdo.spi.StateManager;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
-
import javax.rmi.PortableRemoteObject;
@@ -338,7 +333,7 @@
} else if (propsMethod != null) {
pmfMethod = propsMethod;
} else {
- throw mapGetMethodException;
+ throw propsGetMethodException;
}
}
return (PersistenceManagerFactory) pmfMethod.invoke (null, new
Object[] {props});
@@ -357,6 +352,8 @@
throw new JDOFatalInternalException
(msg.msg("EXC_GetPMFNullPointerException", pmfClassName), e); //NOI18N
} catch (ClassCastException e) {
throw new JDOFatalInternalException
(msg.msg("EXC_GetPMFClassCastException", pmfClassName), e); //NOI18N
+ } catch (JDOException jdoex) {
+ throw jdoex;
} catch (Exception e) {
throw new JDOFatalInternalException
(msg.msg("EXC_GetPMFUnexpectedException"), e); //NOI18N
}
[ Post a follow-up to this message ]
|