好的家伙我知道它看起来很愚蠢,因为已经提出了很多问题,但是没有一个能解决我配置mysql数据源的问题。我使用的是“Eclipse IDE”,“MySql Database”和“java Language”。我已将context.xml配置为
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/world" auth="Container" type="javax.sql.DataSource"
maxActive="50" maxIdle="30" maxWait="10000"
username="root" password="admin"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/world"/>
</Context>
然后将web.xml作为
<resource-ref>
<description>MySQL Datasource example</description>
<res-ref-name>jdbc/world</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在连接文件名WorldCityBean.java中,我试过两种方式,即
通过注释类并使用InitialContext但它根本不起作用。
public class WorldCityBean {
@Resource(name="world")
private DataSource ds;
private Connection conn;
public void open() throws SQLException, NamingException{
if(conn !=null)
{
return;
}
// Context ic = new InitialContext();
// Context subcontext = (Context) ic.lookup("java:comp/env");
// DataSource ds = (DataSource) subcontext.lookup("jdbc/world");
conn = ds.getConnection();
}
}
并给出这个例外
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: An error occurred performing resource injection on managed bean city
root cause
com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean city
root cause
com.sun.faces.spi.InjectionProviderException: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Res-Ref-Env-Property: world@javax.sql.DataSource@ resolved as: jndi: world@res principal: null@mail: null
No Runtime properties
Database Vendor : null
Create Tables at Deploy : false
Delete Tables at Undeploy : false into class com.corejsf.WorldCityBean
root cause
com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Res-Ref-Env-Property: world@javax.sql.DataSource@ resolved as: jndi: world@res principal: null@mail: null
No Runtime properties
Database Vendor : null
Create Tables at Deploy : false
Delete Tables at Undeploy : false into class com.corejsf.WorldCityBean
root cause
javax.naming.NamingException: Lookup failed for 'java:comp/env/world' in SerialContext [Root exception is javax.naming.NamingException: Lookup failed for 'world' in SerialContext [Root exception is javax.naming.NameNotFoundException: world not found]]
root cause
javax.naming.NamingException: Lookup failed for 'world' in SerialContext [Root exception is javax.naming.NameNotFoundException: world not found]
root cause
javax.naming.NameNotFoundException: world not found
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.0.1 logs.
--------------------------------------------------------------------------------
GlassFish Server Open Source Edition 3.0.1
答案 0 :(得分:1)
使用context.xml不是在Glassfish中配置JDBC资源的标准方法。虽然有办法通过部署描述符(Stackoverflow link)配置它,但我建议使用Web控制台。登录,转到参考资料并定义连接池和JDBC资源(link for Glassfish 3.0.1)。如果这样做,您可以测试/ ping您的SQL连接并检查所有参数是否正确。当您确定已指定正确的参数时,通常注射就足够了,但要小心 - 您必须指定:
@Resource(name="jdbc/world")
而不是
@Resource(name="world")