我用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>

解决方案 »

  1.   

    [08-5-23 15:13:17:448 CST] 00000028 SystemOut     O Hibernate: select SEQ_WSM_FIELD.nextval from dual
    [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)
      

  2.   

     未捕获到 servlet action 的其中一个服务方法中抛出的异常。抛出的异常:javax.servlet.ServletException 
    貌似有异常未捕获!
    然后抛了个空指针异常!
      

  3.   

     日志-病毒-网络-操作系统-安全-c#-asp.net-java-delphi-sql-oracle学习资源
     在这里可以找找http://japee.com.cn/jew/bbs.aspx
      

  4.   

    是一样的!是不是session的问题呀?或者是事务的问题?
      

  5.   

    to:kofren 我在Action那段代码那里加了System打印出来,对象应该是存在了,就是保存不进去!
      

  6.   

    另外,相同的代码,如果使用  <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>users</value> </property> 
      <property name="password"> <value>password</value> </property> 
      </bean>就不会出现问题,但是使用了JNDI就出问题了!
      

  7.   

       jndi的配置除了需要在spring.xml中配置外 还需在哪里配置 最经用Websphere部署项目 但项目中没有配置jndi   楼主在否  给个回复哈  谢谢了!
      

  8.   

    未捕获到 servlet action 的其中一个服务方法中抛出的异常。抛出的异常:javax.servlet.ServletException 
    貌似有异常未捕获!
    然后抛了个空指针异常!