java - Generic DAO implementation, Injection failure @ controller level -
import java.lang.reflect.field; import java.lang.reflect.parameterizedtype; import java.text.parseexception; import java.util.arraylist; import java.util.collection; import java.util.date; import java.util.list; import java.util.map; import javax.persistence.entitymanager; import javax.persistence.persistencecontext; import javax.persistence.query; import javax.persistence.transient; import org.apache.log4j.logger; import org.springframework.dao.dataaccessexception; /** * generic dao implementation class provides basic data access , * manipulation functionality * * @author syed.ammar * */ public abstract class genericdaoimpl<t> implements genericdao<t> { private static logger logger = logger.getlogger(genericdaoimpl.class); @suppresswarnings("unchecked") protected class<t> clazz = (class<t>) ((parameterizedtype) this.getclass().getgenericsuperclass()).getactualtypearguments()[0]; @persistencecontext protected entitymanager entitymanager; public entitymanager getentitymanager() { return entitymanager; } public void setentitymanager(entitymanager entitymanager) { this.entitymanager = entitymanager; } @override public t save(t entity) throws dataaccessexception { logger.debug("merging object of type: " + entity.getclass().getcanonicalname()); entity = entitymanager.merge(entity); return entity; } @override public void persist(t entity) throws dataaccessexception { logger.debug("persisting object of type: " + entity.getclass().getcanonicalname()); entitymanager.persist(entity); } /** * method update record in database * * @param updatableobj * - updated copy merge * @return updated, registered persistent instance * */ @override public t update(t entity) { return save(entity); } /** * delete given entity. * * @param entityclass * - entityclass delete * */ @override public void delete(t entity) { logger.debug("delete entity of type: " + entity.getclass().getcanonicalname()); entitymanager.remove(entity); } /** * delete given entities. * * @param entities * - entities delete * */ public void deleteall(list<t> entities) { (t entity : entities) { delete(entity); } } /** * delete entity id * @param id * - entity id */ @override public int deletebyid(long id) { query deletequery = entitymanager.createquery("delete " + clazz.getname() + " entity entity.id=:id"); deletequery.setparameter("id", id); return deletequery.executeupdate(); } /** * delete entity customer * @param customer * - customer entity */ /* @override public int deletebycustomer(customer customer) { query deletequery = entitymanager.createquery("delete " + clazz.getname() + " entity entity.customer=:customer"); deletequery.setparameter("customer", customer); return deletequery.executeupdate(); } */ /** * delete entity reseller * @param reseller * - reseller entity */ /* @override public int deletebyreseller(reseller reseller) { query deletequery = entitymanager.createquery("delete " + clazz.getname() + " entity entity.customer.reseller=:reseller"); deletequery.setparameter("reseller", reseller); return deletequery.executeupdate(); } */ /** * read entity instance of given class given id, throwing * exception if not found. retrieves read-write objects * hibernate unitofwork in case of non-read-only transaction, , * read-only objects else. * @param id * - identity key of desired object * @return entity instance * */ @override public t getbyid(long id) { logger.debug("getbyid:" + id + ", t class: " + clazz ); return entitymanager.find(clazz, id); } @override public list<t> getresultlist(string jpql, map<string, object> queryparams) { logger.debug("query: " + jpql); query query = entitymanager.createquery(jpql.tostring()); for(map.entry<string, object> entry : queryparams.entryset()){ query.setparameter(entry.getkey(), entry.getvalue()); } @suppresswarnings("unchecked") list<t> resultlist = (list<t>) query.getresultlist(); return resultlist; } /** * generic search method without sort column , direction searches * record depending upon property values set in passed model bean. * method has been deprecated , removed soon. create query * specific methods in related entity dao's instead. * * @param entity * entity data set criteria search * @return list of searched model beans applying passed values of * model bean criteria */ @override @deprecated public list<t> search(t entity) { return search(entity, null, null); } /** * generic search method searches record depending upon property * values set in passed model bean. * method has been deprecated , removed soon. create query * specific methods in related entity dao's instead. * * @param entity * entity data set criteria search * @param sortbycolumn * name of column used sorting result * @param sortdirection * 1: asc 2:desc * @return list of searched model beans applying passed values of * model bean criteria */ @override @deprecated @suppresswarnings("unchecked") public list<t> search(t entity, string sortbycolumn, long sortdirection) { list<object> params = new arraylist<object>(); string query = "select entity " + clazz.getname() + " entity"; field[] publicfields = entity.getclass().getdeclaredfields(); (field field : publicfields) { field.setaccessible(true); object value = null; try { value = field.get(entity); } catch (illegalargumentexception e) { logger.error("", e); } catch (illegalaccessexception e) { logger.error("", e); } if (value == null || collection.class.isassignablefrom(field.gettype()) || java.lang.reflect.modifier.isstatic(field.getmodifiers()) || field.getannotation(transient.class) != null) { continue; } if (field.gettype().equals(string.class)) { if (query.contains("where")) { query = query + " , " + field.getname() + " ?" + params.size(); } else { query = query + " " + field.getname() + " ?" + params.size(); } params.add("%" + value.tostring() + "%"); } else if (field.gettype().equals(date.class)) { date startdatetime = null; date enddatetime = null; string starttime = date_format.format(value) + " 00:00:00"; string endtime = date_format.format(value) + " 23:59:59"; try { startdatetime = date_time_format.parse(starttime); enddatetime = date_time_format.parse(endtime); } catch (parseexception e) { logger.error("", e); } if (startdatetime == null || enddatetime == null) { continue; } if (query.contains("where")) { query = query + " , " + field.getname() + " between ?" + params.size() + " , ?" + (params.size() + 1); } else { query = query + " " + field.getname() + " between ?" + params.size() + " , ?" + (params.size() + 1); } params.add(startdatetime); params.add(enddatetime); } else { if (query.contains("where")) { query = query + " , " + field.getname() + " = " + params.size(); } else { query = query + " " + field.getname() + " = ?" + params.size(); } params.add(value); } } query queryobj = entitymanager.createquery(query); // check sorting parameters not not blank or null, apply sorting // criteria if (sortbycolumn != null && sortdirection != null) { if (sortdirection == 1l) { query = query + " order " + sortbycolumn + " asc"; } else { query = query + " order " + sortbycolumn + " desc"; } if (params.size() > 0) { (int = 0; < params.size(); i++) { queryobj.setparameter(i, params.get(i)); } } } return queryobj.getresultlist(); } @override public list<t> getall() { return getall(null, null); } @override public list<t> getall(string sortbycolumn, long sortdirection) { string query = "select entity " + clazz.getname() + " entity"; if (sortbycolumn != null && sortdirection != null) { if (sortdirection == 1l) { query = query + " order " + sortbycolumn + " asc"; } else { query = query + " order " + sortbycolumn + " desc"; } } @suppresswarnings("unchecked") list<t> resultlist = (list<t>) entitymanager.createquery(query).getresultlist(); return resultlist; } /** * generic find method identify exact records depending upon * property values set in passed model bean else null returned * * @param entity * entity data set criteria search * @return list of identified model beans applying passed values of * model bean criteria */ @override @suppresswarnings("unchecked") public list<t> find(t entity) { list<object> params = new arraylist<object>(); string query = "select entity " + entity.getclass().getname() + " entity"; field[] publicfields = entity.getclass().getdeclaredfields(); (field field : publicfields) { field.setaccessible(true); object value = null; try { value = field.get(entity); } catch (illegalargumentexception e) { logger.error("", e); } catch (illegalaccessexception e) { logger.error("", e); } if (value == null || collection.class.isassignablefrom(field.gettype()) || java.lang.reflect.modifier.isstatic(field.getmodifiers()) || field.getannotation(transient.class) != null) { continue; } if (field.gettype().equals(date.class)) { date startdatetime = null; date enddatetime = null; string starttime = date_format.format(value) + " 00:00:00"; string endtime = date_format.format(value) + " 23:59:59"; try { startdatetime = date_time_format.parse(starttime); enddatetime = date_time_format.parse(endtime); } catch (parseexception e) { logger.error("", e); } if (startdatetime == null || enddatetime == null) { continue; } if (query.contains("where")) { query = query + " , " + field.getname() + " between ?" + params.size() + " , ?" + (params.size() + 1); } else { query = query + " " + field.getname() + " between ?" + params.size() + " , ?" + (params.size() + 1); } params.add(startdatetime); params.add(enddatetime); } else { if (query.contains("where")) { query = query + " , " + field.getname() + " = ?" + params.size(); } else { query = query + " " + field.getname() + " = ?" + params.size(); } params.add(value); } } if (params.size() > 0) { query queryobj = entitymanager.createquery(query); (int = 0; < params.size(); i++) { queryobj.setparameter(i, params.get(i)); } return queryobj.getresultlist(); } else { return null; } } } /// auto wire
@controller public class coursecontroller { // @autowired // private searchservice searchservice; @autowired coursedaoimp coursedao; //.............. } severe: exception sending context initialized event listener instance of class org.springframework.web.context.contextloaderlistener org.springframework.beans.factory.beancreationexception: error creating bean name 'coursecontroller': injection of autowired dependencies failed; nested exception org.springframework.beans.factory.beancreationexception: not autowire field: com.softech.ls360.lcms.contentbuilder.dao.impl.coursedaoimp com.softech.ls360.lcms.contentbuilder.web.controller.coursecontroller.coursedao; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [com.softech.ls360.lcms.contentbuilder.dao.impl.coursedaoimp] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true)} @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocesspropertyvalues(autowiredannotationbeanpostprocessor.java:285) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory.java:1074) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:517) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:456) @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:291) @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:222) @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:288) @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:190) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.preinstantiatesingletons(defaultlistablebeanfactory.java:580) @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:895) @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:425) @ org.springframework.web.context.contextloader.createwebapplicationcontext(contextloader.java:276) @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:197) @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:47) @ org.apache.catalina.core.standardcontext.listenerstart(standardcontext.java:4791) @ org.apache.catalina.core.standardcontext.startinternal(standardcontext.java:5285) @ org.apache.catalina.util.lifecyclebase.start(lifecyclebase.java:150) @ org.apache.catalina.core.containerbase.addchildinternal(containerbase.java:901) @ org.apache.catalina.core.containerbase.addchild(containerbase.java:877) @ org.apache.catalina.core.standardhost.addchild(standardhost.java:618) @ org.apache.catalina.startup.hostconfig.deploywar(hostconfig.java:963) @ org.apache.catalina.startup.hostconfig$deploywar.run(hostconfig.java:1600) @ java.util.concurrent.executors$runnableadapter.call(executors.java:471) @ java.util.concurrent.futuretask.run(futuretask.java:262) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615) @ java.lang.thread.run(thread.java:744) caused by: org.springframework.beans.factory.beancreationexception: not autowire field: com.softech.ls360.lcms.contentbuilder.dao.impl.coursedaoimp com.softech.ls360.lcms.contentbuilder.web.controller.coursecontroller.coursedao; nested exception org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [com.softech.ls360.lcms.contentbuilder.dao.impl.coursedaoimp] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true)} @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredfieldelement.inject(autowiredannotationbeanpostprocessor.java:502) @ org.springframework.beans.factory.annotation.injectionmetadata.inject(injectionmetadata.java:84) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor.postprocesspropertyvalues(autowiredannotationbeanpostprocessor.java:282) ... 26 more caused by: org.springframework.beans.factory.nosuchbeandefinitionexception: no matching bean of type [com.softech.ls360.lcms.contentbuilder.dao.impl.coursedaoimp] found dependency: expected @ least 1 bean qualifies autowire candidate dependency. dependency annotations: {@org.springframework.beans.factory.annotation.autowired(required=true)} @ org.springframework.beans.factory.support.defaultlistablebeanfactory.raisenosuchbeandefinitionexception(defaultlistablebeanfactory.java:920) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.doresolvedependency(defaultlistablebeanfactory.java:789) @ org.springframework.beans.factory.support.defaultlistablebeanfactory.resolvedependency(defaultlistablebeanfactory.java:703) @ org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor$autowiredfieldelement.inject(autowiredannotationbeanpostprocessor.java:474) ... 28 more
you did not registered bean name "coursecontroller".first register class bean.you injecting without registering coursecontroller. adding @componenetscan annotation can scan beans , spring register them.
Comments
Post a Comment