1 Reply Latest reply on Feb 1, 2007 4:48 PM by fhh

    How to modify the messages example to connect to Oracle DB

    Chris C Newbie

      Hey guys another newbie question here. I'm trying to modify the messages example to connect to an Oracle database, then execute a simple query and display the results in a table. I'm having problems getting my configuration set up correctly. I added a -ds.xml file and edited the persistence.xml file to point to that datasource. Then I use the @PersistenceContext annotation to try to get a hold of that datasource and run the query. Problem I am having is:

      javax.faces.el.EvaluationException: Cannot get value for expression '#{messageList.rowCount==0}

      I assume because the query doesn't return anything. I'll post my config files and the code that executes the query. Am I on the right track with the configuration or just chasing my tail?

      Thanks
      Chris

      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_1_0.xsd"
       version="1.0">
       <persistence-unit name="userDatabase">
       <provider>org.hibernate.ejb.HibernatePersistence</provider>
       <jta-data-source>java:/XAOracleDS</jta-data-source>
       <properties>
       <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
       <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
       <property name="hibernate.connection.username" value="USER" />
       <property name="hibernate.connection.password" value="PASS" />
       <property name="hibernate.connection.datasource" value="java:/XAOracleDS"/>
       </properties>
       </persistence-unit>
      </persistence>
      



      oracle-xa-ds.xml
      <datasources>
       <xa-datasource>
       <jndi-name>XAOracleDS</jndi-name>
       <track-connection-by-tx>true</track-connection-by-tx>
       <isSameRM-override-value>false</isSameRM-override-value>
       <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
       <xa-datasource-property name="URL">
       jdbc:oracle:thin:@funeral:1521:DB
       </xa-datasource-property>
       <xa-datasource-property name="User">USER</xa-datasource-property>
       <xa-datasource-property name="Password">PASS</xa-datasource-property>
       <exception-sorter-class-name>
       org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
       </exception-sorter-class-name>
       <no-tx-separate-pools/>
       </xa-datasource>
      
       <mbean code="org.jboss.resource.adapter.jdbc.vendor.OracleXAExceptionFormatter"
      name="jboss.jca:service=OracleXAExceptionFormatter">
       <depends optional-attribute-name="TransactionManagerService">
       jboss:service=TransactionManager
       </depends>
       </mbean>
      </datasources>



      MessageManagerBean.java
      //$Id: MessageManagerBean.java,v 1.7 2006/11/19 21:01:33 gavin Exp $
      package org.jboss.seam.example.messagesTest;
      
      import static javax.persistence.PersistenceContextType.EXTENDED;
      import static org.jboss.seam.ScopeType.SESSION;
      
      import java.io.Serializable;
      import java.util.List;
      
      import javax.ejb.Remove;
      import javax.ejb.Stateful;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      
      import org.jboss.seam.annotations.Destroy;
      import org.jboss.seam.annotations.Factory;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Out;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Scope;
      import org.jboss.seam.annotations.datamodel.DataModel;
      import org.jboss.seam.annotations.datamodel.DataModelSelection;
      
      @Stateful
      @Scope(SESSION)
      @Name("messageManagerTest")
      public class MessageManagerBean implements Serializable, MessageManager
      {
      
       @DataModel
       private List<Message> messageList;
      
       @DataModelSelection
       @Out(required=false)
       private Message message;
      
       @PersistenceContext(type=EXTENDED)
       private EntityManager em;
      
       @Factory("messageList")
       public void findMessages()
       {
       messageList = em.createQuery("select unitid from iped_hd").getResultList();
       }
      
       @Remove @Destroy
       public void destroy() {}
      
      }



      messages.jsp
      <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
      <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
      <%@ taglib uri="http://jboss.com/products/seam/taglib" prefix="s" %>
      <html>
       <head>
       <title>Messages</title>
       </head>
       <body>
       <f:view>
       <h2>Message List</h2>
       <h:outputText value="No messages to display" rendered="#{messageList.rowCount==0}"/>
       <h:dataTable var="msg" value="#{messageList}" rendered="#{messageList.rowCount>0}">
       <h:column>
       <f:facet name="header">
       <h:outputText value="Title"/>
       </f:facet>
       <h:outputText value="#{msg.unitid}"/>
       </h:column>
       </h:dataTable>
       </f:view>
       </body>
      </html>


        • 1. Re: How to modify the messages example to connect to Oracle
          fhh Expert

          Hello!

          javax.faces.el.EvaluationException: Cannot get value for expression '#{messageList.rowCount==0}
          


          This is not the real exception but the one that came out of the application stack.

          I assume the real problem is that you are trying to execute a sql query through the entity manager instead of defning entity beans and using EJBQL.

          You can use bare SQL but then you have to inject a datasource into your session bean using the @Resource annotation.

          Regards

          Felix