Struts/SpringWebSphereJNDI错误
我是WebSphere的新手(主要与Tomcat合作),我正在尝试主持一个Struts/Spring/Hibernate网站。该网站应该能够从Oracle数据库中查找数据并显示这些信息 我目前无法让网站运行,这似乎是一个jndi错误。以下是错误:Struts/SpringWebSphereJNDI错误,spring,websphere,jndi,websphere-liberty,Spring,Websphere,Jndi,Websphere Liberty,我是WebSphere的新手(主要与Tomcat合作),我正在尝试主持一个Struts/Spring/Hibernate网站。该网站应该能够从Oracle数据库中查找数据并显示这些信息 我目前无法让网站运行,这似乎是一个jndi错误。以下是错误: [ERROR ] Context initialization failed Error creating bean with name 'entityManagerFactory' defined in ServletContext resour
[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
这是我的websphereserver.xml
<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>
localConnector-1.0
servlet-3.0
jsp-2.2
jaxrs-1.1
jndi-1.0
applicationContext.xml
<?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>
真的
java:comp/env/jdbc/test
ibm-web-bnd.xml
<?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
<?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>
会员目录管理器
Spring OpenEntityManager视图过滤器
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
Spring OpenEntityManager视图过滤器
/*
支柱2
org.apache.struts2.dispatcher.ng.filter.strutspreadexecutefilter
支柱2
/*
login.jsp
org.springframework.web.context.ContextLoaderListener
数据来源
jdbc/测试
javax.sql.DataSource
容器
可分享
jdbc/测试
有人建议我试试那个
,我把它接上了。但它的作用方式与
完全相同,这不是正确的方法。按以下步骤进行:
Help>Eclipse市场
尝试将
jdbc-4.0
添加到您的server.xml,您缺少它。当我添加jdbc-4.0时,出现以下错误:
[error]CWWKF0001E:找不到jdbc-4.0`的功能定义。您一定是打字错误。您是否在Eclipse中安装了WebSphere Developer工具?如果是,则使用服务器配置编辑器添加该功能。您应该将其与其他功能一起添加到featureManager
部分。您还可以从wlp\bin\productInfo featureInfo
运行命令,查看运行时是否具有该功能。我目前正在Eclipse中为WebSphere使用Web预览服务器。此服务器上似乎没有任何featureManager选项。我不确定在哪里运行此服务器的wlp\bin\productInfo
命令。我刚刚直接编辑了C:\Users\user\workspace\.metadata\.plugins\com.ibm.etools.wdt.server.core\tmp0\usr\servers\defaultServer0\server.xml
文件来添加连接信息和功能。我目前已经下载了ibm安装管理器,正在尝试下载安装它所需的WebService文件(),但我不确定我下载的文件是否正确。我目前正在下载这两个文件8.5.5-WS-WAS-RP-part1.zip
和8.5.5-WS-WAS-RP-part2.zip
。我将尝试并提取它们,希望能够获得IBM IM存储库正确安装所需的信息。好的,我在localhost运行了一个WebSphere Application Server Liberty概要文件。我有添加了功能的服务器配置。我添加了数据源。我有网络管理员。但我现在遇到了这个错误:创建名为“entityManagerFactory”的bean时出错,该bean在ServletContext资源[/WEB-INF/applicationContext.xml]中定义:调用init方法失败;嵌套异常为java.lang.IllegalStateException:名称“pu1”的持久化单元定义冲突:文件:/C:/Users/user/workspace/WebAdmin/build/classes,文件:/C:/Users/user/workspace/WebAdmin/WebContent
。必须使用管理器指定它。在entityManagerFactory
中,我更改以下内容:
然后添加管理器:classpath:META-INF/persistence.xml