Peter, Thanks so much for the recommendation. I checked all 3 directories (all, default, and minimal) for the hsqldb-ds.xml file, and it exists in all 3. Whats more, they're the same. Below is the contents of that file.
| <?xml version="1.0" encoding="UTF-8"?> | | <!-- The Hypersonic embedded database JCA connection factory config --> | | <!-- $Id: hsqldb-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ --> | | <datasources> | <local-tx-datasource> | | <!-- The jndi name of the DataSource, it is prefixed with java:/ --> | <!-- Datasources are not available outside the virtual machine --> | <jndi-name>DefaultDS</jndi-name> | | <!-- For server mode db, allowing other processes to use hsqldb over tcp. | This requires the org.jboss.jdbc.HypersonicDatabase mbean. | <connection-url>jdbc:hsqldb:hsql://${jboss.bind.address}:1701</connection-url> | --> | <!-- For totally in-memory db, not saved when jboss stops. | The org.jboss.jdbc.HypersonicDatabase mbean is required for proper db shutdown | <connection-url>jdbc:hsqldb:.</connection-url> | --> | <!-- For in-process persistent db, saved when jboss stops. | The org.jboss.jdbc.HypersonicDatabase mbean is required for proper db shutdown | --> | <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB</connection-url> | | <!-- The driver class --> | <driver-class>org.hsqldb.jdbcDriver</driver-class> | | <!-- The login and password --> | <user-name>sa</user-name> | <password></password> | | <!--example of how to specify class that determines if exception means connection should be destroyed--> | <!--exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyExceptionSorter</exception-sorter-class-name--> | | <!-- this will be run before a managed connection is removed from the pool for use by a client--> | <!--<check-valid-connection-sql>select * from something</check-valid-connection-sql> --> | | <!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use --> | <min-pool-size>5</min-pool-size> | | <!-- The maximum connections in a pool/sub-pool --> | <max-pool-size>20</max-pool-size> | | <!-- The time before an unused connection is destroyed --> | <!-- NOTE: This is the check period. It will be destroyed somewhere between 1x and 2x this timeout after last use --> | <!-- TEMPORARY FIX! - Disable idle connection removal, HSQLDB has a problem with not reaping threads on closed connections --> | <idle-timeout-minutes>0</idle-timeout-minutes> | | <!-- sql to call when connection is created | <new-connection-sql>some arbitrary sql</new-connection-sql> | --> | | <!-- sql to call on an existing pooled connection when it is obtained from pool | <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql> | --> | | <!-- example of how to specify a class that determines a connection is valid before it is handed out from the pool | <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyValidConnectionChecker</valid-connection-checker-class-name> | --> | | <!-- Whether to check all statements are closed when the connection is returned to the pool, | this is a debugging feature that should be turned off in production --> | <track-statements/> | | <!-- Use the getConnection(user, pw) for logins | <application-managed-security/> | --> | | <!-- Use the security domain defined in conf/login-config.xml --> | <security-domain>HsqlDbRealm</security-domain> | | <!-- Use the security domain defined in conf/login-config.xml or the | getConnection(user, pw) for logins. The security domain takes precedence. | <security-domain-and-application>HsqlDbRealm</security-domain-and-application> | --> | | <!-- HSQL DB benefits from prepared statement caching --> | <prepared-statement-cache-size>32</prepared-statement-cache-size> | | <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml --> | <metadata> | <type-mapping>Hypersonic SQL</type-mapping> | </metadata> | | <!-- When using in-process (standalone) mode --> | <!--depends>jboss:service=Hypersonic,database=localDB</depends--> | <!-- Uncomment when using hsqldb in server mode--> | <depends>jboss:service=Hypersonic</depends> | </local-tx-datasource> | | <!-- Uncomment if you want hsqldb accessed over tcp (server mode) | <mbean code="org.jboss.jdbc.HypersonicDatabase" | name="jboss:service=Hypersonic"> | <attribute name="Port">1701</attribute> | <attribute name="BindAddress">${jboss.bind.address}</attribute> | <attribute name="Silent">true</attribute> | <attribute name="Database">default</attribute> | <attribute name="Trace">false</attribute> | <attribute name="No_system_exit">true</attribute> | </mbean> | --> | | <!-- For hsqldb accessed from jboss only, in-process (standalone) mode --> | <mbean code="org.jboss.jdbc.HypersonicDatabase" | name="jboss:service=Hypersonic,database=localDB"> | <attribute name="Database">localDB</attribute> | <attribute name="InProcessMode">true</attribute> | </mbean> | <!--mbean code="org.jboss.jdbc.HypersonicDatabase" | name="jboss:service=Hypersonic"> | <attribute name="Database">localDB</attribute> | <attribute name="InProcessMode">true</attribute> | </mbean--> | | </datasources> | I don't see a JmsXA reference anywhere. I checked the configuration of this file against the JBoss manual and it doesn't appear that anything is abnormal or out of the ordinary. Maybe you can see something I can't. Regarding the JNDI problem, i'm not sure why the KMLEnterpriseApp would not be bound. Below is the code for the session bean. | @Stateless | @Local ({GeoEntityFacadeLocal.class}) | @LocalBinding (jndiBinding="KMLEnterpriseApp-ejb/GeoEntityFacade") | public class GeoEntityFacade implements GeoEntityFacadeLocal { | | @PersistenceContext | private EntityManager em; | | /** Creates a new instance of GeoEntityFacade */ | public GeoEntityFacade() { | } | | public void create(GeoEntity geoEntity) { | em.persist(geoEntity); | } | | public void edit(GeoEntity geoEntity) { | em.merge(geoEntity); | } | | public void destroy(GeoEntity geoEntity) { | em.merge(geoEntity); | em.remove(geoEntity); | } | | public GeoEntity find(Object pk) { | return (GeoEntity) em.find(GeoEntity.class, pk); | } | | public List findAll() { | return em.createQuery("select object(o) from GeoEntity as o").getResultList(); | } | | } | And here is the servlet code that looks up the session bean and throws the exception. | public class GPSUpdateLink extends HttpServlet { | //@EJB(name="KMLEnterpriseApp/GeoEntityFacade/local") | private GeoEntityFacade geoEntityFacade; | | /** | * Set the GeoEntityFacde EJB | */ | @EJB(name="KMLEnterpriseApp/GeoEntityFacade/local") | void setGeoEntityFacade( GeoEntityFacade gef) | { | geoEntityFacade = gef; | } | | /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. | * @param request servlet request | * @param response servlet response | */ | protected void processRequest(HttpServletRequest request, HttpServletResponse response) | throws ServletException, IOException { | response.setContentType("text/html;charset=UTF-8"); | PrintWriter out = response.getWriter(); | out.println("<html>"); | out.println("<head>"); | out.println("<title>Servlet GPSUpdateLink</title>"); | out.println("</head>"); | out.println("<body>"); | out.println("<h1>Servlet GPSUpdateLink at " + request.getContextPath () + "</h1>"); | List geoPoint = lookupGeoEntityFacade().findAll(); // geoEntityFacade.findAll(); | for (Iterator it = geoPoint.iterator(); it.hasNext();) { | GeoEntity elem = (GeoEntity) it.next(); | out.println(" <b>"+elem.getName()+" </b><br />"); | out.println(elem.getData()+"<br /> "); | } | out.println("<a href='PostMessage'>Add new message</a>"); | | out.println("</body>"); | out.println("</html>"); | | out.close(); | } | | // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> | /** Handles the HTTP <code>GET</code> method. | * @param request servlet request | * @param response servlet response | */ | protected void doGet(HttpServletRequest request, HttpServletResponse response) | throws ServletException, IOException { | processRequest(request, response); | } | | /** Handles the HTTP <code>POST</code> method. | * @param request servlet request | * @param response servlet response | */ | protected void doPost(HttpServletRequest request, HttpServletResponse response) | throws ServletException, IOException { | processRequest(request, response); | } | | /** Returns a short description of the servlet. | */ | public String getServletInfo() { | return "Short description"; | } | // </editor-fold> | | private GeoEntityFacadeLocal lookupGeoEntityFacade() { | | try { | Context c = new InitialContext(); | return (GeoEntityFacadeLocal) c.lookup("java:comp/env/KMLEnterpriseApp/GeoEntityFacade");//java:comp/env/ejb/GeoEntityFacade"); | } | catch(NamingException ne) { | Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne); | throw new RuntimeException(ne); | } | } | } | You can see that I tried the explicit EJB annotation, but that doesn't seem to work.. I end up with a NullPointerException for the geoEntityFacade object. I tried everything in the JNDI lookup string from "KMLEnterpriseApp/GeoEntityFacade/local" to "java:comp/env/KMLEnterpriseApp/GeoEntityFacade" to "KMLEnterpriseApp/GeoEntityFacade". Either way, since the name doesn't exist in the lookup tree it won't be able to resolve it no matter what string I use. Correct? I should mention that it is a local stateless session bean as indicate explicitly by the @Local and @LocalBinding annotations. Thanks again for all the help. At this point any suggestions are greatly appreciated. - Nick View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4106571#4106571 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4106571 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user