繁体   English   中英

使用Jndi时出错“在环境或系统属性中指定类名”

[英]Error `specify class name in environment or system property` while using Jndi

此代码有什么问题? 我试图通过.sh运行文件,并得到此错误:

Error creating bean with name 'entityManagerFactory' defined in class path resource [com/.../beans.xml]: 
Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'dataSource' defined in class path resource [com/.../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

这是文件.sh执行的代码(我省略了不必要的代码):

public final class FraudCacheBatchJob {
    private static final String CLASS_NAME = FraudCacheBatchJob.class.getCanonicalName();
    private static final String CONTEXT_XML_NAME = "/beans.xml";

    private static String getPackageLocation() {
        return FraudCacheBatchJob.class.getPackage().getName().replace(".", "/");
    }

    public static void main(String[] args) {
        try {
            ApplicationContext context = new ClassPathXmlApplicationContext(getPackageLocation() + CONTEXT_XML_NAME);

            CachedRule cachedRule = context.getBean("cachedRule", CachedRule.class);

            ...
        } catch (Exception ex) {
        }
    }
}

beans.xml

...
<context:annotation-config/>
<context:spring-configured/>
<context:component-scan base-package="com....." />

<jpa:repositories base-package="com....." />

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="jca:/console.dbpool/Connection1/JCAManagedConnectionFactory/Connection1"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter" ref="hibernateJpaAdapter" />         
    <property name="packagesToScan" value="com.....persistence"/>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
            <prop key="hibernate.show_sql">false</prop>              
        </props>        
    </property>
</bean>

<bean id="hibernateJpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="false" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>
...

我在服务器上指定了jndi参数。

还有其他吗? 谢谢。

它抱怨您没有设置“ java.naming.factory.initial”。

当您已经使用Spring时,可以创建一个JndiTemplate,如下所示:

<bean id="myJndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
    <props>
        <prop key="java.naming.factory.initial"org.jnp.interfaces.NamingContextFactory</prop>
        <prop key="java.naming.provider.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
    <props>
        <prop key="java.naming.provider.url">jnp://myhost:1099</prop>
    <props>
</property>

这些配置用于JBoss。 如果您使用JNDI的其他实现,则需要进行调整

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM