|
我设的数据库为javasys
以下是TestUtil.java
package test.util;
import ...;
...
public class TestUtil {
private static Log log=LogFactory.getLog(HibernateUtil.class);
private static Configuration configuration;
private static SessionFactory sessionFactory;
//init
static {
try{
configuration=new Configuration();
configuration.addClass(Test.class)
sessionFactory=configuration.buildSessionFactory();
}catch(Throwable ex){
log.error(ex.getMessage());
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory(){
//以下被注释的代码功能:如何获得作为JNDI资源的SeestionFactory
SessionFactory sessions =null;
try{
Context ctx=new InitialContext();
String jndiName="java:hiberate/HibernateFactory";
sessions=(SessionFactory)ctx.lookup(jndiName);
}catch(NamingException ex){
}
return sessionFactory;
}
public static Configuration getConfiguration(){
return configuration;
}
public static void rebuildSessionFactory()throws DatastoreException{
synchronized (sessionFactory){
try{
sessionFactory=getConfiguration().buildSessionFactory();
}catch(Exception ex){
log.equals(ex.getMessage());
throw DatastoreException.datastoreError(ex);
}
}
}
}
在Hibernate.properties中
hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
##以下的两个属性是否为一样
hibernate.session_factory_name=java:hibernate/SessionFactory
hibernate.connection.datasource=java:comp/env/jdbc/JAVASYS
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/JAVASYS
hibernate.connection.username=root
hibernate.connection.password=1234
hibernate.show_sql=true
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=300
hibernate.c3p0.max_statements=50
hibernate.c3p0.idle_test_period=300
###hibernate.session_factory_name=java:hiberate/HibernateFactory
错误信息如下:
12:55:14,146 INFO Configuration:641 - processing one-to-one association property references
12:55:14,146 INFO Configuration:666 - processing foreign key constraints
12:55:14,316 INFO Dialect:86 - Using dialect: net.sf.hibernate.dialect.MySQLDialect
12:55:14,376 INFO SettingsFactory:70 - Maximim outer join fetch depth: 2
12:55:14,376 INFO SettingsFactory:74 - Use outer join fetching: true
12:55:14,416 INFO NamingHelper:26 - JNDI InitialContext properties:{}
12:55:14,536 FATAL DatasourceConnectionProvider:47 - Could not find datasource: java:comp/env/jdbc/JAVASYS
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:640)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:280)
at javax.naming.InitialContext.lookup(InitialContext.java:347)
at net.sf.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:44)
at net.sf.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:83)
at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:76)
at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1160)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:794)
at sys.util.HibernateUtil.<clinit>(HibernateUtil.java:34)
java.lang.ExceptionInInitializerError
at sys.util.HibernateUtil.<clinit>(HibernateUtil.java:37)
Caused by: net.sf.hibernate.HibernateException: Could not find datasource
at net.sf.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:48)
at net.sf.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:83)
at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:76)
at net.sf.hibernate.cfg.Configuration.buildSettings(Configuration.java:1160)
at net.sf.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:794)
at sys.util.HibernateUtil.<clinit>(HibernateUtil.java:34)
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:640)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:280)
at javax.naming.InitialContext.lookup(InitialContext.java:347)
at net.sf.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:44)
... 5 more
12:55:14,586 ERROR HibernateUtil:36 - Could not find datasource
Exception in thread "main"
我想知道这个JNDI在单纯的应用程序中怎么设置.在Tomcat环境中又是怎么设置? |
|