2013-09-04 5 views
0

Я имею следующий проект:Класс [com.mysql.jdbc.Driver] не найден

enter image description here

Файл 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()); 
     } 
    } 

} 

И он работает без проблем, выводя именно то, что у меня есть в базе данных.

enter image description here

Так «локально» я могу использовать файл 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 я создал отдельный клиент, в другом проекте. enter image description here

Клиент имеет только один класс, следующее:

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 (это один из пакета по умолчанию) я получаю следующие выходные данные enter image description here

Как можно видеть, нет проблем с подключением к EJB, поскольку thing.test(); который возвращает «работы», определенно побежал, нет проблем с требуемыми библиотеками для клиента, которые, как я думаю, но после этого исключение скрывается.

enter image description here

Продолжение, как это можно видеть 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) enter image description here }

и можно видеть, что оба метода, вызванные клиентом, работали. Это означает, что проблема заключается в том, что 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> 

ответ

1

Вы должны иметь банку MySQL развернуть на Glassfish сервере. Либо развернуть это с вашим приложением, или поместить его в каталог applib на сервере.

Обычно в Glassfish источника данных сервер будет использоваться вместо JDBC непосредственно, так что вы можете попробовать, что хорошо.

+0

Я сделал совершенно новый проект, на этот раз с DataSource и mysql jar на сервере не на приложении, как я хотел, и он работает. Кто знает, что могло бы вызвать проблему ... Спасибо за время! – erasmus77

Смежные вопросы