Java、JPA、Glassfish、无效资源:jdbc/\uuuu default\uuuu pm
我使用Glassfish 3.1.2.2(构建5)、JPA、EclipseLink和MySQL 我通过Glassfish管理面板创建了MySQL池。从GF管理面板Ping到MySQL是可以的 我使用persistence.xml创建了应用程序:Java、JPA、Glassfish、无效资源:jdbc/\uuuu default\uuuu pm,java,jpa,deployment,glassfish,Java,Jpa,Deployment,Glassfish,我使用Glassfish 3.1.2.2(构建5)、JPA、EclipseLink和MySQL 我通过Glassfish管理面板创建了MySQL池。从GF管理面板Ping到MySQL是可以的 我使用persistence.xml创建了应用程序: <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> &
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="myUnit">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/myDBName"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="myPass"/>
<property name="javax.persistence.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
GF日志中的Stacktrace是巨大的。开始于
at com.sun.enterprise.connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:540)
at com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource(ConnectorRuntime.java:469)
at org.glassfish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63)
at org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71)
....
有人知道发生了什么事以及该怎么办吗?(与我的帖子相同,但现在有了适当的说明):
在使用安装程序配置持久性时,只需在persistence.xml中设置JDBC池的JNDI名称。可选,您可以设置目标数据库名称
<persistence-unit name="foo" transaction-type="JTA">
<jta-data-source>jdbc/mysql</jta-data-source>
<!--optional-->
<property name="eclipselink.target-database" value="MySQL4"/>
</persistence-unit>
jdbc/mysql
我还鼓励将“拖放并创建表”更改为“创建表”,这样您就不会丢失数据,这应该以以下方式提供EclipseLink的属性:
<property name="eclipselink.ddl-generation" value="create-tables"/>
而且也很方便
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
这将创建模式和sql脚本
有关更多信息,请访问:
或者,如果您只创建了一个MySQL连接池,那么还必须创建一个JDBC资源。这可以从用于创建连接池的上下文菜单上方的上下文菜单中创建
在我的Glassfish(我的JDBC资源)中,JDBC/\u默认使用连接池mysql\u lemon。我也遇到了同样的问题,我坚信这是由一些剩余缓存造成的 我刚做完
asadmin remove-domain domain1
asadmin create-domain domain1
firefox http://localhost:4848
现在不再将\uu pm
附加到JDBC资源中
如果这没有帮助,那么我假设您正在使用
@PersistenceContext
EntityManager em;
这应该被替换为
e、 g
在netbeans Instalation向导创建的服务器上运行/部署应用程序时,我也遇到了同样的问题 为了解决这个问题,我从官方网站下载了最后一个glassfish版本,并访问: Netbeans>“服务选项卡”>“服务器”>“添加服务器…”
请记住更改项目配置以使用新的glassfish服务器实例。nontx和pm是池的扩展。 文档: (其他地方和) 第一次\uu pm 从 允许非组件调用者 您可以允许非Java EE组件,例如servlet过滤器, 生命周期模块和第三方持久性管理器使用此 JDBC连接池。返回的连接将被自动删除 与从事务中获取的事务上下文一起登记 经理标准JavaEE组件也可以使用这样的池。 非组件调用方获得的连接不会自动恢复 容器在事务结束时关闭。他们一定是 由调用方显式关闭 可以通过以下方式启用非组件调用者: 选中管理控制台中“编辑连接池高级属性”页面上的“允许非组件调用者”框。这个 默认值为false。有关详细信息,请单击中的“帮助”按钮 管理控制台 在asadmin create jdbc连接池命令中指定----allownoncomponentcallers选项。有关更多信息,请参阅 Oracle GlassFish Server 3.0.1参考手册 在asadmin set命令中指定允许非组件调用者选项。例如: asadmin set domain1.resources.jdbc连接池.DerbyPool.allow非组件调用者=true 有关更多信息,请参阅Oracle GlassFish Server 3.0.1参考手册 创建带有_pm后缀的JDBC资源 和\uuu nontx 从 使用非事务性连接 您可以在以下任意位置指定非事务性数据库连接: 这些方法: 选中管理中新建JDBC连接池或编辑连接池页面上的非事务性连接框 安慰默认设置为未选中。有关详细信息,请单击 管理控制台中的“帮助”按钮 在asadmin create jdbc连接池命令中指定----nontransactionalconnections选项。有关更多信息,请参阅 Oracle GlassFish Server 3.0.1参考手册 在asadmin set命令中指定非事务性连接选项。例如: asadmin set domain1.resources.jdbc连接池.DerbyPool.non-transactional connections=true 有关更多信息,请参阅Oracle GlassFish Server 3.0.1参考手册 在GlassFish服务器中使用DataSource实现,该服务器提供GetNonExconnection方法。此方法检索JDBC 不在任何事务范围内的连接。有两个 变体 public java.sql.Connection getNonTxConnection()抛出java.sql.SQLException public java.sql.Connection getNonTxConnection(字符串用户,字符串密码)抛出java.sql.SQLException 创建一个JNDI名称以uux结尾的资源。这将强制使用此资源查找的所有连接为非连接 事务性的
我遇到了这个问题。我在管理控制台中设置了jdbc连接池和jdbc资源。但我没有在persistence.xml中设置数据源
<persistence-unit name="OnlinePrintService-warPU" transaction-type="JTA">
<jta-data-source>jdbc/your-name</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
jdbc/您的名字
假的
我也有同样的问题
解决方案(针对仍存在此问题的任何人):
services>server>glassfish
,然后右键单击(在glassfish服务器中)并选择查看域管理控制台,将显示一个网页
转到左侧,选择resources>JDBC
和JDBC连接池
单击new
,添加新的连接池,键入池的名称
接下来,选择javax.sql.ConnectionPoolDataSource
和datadriver
(在我的例子中是MySQL)并单击Next
之后,你应该输入所有需要的信息
em=Persistence.createEntityManagerFactory("DefaultPU(PUT_PERSISTANCE_UNIT_NAME_HERE").createEntityManager();
String ret="Hello " + txt + ", "+ em.createNamedQuery("Usertable.findAll").getResultList().get(0).toString() +" !" ;
em.close();
<persistence-unit name="OnlinePrintService-warPU" transaction-type="JTA">
<jta-data-source>jdbc/your-name</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
@Singleton
@Startup
@DataSourceDefinition(name="java:global/jdbc/myDataSource",
className="com.microsoft.sqlserver.jdbc.SQLServerDataSource",
url="jdbc:sqlserver://127.0.0.1:1433;databaseName=myDB",
user="myuser",
password="mypassword"
)
public class DataSourceBean {
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="myUnit" transaction-type="JTA">
<jta-data-source>java:global/jdbc/myDataSource</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>