简体   繁体   中英

EclipseLink 3.0 doesn't find a suitable jdbc (Jakarta EE)

I'm trying to run a simple web application on which I want run some tests on Jakarta EE 9.1(Full platform). I deployed my application on Glassfish 6.2.5. While I was running some code with jpa implementation this exception is thrown(the persistence provider is EclipseLink 3.0.2):

jakarta.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 3.0.2.v202107160933): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306;create=true Error Code: 0

The persistence.xml is:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
             version="3.0">
    <persistence-unit name="GestoreDB" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>testJPA.ValueBeen</class>
        <properties>
            <property name="jakarta.persistence.schema-generation.action" value="drop-and-create"/>
            <property name="jakarta.persistence.schema-generation.scripts.create-target" value="database-and-scripts"/>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306;create=true"/>
            <property name="jakarta.persistence.jdbc.user" value="root"/>
            <property name="jakarta.persistence.jdbc.password" value="myPwd"/>
        </properties>
    </persistence-unit>
</persistence>

The Entity is(getters and setters omitted):

@Entity
@NamedQuery(name = "ValueBeen.selectTable", query = "select u from ValueBeen u")
public class ValueBeen
{
    public ValueBeen(){
    }
    
    public ValueBeen(String value)
    {
        this.value = value;
    }
    
    public ValueBeen(int id, String value)
    {
        this.id = id;
        this.value = value;
    }
    
    @Id
    @GeneratedValue
    private int id;
    @NotNull
    private String value;
...
}

And the WebServlet who perform persistency is:

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException
    {
        
        ValueBeen valueBeen=new ValueBeen("Hello");
        
        
        //Manager persistence and manager been
        EntityManagerFactory managerPersistence = Persistence.createEntityManagerFactory("GestoreDB");
        EntityManager entityManager = managerPersistence.createEntityManager();
        
        //Do persistence
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        entityManager.persist(valueBeen);
        transaction.commit();
        
        //close managers
        entityManager.close();
        managerPersistence.close();
    }
}

I put the jdbc connector jar (Mysql connector 8.0.28) in .\glassfish-6.2.5\glassfish\domains\domain1\lib

As you deploy your app to glassfish container then "transaction-type" in persistence.xml i guess should be "JTA", and property "jakarta.persistence.jdbc.url" is invalid because you do not indicate any database / schema name after ":3306". Glassfish documentation provides instructions and examples how to setup global jdbc connections and those limited to only application scope.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM