首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Struts/Spring WebSphere jndi错误

Struts/Spring WebSphere jndi错误
EN

Stack Overflow用户
提问于 2015-05-14 17:12:25
回答 1查看 2.3K关注 0票数 0

我对WebSphere相当陌生(主要是使用Tomcat),并且正在尝试托管Struts/Spring/Hibernate网站。该网站应该能够从Oracle数据库中查找数据并显示这些信息。

我目前无法让网站运行,这似乎是一个jndi错误。以下是错误:

代码语言:javascript
运行
复制
[ERROR   ] Context initialization failed
Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.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': Invocation of init method failed; nested exception is javax.naming.NamingException: CWNEN1001E: The object referenced by the java:comp/env/jdbc/test JNDI name could not be instantiated. If the reference name maps to a JNDI name in the deployment descriptor bindings for the application performing the JNDI lookup, make sure that the JNDI name mapping in the deployment descriptor binding is correct. If the JNDI name mapping is correct, make sure the target resource can be resolved with the specified name relative to the default initial context. [Root exception is com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E: The server was unable to obtain an object instance for the java:comp/env/jdbc/test reference.  The exception message was: CWNEN1003E: The server was unable to find the jdbc/test binding with the javax.sql.DataSource type for the java:comp/env/jdbc/test reference.]
[ERROR   ] SRVE0283E: Exception caught while initializing context: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/applicationContext.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': Invocation of init method failed; nested exception is javax.naming.NamingException: CWNEN1001E: The object referenced by the java:comp/env/jdbc/test JNDI name could not be instantiated. If the reference name maps to a JNDI name in the deployment descriptor bindings for the application performing the JNDI lookup, make sure that the JNDI name mapping in the deployment descriptor binding is correct. If the JNDI name mapping is correct, make sure the target resource can be resolved with the specified name relative to the default initial context. [Root exception is com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E: The server was unable to obtain an object instance for the java:comp/env/jdbc/test reference.  The exception message was: CWNEN1003E: The server was unable to find the jdbc/test binding with the javax.sql.DataSource type for the java:comp/env/jdbc/test reference.]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:336)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:2374)
    at [internal classes]
Caused by: javax.naming.NamingException: CWNEN1001E: The object referenced by the java:comp/env/jdbc/test JNDI name could not be instantiated. If the reference name maps to a JNDI name in the deployment descriptor bindings for the application performing the JNDI lookup, make sure that the JNDI name mapping in the deployment descriptor binding is correct. If the JNDI name mapping is correct, make sure the target resource can be resolved with the specified name relative to the default initial context. [Root exception is com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E: The server was unable to obtain an object instance for the java:comp/env/jdbc/test reference.  The exception message was: CWNEN1003E: The server was unable to find the jdbc/test binding with the javax.sql.DataSource type for the java:comp/env/jdbc/test reference.]
    at com.ibm.ws.injectionengine.osgi.internal.naming.InjectionJavaColonHelper.newCannotInstantiateObjectException(InjectionJavaColonHelper.java:134)
    at [internal classes]
    at javax.naming.InitialContext.lookup(Unknown Source)
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155)
    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:179)
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:106)
    at org.springframework.jndi.JndiObjectTargetSource.afterPropertiesSet(JndiObjectTargetSource.java:97)
    at org.springframework.jndi.JndiObjectFactoryBean$JndiObjectProxyFactory.createJndiObjectProxy(JndiObjectFactoryBean.java:318)
    at org.springframework.jndi.JndiObjectFactoryBean$JndiObjectProxyFactory.access$000(JndiObjectFactoryBean.java:307)
    at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:200)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 24 more
Caused by: com.ibm.wsspi.injectionengine.InjectionException: CWNEN0030E: The server was unable to obtain an object instance for the java:comp/env/jdbc/test reference.  The exception message was: CWNEN1003E: The server was unable to find the jdbc/test binding with the javax.sql.DataSource type for the java:comp/env/jdbc/test reference.
    at com.ibm.wsspi.injectionengine.InjectionBinding.getInjectionObject(InjectionBinding.java:1087)
    ... 38 more
Caused by: com.ibm.wsspi.injectionengine.InjectionException: CWNEN1003E: The server was unable to find the jdbc/test binding with the javax.sql.DataSource type for the java:comp/env/jdbc/test reference.
    at com.ibm.ws.injectionengine.osgi.internal.IndirectJndiLookupObjectFactory.getObjectInstance(IndirectJndiLookupObjectFactory.java:201)
    ... 38 more

这是我的WebSphere server.xml

代码语言:javascript
运行
复制
<server description="new server">   
    <featureManager continueOnError="false">
        <feature>localConnector-1.0</feature>
        <feature>servlet-3.0</feature>
        <feature>jsp-2.2</feature>
        <feature>jaxrs-1.1</feature>
        <feature>jndi-1.0</feature>
    </featureManager>
    <applicationMonitor updateTrigger="disabled"/>
    <application id="proxy" location="proxy.war" name="proxy" type="war">
    </application>
    <httpEndpoint id="defaultHttpEndpoint"
                  host="localhost"
                  httpPort="9080"
                  httpsPort="9443" />

    <dataSource id="oracle" jndiName="jdbc/test" type="javax.sql.DataSource">
        <jdbcDriver libraryRef="oracle-lib" id="oracle-driver"/>
        <connectionManager numConnectionsPerThreadLocal="10" id="ConnectionManager" minPoolSize="1"/>
        <properties.oracle user="test" password="test" URL="jdbc:oracle:thin:@test.local:1521:STILOG"/>
    </dataSource>

    <library id="oracle-lib">
        <fileset dir="C:/Users/test/workspace/WebAdmin/WebContent/WEB-INF/lib/" includes="ojdbc6.jar"/>
    </library>

    <application context-root="WebAdmin" id="WebAdmin" location="WebAdmin.war" name="WebAdmin" type="war">
        <classloader delegation="parentLast" commonLibraryRef="oracle-lib"/>
    </application>
</server>

applicationContext.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">

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

    <bean id="commonService" class="com.ddvc.service.CommonServiceImpl"/>
    <bean id="mainMenuService" class="com.ddvc.service.MainMenuServiceImpl"/>
    <bean id="storeFilterService" class="com.ddvc.service.StoreFilterServiceImpl"/>

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaVendorAdapter">
            <bean
                class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="ORACLE" />
                <property name="showSql" value="true" />
            </bean>
        </property>
        <property name="persistenceUnitName" value="pu1" />
        <property name="jpaProperties">
            <props>
                <prop key="org.hibernate.envers.store_data_at_delete">true</prop>
            </props>
        </property>
    </bean>

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
<!--             value>java:/comp/env/IVRConfig</value -->
<!--             value>IVRConfigCluster</value -->
            <value>java:comp/env/jdbc/test</value>
        </property>
        <property name="lookupOnStartup" 
            value="true"/>
        <property name="cache" 
            value="true"/>
        <property name="proxyInterface" 
            value="javax.sql.DataSource"/>
    </bean>

<!--     <jee:jndi-lookup id="dataSource" -->
<!--        jndi-name="java:comp/env/jdbc/test" -->
<!--        cache="true" -->
<!--        resource-ref="true" -->
<!--        lookup-on-startup="true" -->
<!--        proxy-interface="javax.sql.DataSource"> -->
<!--    </jee:jndi-lookup> -->

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

<!--    <bean id="pum" -->
<!--         class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager"> -->
<!--         <property name="persistenceXmlLocations"> -->
<!--             <list> -->
<!--                 <value>classpath:META-INF/persistence.xml</value> -->
<!--             </list> -->
<!--         </property> -->
<!--         <property name="defaultDataSource" ref="dataSource"></property> -->
<!--     </bean> -->

<!--    <bean id="emf-p" -->
<!--        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> -->
<!--        <property name="persistenceXmlLocation" value="/WebContent/META-INF/persistence.xml" /> -->
<!--        <property name="persistenceUnitManager" ref="pum"/> -->
<!--        <property name="persistenceUnitName" value="pu1" /> -->
<!--        <property name="loadTimeWeaver"> -->
<!--            <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> -->
<!--        </property> -->
<!--    </bean> -->

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

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

    <bean id="loginAction" scope="prototype" class="com.ddvc.action.LoginAction">
        <constructor-arg ref="commonService" />
    </bean>

    <bean id="userAction" scope="prototype" class="com.ddvc.action.UserAction">
        <constructor-arg ref="commonService" />
    </bean>

    <bean id="mainMenuAction" scope="prototype" class="com.ddvc.action.MainMenuAction">
        <constructor-arg ref="mainMenuService" />
    </bean>  
</beans>

ibm-web-bnd.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-bnd 
    xmlns="http://websphere.ibm.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
    version="1.0">

    <virtual-host name="default_host" />

    <resource-ref name="jdbc/test" binding-name="jdbc/test"/>
</web-bnd>

web.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <display-name>WebAdmin</display-name>

    <!-- Include this if you are using Hibernate -->
    <filter>
        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
        <filter-class>
            org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <resource-ref>
        <description>DataSource</description>
        <res-ref-name>jdbc/test</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
        <mapped-name>jdbc/test</mapped-name>
    </resource-ref>
</web-app>

有人建议试试那个<jee:jndi-lookup id="dataSource">,我把它接上了。但它的作用与<bean id="dataSource">完全相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-16 21:58:29

这样做是不对的。这样做如下:

  1. 在Eclipse中,转到Help > Eclipse Marketplace
  2. 搜索ibm,您将找到露娜的WebSphere应用服务器自由配置文件开发工具(或其他正在使用的Eclipse )。安装工具。
  3. 安装后,您将能够创建新的服务器- WebSphere应用服务器自由配置文件-创建它。您试图使用的Web预览是用于静态文件,而不是Java应用程序。
  4. 在向导创建服务器中,您可以选择下载服务器运行时,执行它。您还可以从wasdev.net手动下载它:
代码语言:javascript
运行
复制
- [Download Liberty profile in Eclipse](https://developer.ibm.com/wasdev/downloads/liberty-profile-using-eclipse/)
- [Download just the Liberty profile runtime](https://developer.ibm.com/wasdev/downloads/liberty-profile-using-non-eclipse-environments/)

  1. 将应用程序添加到服务器。在“服务器”视图中,展开“自由服务器”并双击“服务器配置”。您将在那里拥有特性管理器,并且可以在那里添加jdbc。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30243317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档