Я имею следующий проект:Класс [com.mysql.jdbc.Driver] не найден
Файл model.Clienti является "JPA Entity", main.Main является POJO с основной метод и клиент для файла model.Clienti. main.Main имеет следующий код:
package main;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import model.Clienti;
public class Main {
public static void main(String[] args) {
EntityManager entityManager = Persistence.createEntityManagerFactory("JPATestEJB").createEntityManager();
List<Clienti> list = entityManager.createQuery("select c from Clienti c", Clienti.class).getResultList();
for (Clienti clienti : list) {
System.out.println(clienti.getNume());
}
}
}
И он работает без проблем, выводя именно то, что у меня есть в базе данных.
Так «локально» я могу использовать файл JPA без проблем, но когда я пытаюсь создать EJB и EJB-клиент, чтобы сделать то же самое, как main.Main файл я получаю сообщение об ошибке.
EJB-находится в pachet.EmployeeSession (интерфейс)
package pachet;
import javax.ejb.Remote;
@Remote
public interface EmployeeSession {
public String getEmplastname(Integer empno);
public String test();
}
И в EmployeeSessionBean
package pachet;
import java.util.List;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import model.Clienti;
@Stateless
public class EmployeeSessionBean implements EmployeeSession {
public String getEmplastname(Integer empno) {
try {
EntityManager em = Persistence.createEntityManagerFactory("JPATestEJB").createEntityManager();
List<Clienti> list = em.createQuery("select c from Clienti c", Clienti.class).getResultList();
for (Clienti clienti : list) {
System.out.println(clienti.getNume());
}
} catch (EJBException e) {
e.printStackTrace();
}
return "a mers";
}
public String test() {
return "works";
}
}
Для этого EJB я создал отдельный клиент, в другом проекте.
Клиент имеет только один класс, следующее:
import javax.naming.InitialContext;
import pachet.EmployeeSession;
public class Main {
public static void main(String[] args) {
try {
InitialContext ic = new InitialContext();
EmployeeSession thing = (EmployeeSession) ic.lookup("pachet.EmployeeSession");
System.out.println(thing.test());
System.out.println("It seems it runs: " + thing.getEmplastname(1));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Но когда я пытаюсь запустить Main (это один из пакета по умолчанию) я получаю следующие выходные данные
Как можно видеть, нет проблем с подключением к EJB, поскольку thing.test(); который возвращает «работы», определенно побежал, нет проблем с требуемыми библиотеками для клиента, которые, как я думаю, но после этого исключение скрывается.
Продолжение, как это можно видеть EclipseLink не находит com.mysql.jdbc.Driver.
Итак, вопрос: как возможно, что main.Main в проекте EJB работает правильно и отображает информацию из db, но Main из ejb-клиента этого не делает.
Точнее проблема заключается в EJB EmployeeSessionBean, если он имел следующую структуру:
package pachet;
import java.util.List;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import model.Clienti;
@Stateless
public class EmployeeSessionBean implements EmployeeSession {
public String getEmplastname(Integer empno) {
try {
String b = "nothing";
} catch (EJBException e) {
e.printStackTrace();
}
return "a mers";
}
public String test() {
return "works";
}
имеет следующий вывод: (обратите внимание, что я удалил все «бизнес» код в JPA) }
и можно видеть, что оба метода, вызванные клиентом, работали. Это означает, что проблема заключается в том, что ejb EmployeeSessionBean не может использовать JPA так же, как main.Main, но вопрос в том, почему? Они определенно находятся в одном проекте, и видно, что у меня есть необходимые библиотеки EclipseLink и mysql-jdbc.
Если кто-то из них ошибся, то main.Main не сможет подключиться, верно? ' Спасибо за внимание.
Вот посмотрите мой файл persistence.xml, хотя он работает нормально. http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd ">
<class>model.Clienti</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/comenzi"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>
</persistence-unit>
Я сделал совершенно новый проект, на этот раз с DataSource и mysql jar на сервере не на приложении, как я хотел, и он работает. Кто знает, что могло бы вызвать проблему ... Спасибо за время! – erasmus77