我用Spring+Hibernate+Struts做了个程序,如果直接不使用JNDI,可以随意保存数据,没有问题,
但是如果我使用JNDI后,第一次保存成功,第二次保存不成功?
这是为什么呀?<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/mxes"/>
<property name="lookupOnStartup" value="false"/>
<property name="cache" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>
<!--
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
<property name="driverClassName"><value>oracle.jdbc.OracleDriver</value></property>
<property name="url"><value>jdbc:oracle:thin:@192.168.1.8:1521:XXXX</value></property>
<property name="username"><value>FERAS</value></property>
<property name="password"><value>feras08may</value></property>
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
-->
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<!-- Add list of .hbm.xml files here -->
<value>com/gameco/model/BaseUserInfo.hbm.xml</value>
<value>com/gameco/model/BaseRoles.hbm.xml</value>
<value>com/gameco/model/WsmField.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="dataSource"><ref local="dataSource"/></property>
</bean> <!-- Add DAOs here -->
<bean id="baseUserInfoDAO" class="com.gameco.dao.hibernate.BaseUserInfoDAOHibernate">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean> <bean id="baseRolesDAO" class="com.gameco.dao.hibernate.BaseRolesDAOHibernate">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean> <bean id="wsmFieldDAO" class="com.gameco.dao.hibernate.WsmFieldDAOHibernate">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<!-- Add Managers here -->
<bean id="baseUserInfoManagerTarget" class="com.gameco.service.impl.BaseUserInfoManagerImpl">
<property name="baseUserInfoDAO"><ref local="baseUserInfoDAO"/></property>
</bean> <bean id="baseRolesManagerTarget" class="com.gameco.service.impl.BaseRolesManagerImpl">
<property name="baseRolesDAO"><ref local="baseRolesDAO"/></property>
</bean> <bean id="wsmFieldManagerTarget" class="com.gameco.service.impl.WsmFieldManagerImpl">
<property name="wsmFieldDAO"><ref local="wsmFieldDAO"/></property>
</bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<!--
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
-->
<bean id="wasTxMgr" class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager"><ref local="wasTxMgr"/></property>
<property name="autodetectTransactionManager" value="false"/>
</bean> <bean id="baseUserInfoManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="baseUserInfoManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean> <bean id="baseRolesManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="baseRolesManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="wsmFieldManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="wsmFieldManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
</beans>
但是如果我使用JNDI后,第一次保存成功,第二次保存不成功?
这是为什么呀?<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/mxes"/>
<property name="lookupOnStartup" value="false"/>
<property name="cache" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>
<!--
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
<property name="driverClassName"><value>oracle.jdbc.OracleDriver</value></property>
<property name="url"><value>jdbc:oracle:thin:@192.168.1.8:1521:XXXX</value></property>
<property name="username"><value>FERAS</value></property>
<property name="password"><value>feras08may</value></property>
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
-->
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<!-- Add list of .hbm.xml files here -->
<value>com/gameco/model/BaseUserInfo.hbm.xml</value>
<value>com/gameco/model/BaseRoles.hbm.xml</value>
<value>com/gameco/model/WsmField.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="dataSource"><ref local="dataSource"/></property>
</bean> <!-- Add DAOs here -->
<bean id="baseUserInfoDAO" class="com.gameco.dao.hibernate.BaseUserInfoDAOHibernate">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean> <bean id="baseRolesDAO" class="com.gameco.dao.hibernate.BaseRolesDAOHibernate">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean> <bean id="wsmFieldDAO" class="com.gameco.dao.hibernate.WsmFieldDAOHibernate">
<property name="sessionFactory"><ref bean="sessionFactory" /></property>
</bean>
<!-- Add Managers here -->
<bean id="baseUserInfoManagerTarget" class="com.gameco.service.impl.BaseUserInfoManagerImpl">
<property name="baseUserInfoDAO"><ref local="baseUserInfoDAO"/></property>
</bean> <bean id="baseRolesManagerTarget" class="com.gameco.service.impl.BaseRolesManagerImpl">
<property name="baseRolesDAO"><ref local="baseRolesDAO"/></property>
</bean> <bean id="wsmFieldManagerTarget" class="com.gameco.service.impl.WsmFieldManagerImpl">
<property name="wsmFieldDAO"><ref local="wsmFieldDAO"/></property>
</bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<!--
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
-->
<bean id="wasTxMgr" class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager"><ref local="wasTxMgr"/></property>
<property name="autodetectTransactionManager" value="false"/>
</bean> <bean id="baseUserInfoManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="baseUserInfoManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean> <bean id="baseRolesManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="baseRolesManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="wsmFieldManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="wsmFieldManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
</beans>
解决方案 »
- Hibernate QBE检索
- hibernate关联查询的问题
- 有偿寻找简单 SPRING / HIBERNATE 构架论坛
- STRUTS网站开发中,如何让网站有多套风格的页面!
- 谁能解释一下为什么会产生那样的输出结果
- EJB问题高分请教!!急!CMR的外键可不可以再加入到CMP中?我用的是Websphere!
- 装完Oracle9i后..为什么TOMCAT不能启动了?
- 如何解决tomcat的访问的子文件暴露的问题(送分)
- File file=new File("."); file的父目录为什么是null
- Linux下j2ee配置问题
- hibernate多对一查询的效率
- jacob 多线程问题
[08-5-23 15:13:17:464 CST] 00000028 SystemOut O Hibernate: insert into FERAS.WSM_FIELD (NAME, REMARK, CREATED, ID) values (?, ?, ?, ?)
[08-5-23 15:13:17:526 CST] 00000028 SystemOut O 15:13:17,464 WARN RequestProcessor:516 - Unhandled Exception thrown: class java.lang.NullPointerException
[08-5-23 15:13:17:526 CST] 00000028 ServletWrappe E SRVE0068E: 未捕获到 servlet action 的其中一个服务方法中抛出的异常。抛出的异常:javax.servlet.ServletException
at org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:966)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:907)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:217)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:229)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:701)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:646)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:475)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:463)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:92)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:744)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1433)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:93)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:394)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:152)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:213)
at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions(AbstractAsyncFuture.java:195)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:194)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:741)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:863)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1510)
---- Begin backtrace for Nested Throwables
java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBData.clearItem(DBData.java:431)
at oracle.jdbc.dbaccess.DBDataSetImpl.clearItem(DBDataSetImpl.java:3528)
at oracle.jdbc.driver.OraclePreparedStatement.clearParameters(OraclePreparedStatement.java:3401)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.resetStatement(WSJdbcConnection.java:2366)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2017)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1969)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:396)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:76)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:69)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:150)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1839)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:46)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
貌似有异常未捕获!
然后抛了个空指针异常!
在这里可以找找http://japee.com.cn/jew/bbs.aspx
<property name="driverClassName"> <value>oracle.jdbc.OracleDriver </value> </property>
<property name="url"> <value>jdbc:oracle:thin:@192.168.1.8:1521:XXXX </value> </property>
<property name="username"> <value>users</value> </property>
<property name="password"> <value>password</value> </property>
</bean>就不会出现问题,但是使用了JNDI就出问题了!
貌似有异常未捕获!
然后抛了个空指针异常!