Hi everyone,
I have a question on whether the warning below is intentional:
When I start prelude I get the following warning:
WARNING: This web app [/C:/Netbeans/JPAWeb_V3/build/web/] has no
resource reference by the name of [jdbc/mysqlTestDB]
I have this resource defined in context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/JPAWeb_V3">
<Resource
name="jdbc/mysqlTestDB"
auth="Container"
type="javax.sql.DataSource"/>
</Context>
The sun-web.xml contains:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application
Server 9.0 Servlet 2.5//EN"
"
http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd">
<sun-web-app error-url="">
<context-root>/JPAWeb_V3</context-root>
<resource-ref>
<res-ref-name>jdbc/mysqlTestDB</res-ref-name>
<jndi-name>jdbc/mysqlTestDB</jndi-name>
</resource-ref>
<class-loader delegate="true"/>
<jsp-config>
<property name="classdebuginfo" value="true">
<description>Enable debug info compilation in the generated
servlet class</description>
</property>
<property name="mappedfile" value="true">
<description>Maintain a one-to-one correspondence between static
content and the generated servlet class' java code</description>
</property>
</jsp-config>
</sun-web-app>
There is no entry in web.xml for jdbc/mysqlTestDB and the app works fine.
Now if I do not use the context.xml and instead add the entry to web.xml
I do not see the warning when I reboot (which makes sense):
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="
http://java.sun.com/xml/ns/javaee"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>ContactServlet</servlet-name>
<servlet-class>demo.servlet.ContactServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ContactServlet</servlet-name>
<url-pattern>/ContactServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ContactServlet</servlet-name>
<url-pattern>/displayContacts</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ContactServlet</servlet-name>
<url-pattern>/addContact</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<resource-ref>
<res-ref-name>jdbc/mysqlTestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
I assume the warning is being generated because the context.xml is not
being taken into consideration?
Also another interesting scenario is if i do not put the resource-ref in
sun-web.xml of
<resource-ref>
<res-ref-name>jdbc/mysqlTestDB</res-ref-name>
<jndi-name>jdbc/mysqlTestDB</jndi-name>
</resource-ref>
I get the following error (which makes sense) using JSTL tag of
<sql:query var="resultSet" dataSource="jdbc/mysqlTestDB" >
select * from contacts
</sql:query>
javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver found for jdbc/mysqlTestDB"
I am going to log an issue as the error can be clearer. However the
interesting part is that my app which uses Eclipselink has no issues
using the same JNDI resource:
<persistence-unit name="JPAContactJNDIPU"
transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>jdbc/mysqlTestDB</non-jta-data-source>
<class>demo.entity.Contact</class>
<properties>
<property name="eclipselink.logging.level" value="FINEST"/>
<property name="eclipselink.ddl-generation"
value="create-tables"/>
</properties>
</persistence-unit>
Regards
Lance