una tuberia soluciĆ³n pvc encontrado autoenrutamiento java spring spring-mvc spring-data-jpa hessian

java - tuberia - El autoenrutamiento falla: no es un tipo administrado



no se ha encontrado una soluciĆ³n de autoenrutamiento. (9)

¡Tengo un gran problema en mi proyecto de diploma y estaría muy contento si ustedes pudieran ayudarme! Hice un proyecto Maven Multi Module y tengo 3 "Core-projects"

  • NaviClean : (Padre)
  • NaviCleanDomain : contiene el modelo de dominio con todas mis entidades y una interfaz MeinRemoteDienst que es necesaria para NaviCleanServer y NaviCleanCleint para Hessianprotocol
  • NaviCleanClient : contiene la GUI y una conexión de Hessian con NaviCleanServer
  • NaviCleanServer : Aquí están mis repositorios, mi conexión con el DB y la Implementación de la interfaz einRemoteDienst NaviCleanServer y NaviCleanClient tienen NaviCleanDomain en Maven como Dependencia.

Ahora, cada vez que intento iniciar el servidor en mi Tomcat, aparece el siguiente error:

ERROR: org.springframework.web.context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''transaktionsRepository'': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [at.naviclean.service.impl.MeinRemoteDienstImpl] for bean with name ''meinRemoteDienstImpl'' defined in file [C:/Users/Fredy/Documents/workspace-sts-3.1.0.RELEASE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/NaviCleanServer/WEB-INF/classes/at/naviclean/service/impl/MeinRemoteDienstImpl.class]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: at/naviclean/service/MeinRemoteDienst at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:342) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) ……………….

ModelBase:

package at.naviclean.domain; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.MappedSuperclass; import javax.persistence.Version; @SuppressWarnings("serial") @MappedSuperclass public class ModelBase implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private Long id; @Version @Column(name = "ts") private Date timestamp; public Long getId() { return id; } public Date getTimestamp() { return timestamp; } public void setId(Long id) { this.id = id; } public void setTimestamp(Date timestamp) { this.timestamp = timestamp; } }

Kassa:

package at.naviclean.domain; import javax.persistence.Column; import javax.persistence.Entity; @SuppressWarnings("serial") @Entity public class Kassa extends ModelBase { @Column(name = "name", unique = true) private String name; @Column(name = "geld") private int geld; public Kassa(String name, int geld) { this.name = name; this.geld = geld; } public Kassa() { } public String getName() { return name; } public int getGeld() { return geld; } public void setName(String name) { this.name = name; } public void setGeld(int geld) { this.geld = geld; } }

MeinRemoteDienst:

package at.naviclean.service; import at.naviclean.domain.Kassa; public interface MeinRemoteDienst { int getKassaCount(int plus); String getNameFromKassa(int id); Kassa findById(int id); }

BaseRepository

package at.naviclean.repositories; import org.springframework.data.jpa.repository.JpaRepository; import at.naviclean.domain.ModelBase; public interface BaseRepository<T extends ModelBase> extends JpaRepository<T, Long> { T findById(long id); }

KassaRepository:

package at.naviclean.repositories; import java.util.List; import org.springframework.data.jpa.repository.Query; import at.naviclean.domain.Kassa; public interface KassaRepository extends BaseRepository<Kassa> { List<Kassa> findByGeld(int geld); Kassa findByName(String name); @Query("select k from Kassa k where k.geld = ?1") Kassa findByGeld1(int geld); }

MeinRemoteDienstImpl:

package at.naviclean.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import at.naviclean.domain.Kassa; import at.naviclean.repositories.KassaRepository; import at.naviclean.service.MeinRemoteDienst; @Service public class MeinRemoteDienstImpl implements MeinRemoteDienst { @Autowired(required = true) public KassaRepository kassaR; public int getKassaCount(int plus) { return 2; } public String getNameFromKassa(int id) { return kassaR.findById(id + 0l).getName(); } @Override public Kassa findById(int id) { return = kassaR.findById(id + 0l); } }

application-context.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:jpa="http://www.springframework.org/schema/data/jpa" xmlns:context="http://www.springframework.org/schema/context" xmlns:repository="http://www.springframework.org/schema/data/repository" xsi:schemaLocation="http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <import resource="infrastructures.xml" /> <jpa:repositories base-package="at.naviclean.repositories"> <repository:exclude-filter type="regex" expression="at.naviclean.repositories.BaseRepository" /> </jpa:repositories> <context:component-scan base-package="at.naviclean.service.impl" /> </beans>

Infraestructuras.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:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <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="showSql" value="true" /> <property name="generateDdl" value="true" /> <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" /> </bean> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost/kassatest" /> <property name="username" value="root" /> <property name="password" value="" /> </bean> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> </beans>

servlet-context.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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <import resource="../root-context.xml" /> <bean id="idMeinRemoteDienst" class="at.naviclean.service.impl.MeinRemoteDienstImpl" /> <bean name="/MeinRemoteDienstHessian" class="org.springframework.remoting.caucho.HessianServiceExporter" p:serviceInterface="at.naviclean.service.MeinRemoteDienst" p:service-ref="idMeinRemoteDienst" /> </beans>

root-context.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <import resource="classpath:META-INF/spring/application-context.xml" /> </beans>

web.xml:

<?xml version="1.0" encoding="UTF-8"?> <web-app 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"> <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>/MeinRemoteDienstHessian</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>/MeinRemoteDienstHessian</servlet-name> <url-pattern>/remoting/*</url-pattern> </servlet-mapping> </web-app>

Esto es lo que ya probé: 1. Escribí esta prueba que "se puso roja":

package at.spengergasse.kassa; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import at.naviclean.domain.Kassa; import at.naviclean.repositories.KassaRepository; @ContextConfiguration("classpath:META-INF/spring/application-context.xml") @RunWith(SpringJUnit4ClassRunner.class) public class KassaTest { @Autowired(required = true) private KassaRepository kassaR; @Before public void setUp() throws Exception { } @Test public void findByIdTest() { Kassa k = kassaR.findById(2); assertThat(k, is(not(nullValue()))); } @Test public void findByGeld() { Kassa k = kassaR.findByGeld1(1200); assertThat(k, is(not(nullValue()))); } @Test public void test() { Kassa vorher = new Kassa("ssf", 222); kassaR.save(vorher); Kassa nachher = kassaR.findById(vorher.getId()); kassaR.delete(nachher); assertThat(vorher.getId(), is(equalTo(nachher.getId()))); } }

ERRORES:

ERROR: org.springframework.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@41e22632] to prepare test instance [at.spengergasse.kassa.KassaTest@6639be68] java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''meinRemoteDienstImpl'': **Injection of autowired dependencies failed**; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public at.naviclean.repositories.KassaRepository at.naviclean.service.impl.MeinRemoteDienstImpl.kassaR; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''kassaRepository'': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: **Not an managed type: class at.naviclean.domain.Kassa** at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) ………..

2. Inserté en mi persitence.xml mi modelo de dominio y repositorios de forma manual. El resultado fue una prueba "verde" pero todavía no pude iniciar el servidor ...

¡¡¡Muchas gracias por adelantado!!! No puedo imaginar lo que sería sin ti :)


Cuando extiende indirectamente JpaRepository (KassaRepository extiende BaseRepository que extiende JpaRepository), entonces tiene que anotar BaseRepository con @NoRepositoryBean :

@NoRepositoryBean public interface BaseRepository<T extends ModelBase> extends JpaRepository<T, Long> { T findById(long id); }


Debería ampliar el alcance del componente-scan, por ejemplo, <context:component-scan base-package="at.naviclean" /> ya que colocó las entidades en el paquete at.naviclean.domain;

Esto debería ayudarlo a deshacerse de la excepción: no es un tipo gestionado: clase at.naviclean.domain.Kassa

Para una mayor depuración, puede tratar de volcar el contexto de la aplicación (consulte javadoc) para explorar qué clases han sido detectadas por el componente-scan, si algunas todavía no reconocen su anotación (@Service, @Component, etc.).

EDITAR:

También necesita agregar las clases a su persistence.xml

<persistence-unit> <class>at.naviclean.domain.Kassa</class> ... </persistence-unit>


En el arranque de primavera obtengo la misma excepción al usar CrudRepository porque olvidé establecer tipos genéricos. Quiero escribirlo aquí en caso de que ayude a alguien.

definición falsa

public interface OctopusPropertiesRepository extends CrudRepository

error:

Caused by: java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object

definición exitosa:

public interface OctopusPropertiesRepository extends CrudRepository<OctopusProperties,Long>{


En mi caso, cuando usé IntelliJ, tenía varios módulos en el proyecto. El módulo principal dependía de otro módulo que tenía las dependencias maven en Spring.

El módulo principal tenía Entity s y también el segundo módulo. Pero cuando ejecuté el módulo principal, solo las Entity del segundo módulo fueron reconocidas como clases administradas.

Luego agregué dependencias de Spring en el módulo principal también, y ¿adivinen qué? Reconoció todas las Entity .


Obtuve un consejo muy útil de Oliver Gierke:

La última excepción que recibe en realidad indica un problema con su configuración de JPA. "No es un frijol administrado" no significa un tipo que el proveedor de JPA conoce. Si está configurando una aplicación JPA basada en Spring, le recomiendo que configure la propiedad "packagesToScan" en la LocalContainerEntityManagerFactory que ha configurado para el paquete que contiene sus entidades JPA. Alternativamente, puede enumerar todas las clases de entidad en persistence.xml, pero eso suele ser más engorroso.

El error anterior que obtuvo (NoClassDefFound) indica que la clase mencionada no está disponible en la classpath de los proyectos. Por lo tanto, es posible que desee comprobar las dependencias entre módulos que tiene. Como las dos clases relevantes parecen estar ubicadas en el mismo módulo, también podría ser un problema con una implementación incompleta en Tomcat (a veces, WTP es algo malintencionado). Definitivamente recomendaría ejecutar una prueba para la verificación (como ya hiciste). Como esto parece llevarte a una excepción diferente, supongo que es realmente un error de Eclipse

¡Gracias!


Para mí, el error fue bastante simple en función de lo que @alfred_m dijo ... Tomcat tenía 2 jarrones conflictivos con el mismo conjunto de nombres de clase y configuración.

Lo que sucedió fue ............. Copié mi proyecto existente para hacer un nuevo proyecto del proyecto existente. pero sin hacer los cambios necesarios, comencé a trabajar en otro proyecto. Los proyectos de Henec 2 tenían las mismas clases y archivos de configuración, lo que generaba conflictos.

Eliminado el proyecto copiado y las cosas comenzaron a funcionar !!!!


Refiriéndose a la pista de Oliver Gierke:

Cuando la manipulación de persistance.xml funciona, creaste una clase java normal en lugar de una entidad-clase.

Al crear una nueva entidad-clase, Netbeans (en mi caso) debe establecer la entrada en persistance.xml.

Pero como menciona Oliver Gierke, puede agregar la entrada más tarde a persistance.xml (si creó una clase java normal).


Si alguien está luchando con el mismo problema lo resolví agregando @EntityScan en mi clase principal. Simplemente agregue su paquete de modelo a la propiedad basePackages.


necesita verificar paquetesToScan.

<bean id="entityManagerFactoryDB" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" <property name="dataSource" ref="dataSourceDB" /> <property name="persistenceUnitName" value="persistenceUnitDB" /> <property name="packagesToScan" value="at.naviclean.domain" /> //here .....