I have an EAR application, containing an EJB and a WAR.
In the EJB I am using JPA to connect to the database, and then the WAR deals with the REST endpoints and calls methods defined in the EJB:
e.g - EJB Stateless Bean:
@PersistenceContext
private EntityManager em;
and EJB persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.0">
<persistence-unit name="WOTISEJB">
<jta-data-source>java:comp/env/jdbc/appds</jta-data-source>
<class>com...</class>
</persistence-unit>
</persistence>
Web class:
@Path("/getByType")
@ManagedBean
public class GetByTypeResource
{
@EJB
EjbDao ejbDao;
@GET
@Produces(MediaType.APPLICATION_JSON)
public String getData(@Context HttpServletRequest request, @PathParam("type") Type type)
{
JsonObject response = ejbDao.getByType(type);
StringWriter sw = new StringWriter();
try (JsonWriter jw = Json.createWriter(sw)) {
jw.write(response);
}
String retVal = sw.toString();
return retVal;
}
}
I presume I don't need anything in my web.xml as all of the EntityManager definitions are in the EJB code (and just called from the WEB application) - but just in case it's relevant:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>appname</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.app.ApplicationConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appname</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<display-name>App Name</display-name>
</web-app>
When I install the application onto Websphere 9.0.5, I was expecting to be prompted as part of the installation to map the jndi name java:comp/env/jdbc/appds
to the JDBC datasource I have already created in the console; however it is just using the default datasource in WAS instead.
What configuration elements am I missing to get the installation process to prompt me for the DSN mapping? In order words I don't want to put the jbdc name directly in the config, but have an indirect lookup which is configured on deploy.
Additionally, am I missing any configuration in my web.xml so that it also knows about the DSN when it calls the methods on the EJB classes, or will that happen automatically?