2017-07-04 21 views
0

我有一個Spring MVC 3.2.8應用程序,我想運行StandAlone過程來生成PDF。我想初始化容器並從獨立應用程序管理bean。 我有這樣一段代碼:Spring MVC 3.2.8:創建一個新的FileSystemXmlApplicationContext並從給定的XML文件加載定義

public class CreatePDF { 


     private static final Logger LOGGER = Logger.getLogger (ImportEcolabelToolboxToECAT.class); 

     public static void main(String[] args) { 


      String[] configLocations = new String[] { 

"C:/Development/Workspaces/EclipseWS/devices/deviceWeb/src/main/resources/com/nicinc/dao/dataAccessContext.xml", 

"C:/Development/Workspaces/EclipseWS/devices/deviceWeb/src/main/webapp/WEB-INF/dao/databaseMessageSource.xml", 
                 "C:/Development/Workspaces/EclipseWS/devices/deviceWeb/src/main/resources/com/nicinc/services/impl/servicesContext.xml", 
                 "C:/Development/Workspaces/EclipseWS/devices/deviceWeb/src/main/webapp/WEB-INF/applicationContext.xml",            
                 "C:/Development/Workspaces/EclipseWS/devices/deviceWeb/src/main/resources/com/nicinc/controller/propertyeditors/propertyeditorsContext.xml"}; 

      FileSystemXmlApplicationContext ctx = 
        new FileSystemXmlApplicationContext(configLocations, true); 

     } 
    } 

但在運行應用程序時,我有這個錯誤。

Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is 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 

和這裏的定義從文件dataAccessContext.xml

<!-- The PropertyPlaceholderConfigurer replaces placeholders in Spring bean definitions with the values from the chosen properties files. --> 
    <!-- There is an example use in the datasource definition below. Look for the $\{jdbc.*} values. --> 
    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list> 
       <value>classpath:com/nicinc/dao/jdbc-test.properties</value>     
       <value>classpath:com/nicinc/dao/dbMessageSource.properties</value> 
      </list> 
     </property> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.username}" /> 
     <property name="password" value="${jdbc.password}" /> 
    </bean> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="databasePlatform" value="${hibernate.dialect}"/> 
       <property name="generateDdl"  value="false"/> 
       <property name="showSql"   value="false" /> 
      </bean> 
     </property>   
    </bean> 

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

回答

1

javax.naming包包括JNDI API。由於它只是一個API的實現,你將不得不提供。通常,實施由App服務器提供。根據你錯過JNDI實現的錯誤。 可能的解決方法:

  1. 如果你沒有任何JavaEE的相關要求,那麼你應該直接使用DriverManagerDataSource不同。
  2. 您需要提供自己的實現。以下鏈接可能會有所幫助。 using application data source locally.
相關問題