Hi i am trying to use jndi data source. below is the code
context.xml
<Context antiJARLocking="true" path="/SpringMVCTest">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
maxActive="20" maxIdle="10" maxWait="10000"
name="jdbc/pluto" password=""
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/spring?zeroDateTimeBehavior=convertToNull"
username="pluto"/>
</Context>
in spring-servlet config bean is:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jdbc/pluto" value="java:comp/env/jdbc/pluto"/>
</bean>
i am getting this error
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'contactController': Injection of autowired
dependencies failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Could not
autowire field: private app.contact.service.ContactService
app.contact.controller.ContactController.contactService; nested
exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'contactServiceImpl': Injection of
autowired dependencies failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Could not
autowire field: private app.contact.dao.ContactDAO
app.contact.service.ContactServiceImpl.contactDAO; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'contactDAOImpl': Injection of autowired
dependencies failed; nested exception is
org.springframework.beans.factory.BeanCreationException: Could not
autowire field: private org.hibernate.SessionFactory
app.contact.dao.ContactDAOImpl.sessionFactory; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'sessionFactory' defined in ServletContext
resource [/WEB-INF/spring-servlet.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 ServletContext
resource [/WEB-INF/spring-servlet.xml]: Error setting property values;
nested exception is
org.springframework.beans.NotWritablePropertyException: Invalid
property 'jdbc/pluto' of bean class
[org.springframework.jndi.JndiObjectFactoryBean]: Bean property
'jdbc/pluto' is not writable or has an invalid setter method. Does the
parameter type of the setter match the return type of the getter?
Related cause:
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'dataSource' defined in ServletContext
resource [/WEB-INF/spring-servlet.xml]: Error setting property values;
nested exception is
org.springframework.beans.NotWritablePropertyException: Invalid
property 'jdbc/pluto' of bean class
[org.springframework.jndi.JndiObjectFactoryBean]: Bean property
'jdbc/pluto' is not writable or has an invalid setter method. Does the
parameter type of the setter match the return type of the getter?
Best Answer
You have a bean definition as such
The property name
jdbc/pluto
is supposed to match a setter, so Spring expects something likesetJdbc/Pluto()
but that is obviously not correct java syntax.Looking at the
JndiObjectFactoryBean
it looks like you want thesetJndiName()
method fromJndiObjectLocator
super class.So your bean should look like