You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2009/10/09 23:52:07 UTC
svn commit: r823709 - in /openejb/trunk/openejb3/container/openejb-core/src:
main/java/org/apache/openejb/resource/jdbc/
main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/
test/java/org/apache/openejb/resource/jdbc/
Author: jlmonteiro
Date: Fri Oct 9 21:52:06 2009
New Revision: 823709
URL: http://svn.apache.org/viewvc?rev=823709&view=rev
Log:
OPENEJB-1076 Allow end users to use ciphered passwords in datasource configuration (openejb.xml).
Enhanced password codec usage thanks to an SPI like locator. It assumes that all codecs provide a file under META-INF/org.apache.openejb.resource.jdbc.PasswordCodec with the password codec implementation.
Added:
openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/
openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/PlainText
openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/Static3DES
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/PasswordCodecTest.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java?rev=823709&r1=823708&r2=823709&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicDataSourceUtil.java Fri Oct 9 21:52:06 2009
@@ -96,17 +96,36 @@
public static PasswordCodec getPasswordCodec(String passwordCodecClass) throws SQLException {
// Load the password codec class
Class pwdCodec = null;
- try {
- try {
- pwdCodec = Class.forName(passwordCodecClass);
- } catch (ClassNotFoundException cnfe) {
- pwdCodec = Thread.currentThread().getContextClassLoader().loadClass(passwordCodecClass);
- }
+ // try looking for implementation in /META-INF/org.apache.openejb.resource.jdbc.PasswordCodec
+ ResourceFinder finder = new ResourceFinder("META-INF/");
+ Map<String, Class> impls;
+ try {
+ impls = finder.mapAllImplementations(PasswordCodec.class);
+
} catch (Throwable t) {
- String message = "Cannot load password codec class '" + passwordCodecClass + "'";
+ String message =
+ "Password codec '" + passwordCodecClass +
+ "' not found in META-INF/org.apache.openejb.resource.jdbc.PasswordCodec.";
throw new SQLNestedException(message, t);
}
+ pwdCodec = impls.get(passwordCodecClass);
+
+ // if not found in META-INF/org.apache.openejb.resource.jdbc.PasswordCodec
+ // we can try to load the class.
+ if (null == pwdCodec) {
+ try {
+ try {
+ pwdCodec = Class.forName(passwordCodecClass);
+
+ } catch (ClassNotFoundException cnfe) {
+ pwdCodec = Thread.currentThread().getContextClassLoader().loadClass(passwordCodecClass);
+ }
+ } catch (Throwable t) {
+ String message = "Cannot load password codec class '" + passwordCodecClass + "'";
+ throw new SQLNestedException(message, t);
+ }
+ }
// Create an instance
PasswordCodec codec = null;
Added: openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/PlainText
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/PlainText?rev=823709&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/PlainText (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/PlainText Fri Oct 9 21:52:06 2009
@@ -0,0 +1 @@
+org.apache.openejb.resource.jdbc.PlainTextPasswordCodec
Added: openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/Static3DES
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/Static3DES?rev=823709&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/Static3DES (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.resource.jdbc.PasswordCodec/Static3DES Fri Oct 9 21:52:06 2009
@@ -0,0 +1 @@
+org.apache.openejb.resource.jdbc.StaticDESPasswordCodec
Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/PasswordCodecTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/PasswordCodecTest.java?rev=823709&r1=823708&r2=823709&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/PasswordCodecTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/PasswordCodecTest.java Fri Oct 9 21:52:06 2009
@@ -17,6 +17,10 @@
*/
package org.apache.openejb.resource.jdbc;
+import java.sql.SQLException;
+
+import javax.persistence.Basic;
+
import junit.framework.TestCase;
public class PasswordCodecTest extends TestCase {
@@ -34,5 +38,36 @@
char[] tmp = codec.encode(PLAIN_PWD);
assertEquals(PLAIN_PWD, codec.decode(tmp));
}
+
+ public void testGetDataSourcePlugin() throws Exception {
+ // all current known plugins
+ assertPluginClass("PlainText", PlainTextPasswordCodec.class);
+ assertPluginClass("Static3DES", StaticDESPasswordCodec.class);
+
+ // null
+ try {
+ BasicDataSourceUtil.getPasswordCodec(null);
+ fail("Should throw an exception when no codec is found.");
+ } catch (Exception e) {
+ // OK
+ }
+
+ // empty string
+ try {
+ BasicDataSourceUtil.getPasswordCodec("");
+ fail("Should throw an exception when no codec is found.");
+ } catch (Exception e) {
+ // OK
+ }
+
+ // try the FQN of the target codec
+ assertNotNull(BasicDataSourceUtil.getPasswordCodec(PlainTextPasswordCodec.class.getName()));
+ }
+
+ private void assertPluginClass(String pluginName, Class<? extends PasswordCodec> pluginClass) throws SQLException {
+ PasswordCodec plugin = BasicDataSourceUtil.getPasswordCodec(pluginName);
+ assertNotNull(plugin);
+ assertSame(pluginClass, plugin.getClass());
+ }
}
\ No newline at end of file