Я использую Jersey и Hibernate. Раньше у меня был код void main, который работал с Session Factory, но с этим есть проблемы. Я вырезал из всего кода части для упрощения.

Я знаю, что проблема в том, что Session Factory добавит полную трассировку стека по запросу, это долго.

PS Я слабо слежу за https://www.youtube.com/watch?v= hNBPDHM-3RY

        INFO: Server startup in 13357 ms
        Mar 13, 2018 5:06:58 PM org.glassfish.jersey.internal.Errors logErrors
        WARNING: The following warnings have been detected: WARNING: Unknown HK2 failure detected:
        MultiException stack 1 of 2
        java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
            at com.web.CurrencyFair.endpoints.service.TradeService.<init>(TradeService.java:28)
        ...
        Caused by: java.lang.ClassNotFoundException: org.hibernate.cfg.Configuration
            at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1335)
            at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1163)
            ... 57 more
        MultiException stack 2 of 2
        java.lang.IllegalStateException: Unable to perform operation: create on com.web.CurrencyFair.endpoints.resources.JsonTradeEndpoint
            at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:392)
            at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)    
        ...

Сегмент hibernate.cfg.xml. будут ли дополнительные сопоставления вызывать проблемы? мне просто нужно TradeMessage, обряд?

        <mapping class="com.web.CurrencyFair.endpoints.modules.TradeMessage"/> 
        <mapping class="com.web.CurrencyFair.endpoints.service.TradeService"/>
        <mapping class="com.web.CurrencyFair.endpoints.resources.JsonTradeEndpoint"/>

TradeService класс

        @Path("/")
        @Produces(MediaType.APPLICATION_JSON) // ensure moxy in pom is commented in to use JSON
        @Consumes(MediaType.APPLICATION_JSON)
        public class JsonTradeEndpoint {

            TradeService tradeService = new TradeService();//intit hibernate in constructor

            @GET
            public List<TradeMessage> getTradeMessage() {
            }
            //. . .
        }

Строка, которая настраивает buildSessionFactory, является первой ошибкой.

        public class TradeService {

            /*
             * This file provides connection to the DB for the TradeMessage object
             * */

            SessionFactory sessionFactory =  null;
            Session session = null;


            public TradeService() {
                super();
                SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
                this.sessionFactory = sessionFactory;
                this.session = sessionFactory.openSession(); 
            }

            public List<TradeMessage> getTradeMessages(TradeMessageFilterBean filterBean){
                List<TradeMessage> queryResult = new ArrayList<>();
                //. . .
                return queryResult;
            }
        }
0
ASH 13 Мар 2018 в 20:31

2 ответа

Лучший ответ

Я исправил это сейчас, изменив несколько вещей, но не уверен на 100%, что устранило основную причину.

См. Изменения кода и операции CRUD

Я сослался на (hibernate4) org.hibernate.MappingException: Unknown entity

Файл конфигурации

        <!-- Names the annotated entity class -->
        <mapping class="com.web.CurrencyFair.endpoints.modules.TradeMessage"/> 
        <!--<mapping class="com.web.CurrencyFair.endpoints.service.TradeService"/>
        <mapping class="com.web.CurrencyFair.endpoints.resources.JsonTradeEndpoint"/>-->

Ниже приведен обновленный код

        public class TradeService {

        Configuration configuration = null;
        //StandardServiceRegistryBuilder ssrb = null;
        SessionFactory sessionFactory =  null;
        Session session = null;

        private void init() {
            configuration = new Configuration().configure("hibernate.cfg.xml");
            //ssrb = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
            sessionFactory = configuration.buildSessionFactory();
            session = sessionFactory.openSession();
        }

        public List<TradeMessage> getTradeMessages(TradeMessageFilterBean filterBean){
            List<TradeMessage> queryResult = new ArrayList<>();

            try {

                if(session == null) this.init();

                TradeMessage trademessage = new TradeMessage(654321);

                session = sessionFactory.openSession();
                session.beginTransaction();

                //C
                session.save(trademessage);
                //R
                TradeMessage newTM = (TradeMessage) session.get(TradeMessage.class, 1);
                System.out.println("TM = : " + newTM.toString());
                //U
                newTM.setId(100);
                session.update(newTM);
                newTM = (TradeMessage) session.get(TradeMessage.class, 1);
                System.out.println("TM = : " + newTM.toString());
                //D
                session.delete(newTM);

                session.getTransaction().commit();
                session.close();
            } catch (Exception e) {
                // TODO: handle exception
            } finally {
            }

            return queryResult; 
        }
0
marc_s 8 Авг 2018 в 19:24

Вы уверены, что org.hibernate.cfg.Configuration находится в пути к классам и WebappClassLoaderBase может его видеть?

0
damianxb3 13 Мар 2018 в 20:11