#java #oracle #hibernate #weblogic #jndi
#java #Oracle #переход в спящий режим #weblogic #jndi
Вопрос:
У меня есть JNDI, созданный на моем сервере Weblogic 12c. Я пытаюсь подключиться к базе данных Oracle на сервере, используя datasource, и создать там таблицу, используя 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
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:
Для меня все выглядит нормально.
Попробуйте использовать ojdbc6.jar вместо ojdbc14.jar . Поскольку ваш Oracle имеет версию 11, а java — 8. ojdbc14.jar сейчас оно очень старое.
Дайте мне знать, если это сработает.
Комментарии:
1. В вашем hibernate.cfg.xml файл: <имя свойства=»hibernate.connection.datasource»> java: comp / env / jdbc/Abc</property>. Вы уверены, что эта часть верна? В качестве общего синтаксиса для этого используется: java: comp / env / jdbc /yourJndiNameDS. Проверьте его значение в источнике данных weblogic, если оба совпадают.
2. Да, это была проблема. В weblogic я указал только jdbc / ABCDs. Это сработало после изменения. Спасибо.