Coś nie tak z Hibernate

0

Cześć mam problem z hiberante nie chce mi się zbudować projekt w WildFly

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }

}

pom

      <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.1.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
    </dependencies>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

        <property name="connection.url">jdbc:mysql://localhost:3306/xxx</property>
        <property name="connection.username">root</property>
        <property name="connection.password">xxx</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="show_sql">true</property>

        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create-drop</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>

        <mapping class="com.triscode.model.Employee" />
        <mapping class="com.triscode.model.Department" />

    </session-factory>
</hibernate-configuration>
0

Ale jakiś błąd pokazuje?

1

nie chce mi się zbudować projekt w WildFly
Coś kręcisz, WildFly to serwer, powiedz: projekt się nie buduje czy projekt się buduje i problem przy deployu?
Wrzuć jaki błąd.

0

hread 1-7) MSC000001: Failed to start service jboss.deployment.unit."XXX.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."XXX.war".WeldStartService: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)

0

Znalazłem przyczynę błędu, ale nie wiem dla czego?

Controller

@Path("/")
public class LoginController {

    private final static Logger loger = Logger.getLogger(LoginController.class);



    @PersistenceContext
    EntityManager em;




    @POST
    @Path("/addUser")
    public String addUser() {
        Employee employee = new Employee();
        em.getTransaction().begin();
        employee.setName("test");
        em.persist(employee);
        em.getTransaction().commit();
        em.close();



        return null;
    }
0

My też nie bo nadal nie raczyłeś pokazać CO TO ZA BŁĄD. BTW zwracanie null z tej metody to niezły wtf. Tak samo jak ręczne otwieranie/zamykanie transakcji i zamykanie entity managera.

0
19:34:35,146 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC000001: Failed to start service jboss.deployment.unit."xxx.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."xxx.war".WeldStartService: Failed to start service
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: WFLYWELD0037: Error injecting persistence unit into CDI managed bean. Can't find a persistence unit named '' in deployment xxx.war for injection point javax.persistence.EntityManager com.xxxx.controller.LoginController.em
	at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.getScopedPUName(WeldJpaInjectionServices.java:114)
	at org.jboss.as.weld.services.bootstrap.WeldJpaInjectionServices.registerPersistenceContextInjectionPoint(WeldJpaInjectionServices.java:77)
	at org.jboss.weld.injection.ResourceInjectionFactory$PersistenceContextResourceInjectionProcessor.getResourceReferenceFactory(ResourceInjectionFactory.java:351)
	at org.jboss.weld.injection.ResourceInjectionFactory$PersistenceContextResourceInjectionProcessor.getResourceReferenceFactory(ResourceInjectionFactory.java:339)
	at org.jboss.weld.injection.ResourceInjectionFactory$ResourceInjectionProcessor.createFieldResourceInjection(ResourceInjectionFactory.java:217)
	at org.jboss.weld.injection.ResourceInjectionFactory$ResourceInjectionProcessor.createResourceInjections(ResourceInjectionFactory.java:189)
	at org.jboss.weld.injection.ResourceInjectionFactory.discoverType(ResourceInjectionFactory.java:449)
	at org.jboss.weld.injection.ResourceInjectionFactory.getResourceInjections(ResourceInjectionFactory.java:97)
	at org.jboss.weld.injection.producer.ResourceInjector.<init>(ResourceInjector.java:59)
	at org.jboss.weld.injection.producer.ResourceInjector.of(ResourceInjector.java:49)
	at org.jboss.weld.injection.producer.BeanInjectionTarget.<init>(BeanInjectionTarget.java:63)
	at org.jboss.weld.injection.producer.BeanInjectionTarget.createDefault(BeanInjectionTarget.java:47)
	at org.jboss.weld.manager.InjectionTargetFactoryImpl.chooseInjectionTarget(InjectionTargetFactoryImpl.java:113)
	at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:86)
	at org.jboss.weld.bean.ManagedBean.<init>(ManagedBean.java:100)
	at org.jboss.weld.bean.ManagedBean.of(ManagedBean.java:80)
	at org.jboss.weld.bootstrap.AbstractBeanDeployer.createManagedBean(AbstractBeanDeployer.java:261)
	at org.jboss.weld.bootstrap.BeanDeployer.createClassBean(BeanDeployer.java:228)
	at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:78)
	at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$2.doWork(ConcurrentBeanDeployer.java:75)
	at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63)
	at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
	at org.jboss.threads.JBossThread.run(JBossThread.java:320)

19:34:35,152 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 1) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "xxxx.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"x.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"xxx.war\".WeldStartService: Failed to start service
    Caused by: java.lang.IllegalArgumentException: WFLYWELD0037: Error injecting persistence unit into CDI managed bean. Can't find a persistence unit named '' in deployment x.war for injection point javax.persistence.EntityManager com.xxx.controller.LoginController.em"}}
19:34:35,154 ERROR [org.jboss.as.server] (management-handler-thread - 1) WFLYSRV0021: Deploy of deployment "x.war" was rolled back with the following failure message: 
{"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"x.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"xxxx.war\".WeldStartService: Failed to start service
    Caused by: java.lang.IllegalArgumentException: WFLYWELD0037: Error injecting persistence unit into CDI managed bean. Can't find a persistence unit named '' in d
0

A jak zrobić to inaczej z transakcje i zamykanie entity managera? Robiłem to podobnie jak w książce.

0

Z tego: Caused by: java.lang.IllegalArgumentException: WFLYWELD0037: Error injecting persistence unit into CDI managed bean. Can't find a persistence unit named in'' że źle skonfigurowałeś JPA w tym projekcie więc zapewne plik persistence.xml jest niepoprawny.
A ta twoja książka ile ma lat? Nie jest aby czasem starsza od ciebie?

0

Książka to autora Krzysztof rychlicki kocior. Czy mzesz mi podać lepsze rozwiazanie tego. I dziękuję za odpowiedź w sprawie serwera

0

Nie mówie że to zła ksiażka, tylko że z tego co widzę to jest z roku 2010 ;]
Co do transakcji to już od jakiegoś czasu jest http://www.mastertheboss.com/java-ee/transactions/declarative-transactions-with-java-ee-7 ;]

0

Jesteś w stanie polecić mi jakąś książkę dobra z Java ee ? Najlepiej po polsku

0

@Shalom mam tak skonfigurowany persistance.xml, w którym miejscu jest źle ?

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
    <persistence-unit name="sample">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.test.model.Employee</class>
        <properties>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"></property>
            <property name="hibernate.connection.password" value="haslo"></property>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db"></property>
            <property name="hibernate.connection.username" value="root"></property>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"></property>
        </properties>
    </persistence-unit>
</persistence>
0

Błędem jest to że stosuje:

@PersistenceContext
EntityManager em;

Caused by: java.lang.IllegalArgumentException: WFLYWELD0037: Error injecting persistence unit into CDI managed bean. Can't find a persistence unit named '' in deployment test.war for injection point javax.persistence.EntityManager com.test.controller.LoginController.em"}}

Ale nadal nie wiem dla czego to się dzieje???

0

A gdzie leży u ciebie ten plik persistence.xml ? Na pewno w META-INF?

0

@Shalom tak w META-INF hibernate ma w resources. Problem jest jak używam @PersitanceContext w klasie LoginController jak użyje np w LoginService to jest ok

0

Jejku to nie mogłeś tego napisać od razu? Kontroler jax-rs nie jest automatycznie beanem CDI z tego co mi się wydaje więc musisz go dodatkowo anotować przez jakieś @Stateless albo @Singleton żeby móc wstrzyknąć coś do niego. Gdybyś od razu napisał konkretnie co sie dzieje to moglibyśmy się skupić na faktycznym problemie a nie zgadywać...

0

@Shalom dziękuje za odpowiedz

0

@Shalom Mam jeszcze do Ciebie pytanie odnośnie książki czy warto przeczytać Enterprise JavaBeans 3.0. Wydanie V?

0

Nadal mam problem przez @PersistenceContext:

@Path("/")
@stateless
public class LoginController {

**@PersistenceContext
EntityManager em;**

ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.deployment.unit."test.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."test.war".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment "test.war"
at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:154)
at org.jboss

0

I nie umiesz skopiować CAŁEGO błędu? Albo przynajmniej tej wartościowej części?

0

@Shalom
Cały kod błędu

 10:37:40,878 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.unit."test.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."test.war".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment "test.war"
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:154)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEE0041: Component class com.test.controller.LoginController for component LoginController has errors: 
WFLYJPA0033: Can't find a persistence unit named null in deployment "test.war"
	at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:157)
	at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:54)
	at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:186)
	at org.jboss.as.ee.component.deployers.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:143)
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:147)
	... 5 more

10:37:40,890 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 4) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "test.war")]) - failure description: {
    "WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"test.war\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"test.war\".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment \"test.war\"
    Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: WFLYEE0041: Component class com.test.controller.LoginController for component LoginController has errors: 
WFLYJPA0033: Can't find a persistence unit named null in deployment \"test.war\""},
    "WFLYCTL0180: Services with missing/unavailable dependencies" => [
        "jboss.deployment.unit.\"test.war\".batch.environment is missing [jboss.deployment.unit.\"test.war\".beanmanager]",
        "jboss.deployment.unit.\"test.war\".weld.weldClassIntrospector is missing [jboss.deployment.unit.\"test.war\".beanmanager]"
    ]
}
10:37:40,892 ERROR [org.jboss.as.server] (management-handler-thread - 4) WFLYSRV0021: Deploy of deployment "test.war" was rolled back with the following failure message: 
{
    "WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"test.war\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"test.war\".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment \"test.war\"
0

To sugeruje że kłamałeś wcześniej jakoby wstrzykiwanie kontekstu do jakiejś innej klasy ci działało, bo to nie jest tak że do jednego @Singleton się wstrzykuje (a twierdziłeś ze w jakimś serwisie działa) a do drugiego nie.
Błąd nadal sugeruje że lokalizacja persistence.xml jest niepoprawna albo że sama konfiguracja jest błędna. Jedno o widzę w tej konfiguracji nie tak to użwanie złego providera. Powinno być <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Poza tym trochę nie ogarniam co ty robisz skoro najpierw pokazywałeś konfiguracje gołego hibernate a potem JPA.

0

@Shalom
Powodem jest w tej klasie że nie działa to że mam ten @Path(" ") nad nazwą klasy. Jeśli tego nie mam to @PersistenceContext działa

ok mam przyczynę persistence literówkę miałem. Mam jeszcze błąd ale poradzę sobie z nim

1 użytkowników online, w tym zalogowanych: 0, gości: 1