Forum » Programiranje » tomcat in datasource
tomcat in datasource
boss-tech ::
Zanima me kako v tomcatu (linux), nastavim datasource, ki ga potem uporabim v nekem projektu?
DavidJ ::
Kaj konkretno bi pa rad? Naredil connection pooling? Če slednje, potem uporabi tole
WebContent/META-INF/context.xml
Naredi singleton za pridobivanje povezave iz poola:
Kako uporabljas singleton
edit: popravil getConnection v synchronized
WebContent/META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE connection-pooling PUBLIC "-// Apache Tomcat //DTD Connection-pooling Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <Context debug="5" reloadable="true" crossContext="true"> <Resource name="jdbc/trustguard" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="user" password="pass" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/baza?autoReconnect=true" /> </Context>
Naredi singleton za pridobivanje povezave iz poola:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; public class Jdbc { private static DataSource ds = null; static { Context initContext, envContext; try { initContext = new InitialContext(); envContext = (Context) initContext.lookup("java:/comp/env"); ds = (DataSource) envContext.lookup("jdbc/trustguard"); } catch (Exception e) { System.err.println(e); System.exit(1); } } public static synchronized Connection getConnection() throws NamingException, SQLException { return ds.getConnection(); } }
Kako uporabljas singleton
public List<Operator> getAllOperators() { // Jdbc je referenca na razred za dostop do baze String query = "SELECT * FROM tabELca"; Connection connection = null; Statement statement = null; ResultSet rs = null; List<Operator> operators = new ArrayList<Operator>(); try { connection = Jdbc.getConnection(); statement = connection.createStatement(); statement.executeQuery(query); rs = statement.getResultSet(); int id; String operatorName, description; while (rs.next()) { id = rs.getInt(1); operatorName = rs.getString(2); description = rs.getString(3); operators.add(new Operator(id, operatorName, description)); } } catch (Exception e) { System.err.println(e); } finally { Jdbc.closeResultSet(rs); Jdbc.closeStatement(statement); Jdbc.closeConnection(connection); } return operators; }
edit: popravil getConnection v synchronized
"Do, or do not. There is no 'try'. "
- Yoda ('The Empire Strikes Back')
- Yoda ('The Empire Strikes Back')
Zgodovina sprememb…
- spremenil: DavidJ ()
DavidJ ::
Sori, pozabil na web.xml :)
WebContent/WEB-INF/web.xml
Drugače pa:
- http://onjava.com/pub/a/onjava/2006/04/...
- http://developer.spikesource.com/blogs/...
- http://www.crazysquirrel.com/computing/...
- http://tomcat.apache.org/tomcat-6.0-doc...
- http://tomcat.apache.org/tomcat-6.0-doc...
- http://www.hisham.cc/articles/2008/01/0...
Pa jasno, da moraš za MySQL in ostale baze imeti ustrezen JDBC dirver.
WebContent/WEB-INF/web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <description>MySQL Test App</description> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/trustguard</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>
Drugače pa:
- http://onjava.com/pub/a/onjava/2006/04/...
- http://developer.spikesource.com/blogs/...
- http://www.crazysquirrel.com/computing/...
- http://tomcat.apache.org/tomcat-6.0-doc...
- http://tomcat.apache.org/tomcat-6.0-doc...
- http://www.hisham.cc/articles/2008/01/0...
Pa jasno, da moraš za MySQL in ostale baze imeti ustrezen JDBC dirver.
"Do, or do not. There is no 'try'. "
- Yoda ('The Empire Strikes Back')
- Yoda ('The Empire Strikes Back')
Zgodovina sprememb…
- spremenil: DavidJ ()
boss-tech ::
Sem naredil na ta način. Imel sem nekaj problemov glede jdbc driverja, sedaj pa sem naletel na tole napako in me zanima če kdo ve kdaj približno bi lahko bil problem:
28.8.2009 9:28:10 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'pService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'daoService' while setting bean property 'dao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'loginUserDAO' while setting bean property 'loginUserDAO'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginUserDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'hibernateTemplate' while setting bean property 'hibernateTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
Related cause: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateConfig' defined in ServletContext resource [/WEB-INF/applicationContext-datasource.xml]: Unsatisfied dependency expressed through constructor argument with index 1 of type [java.lang.ClassLoader]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?
Related cause: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateConfig' defined in ServletContext resource [/WEB-INF/applicationContext-datasource.xml]: Unsatisfied dependency expressed through constructor argument with index 1 of type [java.lang.Class]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?
Related cause: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateConfig' defined in ServletContext resource [/WEB-INF/applicationContext-datasource.xml]: Unsatisfied dependency expressed through constructor argument with index 1 of type [java.lang.ClassLoader]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?
...
infiniteLoop ::
Mislim, da bos moral z nami deliti vsaj tisti del spring konfiguracijske datoteke, ki se tice beana "hibernateConfig".
None of us is as dumb as all of us.
boss-tech ::
applicationContext-datasource.xml <bean id="hibernateConfig" class="org.springframework.core.io.ClassPathResource"> <constructor-arg index="0"> <value type="java.lang.String">hibernate.cfg.xml</value> </constructor-arg> </bean>
boss-tech ::
src/main/resources/hibernate.cfg.xml pa ima tole vsebino:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property> <!-- property name="hibernate.hbm2ddl.auto">create-drop</property --> <property name="hibernate.show_sql">false</property> <property name="hibernate.default_schema">test</property> <property name="hibernate.jdbc.batch_size">30</property> </session-factory> </hibernate-configuration>
Zgodovina sprememb…
- spremenil: boss-tech ()
infiniteLoop ::
Katero verzijo springa pa uporabljas? Jaz sem probal na 2.5.6 in dela OK. Zgleda, da je problem z argument za hibernateConfig bean sodec po stack traceu.
Zakaj pa sploh poskusas ustvariti poseben ClassPath resource? To lahko zate opravi spring implicitno. Primer:
Zakaj pa sploh poskusas ustvariti poseben ClassPath resource? To lahko zate opravi spring implicitno. Primer:
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"><ref local="dataSource"/></property> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> </bean>
None of us is as dumb as all of us.
boss-tech ::
Imam 2.5.4. Stvar je v tem da mora sessionFactory dobit ta configLocation v obliki objekta(ker bean hibernetConfig je objekt razreda org.springframework.core.io.ClassPathResource), ne vem ali je ta classpath:hibernate.cfg.xml objekt ali string?
<bean id="hibernateConfig" class="org.springframework.core.io.ClassPathResource"> <constructor-arg> <value>hibernate-itrackpersonal.cfg.xml</value> </constructor-arg> </bean>
infiniteLoop ::
Spring bo string "classpath:hibernate.cfg.xml" implicitno spremenil v resource.
None of us is as dumb as all of us.
boss-tech ::
Sem naredil takole:
Pa dobim napako:
<bean id="sessionFactory" class="...core.spring.annotation.AnnotationSessionFactoryBean"> //lokalni razred ki extenda org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean <property name="dataSource"><ref bean="dataSource"/></property> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> ...
Pa dobim napako:
1.9.2009 14:14:31 org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Service' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'daoService' while setting bean property 'dao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'loginUserDAO' while setting bean property 'loginUserDAO'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginUserDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'hibernateTemplate' while setting bean property 'hibernateTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1244)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1008)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4338)
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1247)
at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:604)
at org.apache.catalina.manager.HTMLManagerServlet.doGet(HTMLManagerServlet.java:129)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at sun.reflect.GeneratedMethodAccessor57.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAsPrivileged(Subject.java:537)
at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
at org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:283)
at org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:56)
at org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:185)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:636)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'daoService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'loginUserDAO' while setting bean property 'loginUserDAO'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginUserDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'hibernateTemplate' while setting bean property 'hibernateTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateTemplate' defined in ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext-hibernate.xml]: Invocation of init method failed; nested exception is java.lang.ExceptionInInitializerError
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1244)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1008)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269)
... 49 more
...
Zgodovina sprememb…
- spremenil: boss-tech ()
infiniteLoop ::
Ko postas stacktrace je najbolj zanimiv ozr. uporaben root cause. Torej zadnji del stack tracea ozr. zadnji "Caused by" in do konca. Ce hoces pomoc nam ga zrihtaj ;)
None of us is as dumb as all of us.
infiniteLoop ::
Eh majster to ti je pa spet novi stack trace, ki kaze na to, da imas spet probleme z "hibernateConfig". Flikni to ven in poskusi z implicitnim resourcom. Potem pa postaj stack trace od napake, ki si jo dobil tam.
None of us is as dumb as all of us.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Ne zazna R.class -androidOddelek: Programiranje | 1294 (1132) | Marat |
» | [Android]Vprasanje glede GUI ter pripadajoce XML datotekeOddelek: Programiranje | 3484 (3370) | KernelPanic |
» | java datapool - derbyOddelek: Programiranje | 2319 (2168) | jlpktnst |
» | java, zajem podatkov iz DBOddelek: Programiranje | 1235 (967) | l0g1t3ch |
» | Java- hibernate.properties not foundOddelek: Programiranje | 1786 (1286) | xsenon |