Как решить следующие ServiceException в приложении Hibernate + Weblogic (JNDI)? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть JNDI, созданный на моем Weblogic Server 12c.Я пытаюсь подключиться к базе данных Oracle на сервере, используя источник данных, и создать там таблицу, используя hibernate.Но я получаю одно и то же исключение org.hibernate.service.spi.ServiceException: невозможно создать запрошенную службу [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] Часть 1 Часть 2 .Это исключение возникает после того, как я отправляю идентификатор и имя из index.jsp. Ознакомьтесь с моим Java-кодом и предложите любые изменения:

Версии: Java 8 Weblogic 12c Hibernate 5 Oracle 11g

Структура проекта

Jar Files

Hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.datasource">java:comp/env/jdbc/Abc</property>
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <mapping class="packone.Bean"/>
    </session-factory>
</hibernate-configuration>

Context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/Abc"
        auth="container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@//RAPC01-1702-26:1521/P1130PL2"
        username="root"
        password="root"

        maxActive="100"
        maxIdle="20"
        minIdle="5"
        maxWait="10000">
    </Resource>
</Context>

HibernateUtil.java:

private static StandardServiceRegistry standardServiceRegistry;
private static SessionFactory sessionFactory;

public Session getSession(List<String> list) {
    list.add("START: getsession");
    if(sessionFactory == null) {
        try {
            standardServiceRegistry = new StandardServiceRegistryBuilder().configure().build();
            MetadataSources metadataSources = new MetadataSources(standardServiceRegistry);
            Metadata metadata = metadataSources.getMetadataBuilder().build();
            sessionFactory = metadata.getSessionFactoryBuilder().build();
        } catch(Exception e) {
            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            list.add(sw.toString());
        }
    }
    list.add("END: getsession");
    return sessionFactory.openSession();
}

web.xml: просто содержит список файлов приветствия в виде index.jsp

index.jsp:

<%
List<String> list = (List<String>)request.getAttribute("lsit");
if(list==null) {

} else {
    for(String str: list) {
        %> <%=str %><br> <%
    }
}
%>
<form action="BeanServlet">
<input type="text" name="id" placeholder="Enter Id...">
<input type="text" name="name"  placeholder="Enter Name...">
<input type="submit">
</form>

Bean.java:

package packone;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Bean {

    @Id
    private int id;
    private String name;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

BeanServlet.java:

List<String> list = new ArrayList<>();
        list.add("servlet started");
        int id = Integer.parseInt(request.getParameter("id"));
        String name = request.getParameter("name");

        list.add("id value: "+id);
        list.add("name value: "+name);

        Bean B = new Bean();
        B.setId(id);
        B.setName(name);

        new BeanDAO().createBean(B, list);

        list.add("servlet before RD");

        request.setAttribute("lsit", list);
        RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
        rd.forward(request, response);

BeanDAO.java:

package packone;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;

import org.hibernate.Session;

public class BeanDAO {

    public void createBean(Bean B, List<String> list) {
        Session session = null;
        try {
            list.add("START: DAO");
        session = new HibernateUtil().getSession(list); 
        list.add("Arriva Session");
        session.beginTransaction();
        session.save(B);
        session.getTransaction().commit();

        list.add("END: DAO");
        } catch(Exception e) {
            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            list.add(sw.toString());
        } finally {
            if(session != null) {
                session.flush();
                session.close();
            }
        }
    }

}

Дайте мне знать, если вам нужно больше деталей или если форматирование вопроса нуждается в улучшении.Не эксперт по Weblogic, кстати.Спасибо.

1 Ответ

0 голосов
/ 29 марта 2019

Все выглядит хорошо для меня.

Попробуйте использовать ojdbc6.jar вместо ojdbc14.jar. Так как ваш Oracle версии 11, а java 8. ojdbc14.jar сейчас очень старый.

Дайте мне знать, если это работает.

...