2011-06-09 24 views
0

我創建了3個類:第一個用於連接(Connectionx),第二個用於填充UI作爲複選框,selectonemenu(BeanTools),第三個用於我的「操作」(NumberOfIssue)。 1)我想連接數據庫的問題只有一次,我已經完成了類Connectionx中的連接,並且我想在所有Beans上使用相同的連接。但是我不知道我是如何嘗試添加proprity連接到託管bean,但我不知道這是很好的解決方案,如果是它這麼想的,我:(工作,也有我的類新:如何在我的所有豆子中使用一個連接?

**1/Class Connectionx** 
public class Connectionx implements java.io.Serializable{ 
public Connection cx=null; 
public Statement st; 
public Connectionx() {} 
public Connection Connx() 
{ 
System.out.println("enregister le driver"); 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 

    } 
    catch(Exception ex) 
      { 
      System.err.println("Erreur lors du chargement du    driver"+ex.getMessage()); 

      } 
    try { 
     /** Connection */ 
     cx = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/jiradb","root","root"); 

     System.out.println("conexion reussite "); 

      } 
      catch(SQLException ex) 
      { 
      System. err. println("Erreur lors de la connexion à la  baseeeeee"); 

      } 
    return cx; 
} 
public void deConnx(Connection cx) throws SQLException{ 

cx.close(); 
System. err. println("deconnection"); 
} 
} 

2 /類BeanTools

public class BeanTools implements java.io.Serializable { 

/***************selectonemenu***********************/ 
private List<SelectItem> mesElements; 
private String maValeur; 
public String[] favNumber1 ; //checkbox 
public PreparedStatement st; 
public Connectionx cx = new Connectionx(); 
public Connection con = (Connection)cx.Connx(); 

/**************checkbox***************/ 
    public BeanTools() { 
    } 

    public String getMaValeur() { 
    return maValeur; 
    } 

    public void setMaValeur(String maValeur) { 
    this.maValeur = maValeur; 
    } 

    public String[] getFavNumber1() { 
    return favNumber1; 
    } 

    public void setFavNumber1(String[] favNumber1) { 
    this.favNumber1 = favNumber1; 
    } 

    public String getFavNumber1InString() { 

    return Arrays.toString(favNumber1); 
} 


    public String getFavNumber1onebyone() 
    { String Val =null; 
    for(int i=0;i<favNumber1.length;i++) 
    { 
    if (favNumber1[i].equals("1")) 
     System.out.println("priority checked"); 
    if (favNumber1[i].equals("2")) 
     System.out.println("project checked"); 
    if (favNumber1[i].equals("3")) 
    System.out.println("Month checked"); 

    } 

    return Val; 
    } 


    public Iterable<String> remplireItem() throws ClassNotFoundException, SQLException 
    { 

    String sql; 
    sql ="select issuestatus.pname from issuestatus;"; 
    System.out.println("sql"); 
    st=(PreparedStatement) con.prepareStatement(sql); 
    ResultSet rs1 = st.executeQuery();System.out.println("execute"); 

    String val; 
    ArrayList<String> list = new ArrayList<String>(); 
    while(rs1.next()) 
    { 
     val= rs1.getString("pname"); 
     System.out.println(val); 
     list.add(nbb); 
     System.out.println("list"+list.toString()); 
    } 
    return list; 
    } 


    public List<SelectItem> getMesElements() throws SQLException,ClassNotFoundException { 

    if (mesElements == null) { 
    mesElements = new ArrayList<SelectItem>(); 
    for (String val : remplireItem()) { 
    mesElements.add(new SelectItem(val)); 
    } 
    } 
    return mesElements; 
    } 

3 /類NumberOfIssue

public class NumberOfIssue implements java.io.Serializable{ 

public String numberIssue; 
private String maValeur; 
public Connectionx cx = new Connectionx(); 
public Connection con = (Connection)cx.Connx(); 
public PreparedStatement st; 


public NumberOfIssue() { 
} 


    public String getMaValeur() { 
    return maValeur; 
} 

public void setMaValeur(String maValeur) { 
    this.maValeur = maValeur; 
} 

public String getNumberIssue() throws SQLException 
{ 
//Connection con 
BeanTools beTools=new BeanTools(); 
System.out.println("beTools.maValeur"); 
String sql; 
sql ="select count(OS_CURRENTSTEP.entry_id) as nbissue  ,project.pname,priority.pname,issuetype.pname from OS_CURRENTSTEP,jiraissue,issuestatus,issuetype,project,resolution,customfield ,customfieldvalue,priority where OS_CURRENTSTEP.entry_id = jiraissue.id and jiraissue.priority=priority.id and jiraissue.issuestatus=issuestatus.id and issuestatus.pname="+maValeur+" and jiraissue.issuetype=issuetype.id and jiraissue.project=project.id and resolution.id=jiraissue.resolution and resolution.pname='Fixed' Group By project.pname,priority.pname,issuetype.pname;"; 

st= (PreparedStatement) con.prepareStatement(sql); 

ResultSet rs1 = st.executeQuery(); 

while(rs1.next()) 
{ 
numberIssue= rs1.getString(1); 
String strissue2= rs1.getString(2); 
String strissue3= rs1.getString(3); 
System.out.println("nb issue "+numberIssue.toString()+" ||project  "+strissue2.toString()+" ||proiority "+strissue3.toString()); 

} 
return numberIssue; 
} 

}

4/Managed Bean的

<managed-bean> 
<managed-bean-name>Connectionx</managed-bean-name> 
<managed-bean-class>KPIs.Connectionx</managed-bean-class> 
<managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 

<managed-bean> 
<managed-bean-name>BeanTools</managed-bean-name> 
<managed-bean-class>KPIs.BeanTools</managed-bean-class> 
<managed-bean-scope>session</managed-bean-scope> 
<managed-property> 
<property-name>cx</property-name> 
<property-class>java.sql.Connection</property-class> 
<value>#{Connectionx.cx}</value> 
</managed-property> 
</managed-bean> 

<managed-bean> 
<managed-bean-name>NumberOfIssue</managed-bean-name> 
<managed-bean-class>KPIs.NumberOfIssue</managed-bean-class> 
<managed-bean-scope>session</managed-bean-scope> 
<managed-property> 
<property-name>maValeur</property-name> 
<property-class>java.lang.String</property-class> 
<value>#{BeanTools.maValeur}</value> 
</managed-property> 
<managed-property> 
<property-name>cx</property-name> 
<property-class>java.sql.Connection</property-class> 
<value>#{Connectionx.cx}</value> 
</managed-property> 
</managed-bean> 

<navigation-rule> 
<from-view-id>/welcomeJSF.jsp</from-view-id> 
<navigation-case> 
<from-outcome>submit</from-outcome> 
<to-view-id>/Result.jsp</to-view-id> 
</navigation-case> 
</navigation-rule> 
</faces-config> 

堆棧跟蹤

com.sun.faces.mgbean.ManagedBeanCreationException: Impossible de créer le bean géré BeanTools. Les problèmes suivants ont été détectés : 
- La propriété cx du bean géré BeanTools nexiste pas. 
at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:265) 
at          com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244) 
at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116) 
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) 
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203) 
at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:71) 
at org.apache.el.parser.AstValue.getValue(AstValue.java:147) 
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) 
at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:106) 
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:193) 
at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:181) 
at javax.faces.component.UIOutput.getValue(UIOutput.java:169) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.getCurrentSelectedValues(MenuRenderer.java:648) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:749) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:844) 
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:298) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:883) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1659) 
at javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:853) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1652) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1655) 
at com.sun.faces.application.view.JspViewHandlingStrategy.doRenderView(JspViewHandlingStrategy.java:431) 
at com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:233) 
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 

回答

2

使用像commons-dbcp這樣的連接池。

通過這種代碼

"select count(OS_CURRENTSTEP.entry_id) as nbissue [.. snip ...] 
and issuestatus.pname="+maValeur+" and jiraissue.issuetype=issuetype.id 
[... snip ...] and resolution.pname='Fixed' Group By  
project.pname,priority.pname,issuetype.pname;"; 

是容易受到SQL注入,你應該有一個參數替換maValeur變量的方式(見http://en.wikipedia.org/wiki/SQL_injection#Parameterized_statements

+0

我試過sql =「select count(OS_CURRENTSTEP.entry_id)作爲nbissue,project.pname,priority .pname,從OS_CURRENTSTEP,jiraissue,issuestatus,問題類型,項目,分辨率的CustomField,customfieldvalue,issuetype.pname優先這裏OS_CURRENTSTEP.entry_id = jiraissue.id和jiraissue.priority = priority.id和jiraissue.issuestatus = issuestatus.id和issuestatus .pname =?「 st.setNString(1,maValeur);調用'setNString'之前顯示java.lang.NullPointerException – rym 2011-06-09 13:02:21

+0

您有一個稱爲'prepareStatement':但這個錯誤出現(NULL)怎麼引起的?順便說一下,如果你想用更少的麻煩來使用JDBC,那麼Spring的JDBC幫助器類非常好。 – artbristol 2011-06-09 13:10:08

+0

謝謝我不知道Spring JDBC我會看看:) – rym 2011-06-09 16:12:45

0

更好的辦法是使用單獨的類不需要將它註冊到臉上下文。只需在上下文啓動時對其進行初始化並從任意bean中使用它

+0

喜@Jigar喬希,我怎麼能初始化上下文啓動類! – rym 2011-06-13 10:34:04

+0

使用'ContextListener',正如我在這裏回答:http://stackoverflow.com/questions/6120831/java-ee-enterprise-application-perform-some-action-on-deploy-startup – 2011-06-13 10:38:37

+0

我不使用EJB,只是簡單的javabean類,它會爲我工作? (我很抱歉的問題,但我是J2EE領域的新手) – rym 2011-06-13 10:56:38

相關問題