DeploymentException при развертывании удаленного EJB - PullRequest
1 голос
/ 10 февраля 2011

Я получаю это исключение при запуске динамического веб-проекта

Error installing to Real: name=vfsfile:/C:/jboss-5.0.1.GA_1/jboss-5.0.1.GA/server/default/deploy/BookMartEAR.ear/ state=PreReal mode=Manual requiredState=Real
org.jboss.deployers.spi.DeploymentException: Error deploying BookMartEJB.jar: Container jboss.j2ee:ear=BookMartEAR.ear,jar=BookMartEJB.jar,name=BookMartBean,service=EJB3 failed to resolve persistence unit BookMartEjb
.
.
.
Caused by: java.lang.IllegalArgumentException: Can't find a persistence unit named 'BookMartEjb' in AbstractVFSDeploymentContext@26167457{vfsfile:/C:/jboss-5.0.1.GA_1/jboss-5.0.1.GA/server/default/deploy/BookMartEAR.ear/BookMartEJB.jar/}

Названия EJB, EAR и Web-проектов указаны выше.

Файл persistence.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<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="BookMartEJB" transaction-type="JTA">
        <jta-data-source>MySqlDS</jta-data-source>
        <class>com.misys.book.Book</class>
        <class>com.misys.book.Sale</class>
        <class>com.misys.book.Saleitem</class>
        <class>com.misys.book.Customer</class>
        <class>com.misys.book.User</class>
    </persistence-unit>
</persistence>

есть ли проблемы с этим XML-файлом? Я использую сервер JBoss AS и базу данных MySql.

Пожалуйста, подскажите, где я мог ошибиться. Также сообщите, требуется ли какая-либо другая информация.

1 Ответ

2 голосов
/ 10 февраля 2011

Каково местоположение persistence.xml в вашем EAR? Он должен находиться внутри папки META-INF вашего EJB-модуля. Если его там нет (например, он находится в корне EAR или в веб-модуле), то он действительно не может быть найден.

Кроме того, если в конечном итоге будет найден блок персистентности, вы можете столкнуться со следующей проблемой. Ваш источник данных установлен на MySqlDS, но, скорее всего, это должно быть java:/MySqlDS, поскольку JBoss AS будет привязывать источники данных к этому месту.

В дальнейшем не имеет отношения к вашему вопросу, но вам, вероятно, не нужно перечислять свои классы явно. Если вы не хотите, чтобы выполнялось сканирование во время выполнения, но вам также необходимо включить элемент <exclude-unlisted-classes/>. (о, и последнее, что JTA уже используется по умолчанию, так что вы также можете опустить транзакцию type-type = "JTA")

...