4 Replies Latest reply on Jan 6, 2011 9:55 AM by kobiianko

    mixing EJB2.1 with EJB3, datasource is down

    kobiianko

      Hi All,

      I've got an EJB2.1 project on JBOSS AS 5.1.

      I'd like to add new ejb3 (session and entity bean) to the project.

       

      I've created a simple session bean that persist a new entity (row) to the DB, and packed it in a JAR file (with persistence.xml in meta-inf directory).

      this works fne.

       

      now, I want it to be a part of my EJB2.1 project so I've done:

      1. packed the new jar in the project ear file

      2. updated the aplication.xml with the new ejb-module

       

      when I run the server, I can access the session bean from the client but the entity manager is NULL,

      and when I run in the browser "http://localhost:8080/admin-console" I can see the my datasource is marked as "DOWN"

       

       

      my 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="BoardDB">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:/Kobi2DS</jta-data-source>
        <properties>
           <property name="hibernate.hbm2ddl.auto"
                    value="update"/> <!-- create-drop/update -->
          <property name="hibernate.dialect"
                    value="org.hibernate.dialect.SybaseDialect"/> 
        </properties>
        </persistence-unit> 
      </persistence>

       

      my session bean:

       

      @Stateless
      public class BoardManagerBean implements BoardManagerRemote {

       

         @PersistenceContext(unitName = "BoardDB")
          EntityManager entityManager;
         
         
          @Override
          public Board getBoardByID(int boardID) {
              return entityManager.find(Board.class, boardID);
             
             
          }

       


          @Override
          public void echo(String str) {
              LogUtils.info(this.getClass(), str);
              Board board = new Board();
              board.setId(1);
              board.setName("koko");
              board.setSubject("sdcasasc");
              entityManager.persist(board);
             
          }

        • 1. Re: mixing EJB2.1 with EJB3, datasource is down
          jaikiran

          What does the *-ds.xml file look like? And how are you deploying it?

          • 2. Re: mixing EJB2.1 with EJB3, datasource is down
            kobiianko

            the DS file works fine if I use only the EJB2.1 project or use only the new EJB3 JAR in the deploy directory.

             

            ds file:

             

             

            <?xml version="1.0" encoding="UTF-8"?>

             

            <!-- The Hypersonic embedded database JCA connection factory config
            $Id: sybase-ds.xml,v 1.2 2010/05/26 12:18:11 kianko Exp $ -->

             


            <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>Kobi2DS</jndi-name>

             

                  <!-- for tcp connection, allowing other processes to use the hsqldb
                  database. This requires the org.jboss.jdbc.HypersonicDatabase mbean.
                  <connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url>
            -->
                  <!-- for totally in-memory db, not saved when jboss stops.
                  The org.jboss.jdbc.HypersonicDatabase mbean is unnecessary
                  <connection-url>jdbc:hsqldb:.</connection-url>
            -->
                  <!-- for in-process db with file store, saved when jboss stops. The
                  org.jboss.jdbc.HypersonicDatabase is unnecessary
            -->
                  <connection-url>jdbc:sybase:Tds:10.90.90.81:50078?ServiceName=kobi_cfg&amp;autocommit=FALSE&amp;</connection-url>

             

                  <!-- The driver class -->
                  <driver-class>com.sybase.jdbc3.jdbc.SybDataSource</driver-class>
                  <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                  <!-- The login and password -->
                  <user-name>user</user-name>
                  <password>pass</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>100</min-pool-size>

             

                  <!-- The maximum connections in a pool/sub-pool -->
                  <max-pool-size>200</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>5</idle-timeout-minutes>

             

                  <!-- sql to call when connection is created -->
                  <new-connection-sql>SELECT 1</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>true</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>
                  -->

             

                  <!-- Add this depends tag if you are using the tcp connection url
                  <depends>jboss:service=Hypersonic</depends>
            -->
               </local-tx-datasource>

             

               <!-- This mbean should be used only when using tcp connections. Uncomment
               when the tcp based connection-url is used. -->

             

            </datasources>

             

             

             

             

             

            10x, Kobi

            • 3. Re: mixing EJB2.1 with EJB3, datasource is down
              kobiianko

              if any of you mixed ejb2.1 with ejb3 on the same jar or same ear, please list the actions you have done for this, and I'll try to understand what I did wrong

              • 4. Re: mixing EJB2.1 with EJB3, datasource is down
                kobiianko

                I had the ejb3-persistence.jar in my ear file, removed it and it works