Когда я использую приведенную ниже конфигурацию, я получаю исключение Name [jdbc/JAWSDB] is not bound in this Context. Unable to find [jdbc]
.Также я добавил все необходимые настройки, как показано ниже.
Постоянство выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
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_2_1.xsd">
<persistence-unit name="MyPresistance">
<jta-data-source>jdbc/JAWSDB</jta-data-source>
<class>com.hibernate.model.Message</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
</properties>
</persistence-unit>
</persistence>
Контроллер загружает менеджер сущностей, используя файл постоянства:
@GET
@Path("/{name}")
public Response sayHello(@PathParam("name") String msg) {
String output = "Hello, " + msg + "!";
Context initContext;
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyPresistance");
initContext = new InitialContext();
UserTransaction tx = (UserTransaction)initContext.lookup("java:comp/UserTransaction");
tx.begin();
EntityManager em = emf.createEntityManager();
Message message = new Message();
message.setText("Hello World!");
em.persist(message);
tx.commit();
// INSERT into MESSAGE (ID, TEXT) values (1, 'Hello World!')
em.close();
}
}
Context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- url: The JDBC connection url for connecting to your MySQL database. -->
<Resource name="jdbc/JAWSDB" auth="Container"
type="javax.sql.DataSource" maxTotal="100" maxIdle="30"
maxWaitMillis="10000" username="root"
password="root" driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test" />
<Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"/>
<Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
</Context>
Web.xml:
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!-- Define ServletContainer of Jersey -->
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!-- Define the ResourceConfig class -->
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.hibernate.app.Application</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map all the URLs to the Jersey ServletContainer -->
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/JAWSDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
Подскажите, пожалуйста, что мне здесь не хватает.Я чувствую, что при загрузке пользовательской транзакции из ресурса контекста не внедряется ресурс базы данных, поскольку он хранится как отдельный ресурс в контексте.
Добавлена трассировка стека исключений.
javax.naming.NameNotFoundException: Name [jdbc/JAWSDB] is not bound in this Context. Unable to find [jdbc].
org.apache.naming.NamingContext.lookup(NamingContext.java:817)
org.apache.naming.NamingContext.lookup(NamingContext.java:159)
org.apache.naming.SelectorContext.lookup(SelectorContext.java:140)
javax.naming.InitialContext.lookup(Unknown Source)
org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:97)
org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:98)
org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)