2014-09-19 3 views
1

Я настроил jBoss 7.1.1 final для источника данных и использовал его весной JNDI. Все работает нормально, источник данных вставлен и очередь JMS настроена. Теперь мне нужно запустить пакет, который будет извлекать записи из БД и помещать их в JMS (уже запущенный экземпляр). Я должен использовать тот же источник данных, который сконфигурирован в сервере, но выборка программа записи нормальная программа Java, и я использую такую ​​же конфигурацию, как определено в моей весенней servlet.xmlиспользовать тот же источник данных из уже запущенного сервера

<bean id="TransactionalDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="java:/comp/env/jdbc/FRMWRKPOC_DEV"></property> 
    </bean> 

    <!-- Hibernate Session Factory --> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="TransactionalDataSource"/> 
    <property name="packagesToScan"> 
      <list> 
       <value>entities</value> 
      </list> 
     </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
      <prop key="hibernate.show_sql">true</prop> 
      <prop key="hibernate.connection.autocommit">false</prop> 
      <prop key="hibernate.current_session_context_class">thread</prop> 
     </props> 

    </property> 
    </bean> 

Java-кода, чтобы получить SessionFactory является следующим образом:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); 
       SessionFactory factory = (SessionFactory)context.getBean("sessionFactory"); 
       return factory; 

Но это дает мне следующую ошибку:

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 

Если требуется какое-то первоначальная настройка контекста, то, пожалуйста, руководство меня, а также рассказать мне можно ли получить экземпляр источника данных, если приложение не работает на сервере, хотя сервер уже запущен (потому что это нормально PSVM код Java)

Вы найдете ниже полный StackTrace

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'NonTransactionalDataSource' defined in class path resource [beans.xml]: 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 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1482) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:610) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.rights.client.DBConnection.getSessionFactory(DBConnection.java:33) 
    at com.rights.client.SwonToSubLocMapping.main(SwonToSubLocMapping.java:146) 
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:645) 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288) 
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:154) 
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) 
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178) 
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) 
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105) 
    at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:201) 
    at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:187) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479) 
    ... 13 more 
+0

после завершения StackTrace ошибки на ваш вопрос – Chaitanya

ответ

0

Как вы используя его как обычную программу Java, вы должны предоставить информацию о Spring о том, как получить доступ к JNDI, предоставив требуемые свойства. Для JBOSS вы можете объявить его как это:

<bean id="TransactionalDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:/comp/env/jdbc/FRMWRKPOC_DEV"></property> 
    <property name="jndiEnvironment"> 
     <props> 
     <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> 
     <prop key="java.naming.provider.url">localhost:1099</prop> 
     <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop> 
     <props> 
    </property> 
</bean> 
+0

@Chaitnya Я использую JBoss 7.1.1, так что я использовал эти детали – rishi

+0

я использую JBoss 7.1.1 так использовал эти данные <проп ключа = "Java. naming.factory.initial "> org.jboss.naming.remote.client.InitialContextFactory <проп ключ =" java.naming.provider.url "> пульт дистанционного управления: // локальный: 4447 <проп ключ =" Java. naming.factory.url.pkgs "> org.jboss.naming: org.jnp.interfaces , но теперь я получаю javax.security.sasl.SaslException: Ошибка аутентификации: все доступные аутентичные не удалось Я добавил пользователя приложения на моем сервере jBoss, но я не знаю, как предоставить эти данные в xml. любезно помогите мне. – rishi

+0

теперь я могу предоставить учетные данные и получил удаленное соединение, но теперь получаю эту ошибку Вызвано: javax.naming.NameNotFoundException: comp/env/jdbc/FRMWRKPOC_DEV - service jboss.naming.context.java.jboss.exported .comp.env.jdbc.FRMWRKPOC_DEV помогите мне. – rishi

0

Я хотел бы предложить, чтобы написать простую программу Java или JSP для чтения из JNDI. Похоже, вам нужно пройти аутентификацию (основная учетная запись &) и авторизация (я думаю, ее необязательная) информация при подключении к JNDI.

Смежные вопросы