gpt4 book ai didi

mysql - Eclipse Virgo 注入(inject)的 JPA EntityManager 不连接到数据库

转载 作者:行者123 更新时间:2023-11-29 00:13:08 26 4
gpt4 key购买 nike

我正在使用 Eclipse Virgo,我正在尝试让注释驱动的事务管理运行,但我一直遇到同样的问题。

问题是注入(inject)了 EntityManager 而不是 null。但是由于连接错误,任何查询都会失败。

我根据 GreenPages 使用了设置.

我配置了以下 EntityManageFactory 和 TransactionManager

<bean id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="ShiftManagement" />
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform"
value="org.eclipse.persistence.platform.database.MySQLPlatform" />
</bean>
</property>
<property name="packagesToScan" value="....." />
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" />
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emf" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

我还配置了以下数据源。问题是,我都试过了,但是当我尝试使用查询连接到数据库时,它不起作用。现在,我 100% 确定凭据没问题,数据库已启动等等

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/shiftmanagement" />
<property name="username" value="root" />
<property name="password" value="rootroot" />
<property name="initialSize" value="5" />
<property name="maxActive" value="20" />
<property name="maxIdle" value="5" />
<!-- TRANSACTION_READ_COMMITTED = 2 -->
<property name="defaultTransactionIsolation" value="2" />
<!-- TRANSACTION_READ_UNCOMMITTED = 1 -->
<!-- <property name="defaultTransactionIsolation" value="1" /> -->
<property name="validationQuery" value="select 1 from dual" />
<property name="testOnBorrow" value="true" />
</bean>

使用commons-dbcp时出错

Caused by: java.lang.UnsupportedOperationException: Not supported by BasicDataSource
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:901)
at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:132)
at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)

使用 Spring 数据源

<bean id="dataSource2"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/shiftmanagement" />
<property name="username" value="root" />
<property name="password" value="rootroot" />
</bean>



Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/shiftmanagement
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:154)

好的,那么我尝试了有前途的 tomcat-jdbc 库

<bean id="dataSource3" class="org.apache.tomcat.jdbc.pool.DataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/shiftmanagement" />
<property name="username" value="root" />
<property name="password" value="rootroot" />
<property name="initialSize" value="5" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
<property name="minIdle" value="2" />
</bean>

然后弹出下面类似的异常

Caused by: org.eclipse.virgo.kernel.osgi.framework.ExtendedClassNotFoundException: com.mysql.jdbc.Driver in KernelBundleClassLoader: [bundle=org.apache.tomcat.jdbc_1.1.0.1]
at org.eclipse.virgo.kernel.userregion.internal.equinox.KernelBundleClassLoader.loadClass(KernelBundleClassLoader.java:139)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)

我正在使用以下 persistence.xml

<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ShiftManagement" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
....
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<!-- Database options -->
<property name="eclipselink.target-database" value="MySQL"/>
<property name="eclipselink.weaving" value="false"/>
<property name="eclipselink.orm.throw.exceptions" value="true"/>
<!--
<property name="eclipselink.jdbc.read-connections.min" value="1"/>
<property name="eclipselink.jdbc.write-connections.min" value="1"/>
-->

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/shiftmanagement"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="rootroot"/>

<!-- Logging -->
<property name="eclipselink.logging.level" value="FINE" />
<property name="eclipselink.logging.timestamp" value="false" />
<property name="eclipselink.logging.session" value="false" />
<property name="eclipselink.logging.thread" value="false" />
</properties>

</persistence-unit>

我使用 EntityManager 注入(inject)

@PersistenceContext
private EntityManager em;

我阅读了一些从 persistence.xml 中删除用户名和密码的帖子,但随后系统提示说 user = [null]。

非常感谢任何帮助。

注意:mysqld 正在运行,我可以使用 mysql -uroot -prootroot 进行连接

最佳答案

好的,所以我使用了第四个数据源,我所有的问题都消失了:-)

<bean id="dataSource"
class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/shiftmanagement" />
<property name="username" value="${javax.persistence.jdbc.user}" />
<property name="password" value="${javax.persistence.jdbc.password}" />
</bean>

关于mysql - Eclipse Virgo 注入(inject)的 JPA EntityManager 不连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24014673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com