Bugs item #677800, was opened at 2003-01-30 16:20
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=428708&aid=677800&group_id=40712
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Leonardo Quijano (lquijano)
Assigned to: Nobody/Anonymous (nobody)
Summary: Configuration.configure(String) bug
Initial Comment:
This is my code:
Configuration config = new Configuration();
config.configure("/hibernate-ga.cfg.xml");
sessionFactory = config.buildSessionFactory();
When I run it, Configuration.configure() parses the
correct files and get all the mappings. BUT it doesn't
return the right object:
public Configuration configure(String resource) throws
HibernateException {
InputStream stream = getConfigurationInputStream(resource);
Document doc;
try {
doc = XMLHelper.parseInputSource( new
InputSource(stream) );
}
catch (Exception e) {
log.error("Problem parsing configuration " + resource, e);
throw new HibernateException( "Problem parsing
configuration " + resource + ": " + e );
}
Node sfNode =
doc.getDocumentElement().getElementsByTagName("session-factory").item(0);
String name =
sfNode.getAttributes().getNamedItem("name").getNodeValue();
properties.setProperty(Environment.SESSION_FACTORY_NAME,
name);
addProperties(sfNode);
Configuration ds = new Configuration();
NodeList mapElements = sfNode.getChildNodes();
for ( int j=0; j<mapElements.getLength(); j++ ) {
Node mapElement = mapElements.item(j);
if ( mapElement.getNodeName().equals("mapping") ) {
NamedNodeMap atts = mapElement.getAttributes();
Node rsrc = atts.getNamedItem("resource");
Node file = atts.getNamedItem("file");
Node jar = atts.getNamedItem("jar");
if (rsrc!=null) {
log.debug(name + "<-" + rsrc);
try {
ds.addResource( rsrc.getNodeValue(),
Thread.currentThread().getContextClassLoader() );
}
catch (MappingException me) {
ds.addResource( rsrc.getNodeValue(),
Environment.class.getClassLoader() );
}
}
else if ( jar!=null ) {
log.debug(name + "<-" + jar);
ds.addJar( jar.getNodeValue() );
}
else {
if (file==null) throw new HibernateException("<mapping>
element in configuration specifies no attributes");
log.debug(name + "<-" + file);
ds.addFile( file.getNodeValue() );
}
}
}
log.info("Configured SessionFactory: " + name);
log.debug("properties: " + properties);
return this;
}
Note the creation of:
Configuration ds = new Configuration();
*all* the parsed XML properties are written in this new
object:
ds.addResource( rsrc.getNodeValue(),
Thread.currentThread().getContextClassLoader() );
or
ds.addResource( rsrc.getNodeValue(),
Environment.class.getClassLoader() );
for example.
But the method returns "this"!!
log.info("Configured SessionFactory: " + name);
log.debug("properties: " + properties);
return this;
So I get the original, empty Configuration :/
I guess the right fix for this would be to use "this"
when adding new resources and never instantiating "ds",
or returning ds as a new object, right? (it's a bit
confusing though, I thought that
Configuration.configure() would be a void method that
configures itself, rather than returning new
Configurations)
I guess it was a small but annoying bug...
Leonardo
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=428708&aid=677800&group_id=40712
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
hibernate-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/hibernate-devel