java - 如何为 TomEE+ 设置数据源

标签 java netbeans ejb mariadb apache-tomee

我一直在尝试弄清楚如何设置 NetBeans (v8.1) 和 TomEE+ (v1.7.4) 以使用 EJB 访问数据。

我一直在关注The NetBeans E-commerce Tutorial (Affable Bean 应用程序),我被困在 Accessing Data with EJBs 。按照教程所述进行了所有编辑,但在运行时出现错误。

AffableBean 日志:

build-impl.xml:1045: The module has not been deployed.
See the server log for details.

Apache TomEE+ 1.7.4 日志:

Jun 15, 2016 8:26:14 AM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet ControllerServlet as unavailable
Jun 15, 2016 8:26:14 AM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet [ControllerServlet] in web application [/AffableBean] threw load() exception
javax.naming.NameNotFoundException: Name [controller.ControllerServlet/categoryFacade] is not bound in this Context. Unable to find [controller.ControllerServlet].

Apache TomEE+ 1.7.4:

INFO: Configuring PersistenceUnit(name=AffableBeanPU)
Jun 15, 2016 8:26:11 AM org.apache.openejb.config.AutoConfig deploy
WARNING: Found matching datasource: web/connpool but this one is not a JTA datasource
Jun 15, 2016 8:26:11 AM org.apache.openejb.config.AutoConfig deploy
WARNING: Found matching datasource: web/connpool but this one is not a JTA datasource
Jun 15, 2016 8:26:11 AM org.apache.tomee.catalina.TomcatWebAppBuilder startInternal
SEVERE: Unable to deploy collapsed ear in war StandardEngine[Catalina].StandardHost[localhost].StandardContext[/AffableBean]
org.apache.openejb.OpenEJBException: PeristenceUnit AffableBeanPU <jta-data-source> points to a non jta managed Resource.  Update Resource "connpool" to "JtaManaged=true", use a different Resource, or delete the <jta-data-source> element and a default will be supplied if possible.

我的 persistence.xml 代码按照教程,即:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
  <persistence-unit name="AffableBeanPU" transaction-type="JTA">
    <jta-data-source>connpool</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
        <property name="eclipselink.logging.level" value="FINEST"/>
  </persistence-unit>
</persistence>

所以我的问题是,如何在 IDE 中设置 DataSource/EJB,以便它可以在我的服务器上运行?不管 Netbeans 电子商务教程如何。

已编辑:卡在Accessing Data with EJBs上.

最佳答案

您可以将数据源定义为全局数据源(适用于所有 Web 应用程序),在 $TOMEE/conf/tomee.xml 文件中定义,或者在 $WEBAPP/WEB-INF/resources.xml 文件中特定于您的 Web 应用程序,如下所示

persistence.xml 位于 webapp 的 src/META-INF 目录

<?xml version="1.0" encoding="UTF-8"?>
<persistence
    version="2.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_2_0.xsd">
    <persistence-unit name="xyz">
        <jta-data-source>xyz</jta-data-source>
        <properties>
            <property
                name="openjpa.jdbc.DBDictionary"
                value="org.apache.openjpa.jdbc.sql.OracleDictionary" />
            <property
                name="openjpa.jdbc.DBDictionary"
                value="oracle(maxEmbeddedBlobSize=-1,maxEmbeddedClobSize=-1)" />
            <property
                name="openjpa.jdbc.SynchronizeMappings"
                value="buildSchema(ForeignKeys=true)" />
        </properties>
    </persistence-unit>
</persistence>

数据源定义在$WEBAPP/WEB-INF/resource.xml

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
    <Resource
        id="xyz"
        type="DataSource">
        JdbcDriver oracle.jdbc.OracleDriver
        JdbcUrl jdbc:oracle:thin:@localhost:1521:XE
        UserName myuser
        Password mypass
        JtaManaged true
        TestOnBorrow false
        MaxActive 20        
    </Resource>    
</tomee>

参见http://tomee.apache.org/datasource-config.htmlhttp://tomee.apache.org/common-datasource-configurations.html

关于java - 如何为 TomEE+ 设置数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37836303/

相关文章:

java - 在 Web pojo 类中使用 ejb session 时获取 null

java - Pollard Rho 算法陷入循环

java - 包含 if 语句的 for 循环不再循环

netbeans - 在 NetBeans 中启动 JavaME 模拟器

php - Codeigniter Netbeans 使用 MysqlObjects 自动完成

java - 返回本地或远程的决定

java - 当父类和子类都被注释时,应用程序异常如何工作?

java - 使用空布局在 JTextpane 中插入 Jtable

java - Jboss 5、类加载器和多个类实例

java - 找出 GCP IAM 中服务帐户 key 的最后一个 Activity