CompassSettings getRegistry and setRegistry should guard against null values being put in. To implement this, you could use an internal constant object to represent null which is only seen internally to CompassSettings.
OR
Just don't put null values in... this will require refactoring to see if it's really needed
See this stack trace.
java.lang.NullPointerException
at org.compass.core.util.backport.java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:881)
at org.compass.core.config.CompassSettings.setRegistry(CompassSettings.java:230)
at org.compass.core.lucene.engine.store.jdbc.ExternalDataSourceProvider.closeDataSource(ExternalDataSourceProvider.java:101)
at org.compass.core.lucene.engine.store.JdbcLuceneSearchEngineStore.doClose(JdbcLuceneSearchEngineStore.java:193)
at org.compass.core.lucene.engine.store.AbstractLuceneSearchEngineStore.close(AbstractLuceneSearchEngineStore.java:144)
at org.compass.core.lucene.engine.manager.DefaultLuceneSearchEngineIndexManager.close(DefaultLuceneSearchEngineIndexManager.java:288)
at org.compass.core.impl.DefaultCompass$TransactionalSearchEngineIndexManager.close(DefaultCompass.java:269)
at org.compass.core.lucene.engine.manager.ScheduledLuceneSearchEngineIndexManager.close(ScheduledLuceneSearchEngineIndexManager.java:90)
at org.compass.core.lucene.engine.LuceneSearchEngineFactory.close(LuceneSearchEngineFactory.java:87)
at org.compass.core.impl.DefaultCompass.close(DefaultCompass.java:197)
CMP-283.