Hi,
I'm a newbie to spring. I need to configure my database using jndi. It is a simple web application that will be deployed in JBOSS 4.3
I get the following exception,
Here is my entity, a simple pojoCode:ERROR [DispatcherServlet] Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userManagementServiceImpl': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 0 at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:342) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) ... 105 more
Here is my DAO/ServiceCode:package com.pat.form; import java.util.ArrayList; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "USER") public class User { private String userName; private String password; private String firstName; private String lastName; private String email; private String phoneNumber; @Column(name="USERNAME") public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Column(name="PASSWORD") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Column(name="FIRSTNAME") public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } @Column(name="LASTNAME") public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } @Column(name="EMAIL") public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Column(name="PHONE_NUMBER") public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; public void setUserID(String s) { userID = s; } @Id @Column(name="USERID") public String getUserID() { return userID; } }
Here is my applicationContext.xmlCode:package com.pat.service; import com.pat.User; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.springframework.stereotype.Repository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Repository @Service public class UserManagementServiceImpl implements IUserManagementService{ private EntityManager entityManager; @PersistenceContext public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } public boolean isUserAlreadyExists(User user){ //some logic return false; } public List<User> findAllUsers() { return entityManager.createNativeQuery("select o from User o", User.class).getResultList(); } @Transactional //@PreAuthorize("hasRole('RIGHT_CREATE')") public void create(User user) { this.entityManager.persist(user); } }
Here is my persistence.xmlCode:<?xml version="1.0" encoding="UTF-8" standalone="no"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sec="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:property-placeholder location="classpath*:WEB-INF/classes/*.properties"/> <context:annotation-config/> <context:component-scan base-package="com.pat"> <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan> <bean id="usrMgmtSrvc" class="com.pat.service.UserManagementServiceImpl"> <property name="entityManagerFactory" value="javax.persistence.EntityManagerFactory"></property> </bean> <bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="showSql" value="true"></property> <property name="database" value="SYBASE"></property> </bean> <jee:jndi-lookup id="jndiEntityManagerFactory" jndi-name="persistence/MyPU" proxy-interface="javax.persistence.EntityManagerFactory" lookup-on-startup="false"/> <bean id="jtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" lazy-init="true"> <property name="transactionManagerName" value="java:/TransactionManager" /> </bean> <tx:annotation-driven transaction-manager="jtaTransactionManager" /> </beans>
Please help me resolve this issue.Code:<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="MyPU" transaction-type="JTA"> <jta-data-source>java:/jdbc/SybaseDS</jta-data-source> <class>com.pat.form.User</class> <properties> <!-- <property name="jboss.entity.manager.jndi.name" value="java:/jdbc/SybaseDS"/> --> <property name="jboss.entity.manager.factory.jndi.name" value="persistence/MyPU"/> <property name="hibernate.dialect" value="org.hibernate.dialect.SybaseDialect"/> <property name="hibernate.connection.autocommit" value="false"/> <property name="hibernate.show.sql" value="true"/> </properties> </persistence-unit> </persistence>


Reply With Quote