Hi,

I have a question concerning the Cassandra DataStax Java Driver in combination with Java EE and EJBs.

I have implemented a Rest Service API based on Java EE8. In my application I have for example a jax-rs rest resource to write data into cassandra cluster. My first approach was to create in each method call

1.   a new Casssandra Cluster and Session object,
2.   write my data into cassandra
3.   and finally close the session and the cluster object.

This works but it takes a lot of time (2-3 seconds) until the cluster object / session is opened for each request.

 So my second approach is now a @Singleton EJB providing the session object for my jax-rs resources. My service implementation to hold the Session object looks something like this:


*@Singleton*
*public class* ClusterService {
    private Cluster cluster;
    private Session session;

    @PostConstruct
*private void* init() throws ArchiveException {
        cluster=initCluster();
        session = initArchiveSession();
    }

    @PreDestroy
*private* void tearDown() throws ArchiveException {
        // close session and cluster object
        if (session != null) {
            session.close();
        }
        if (cluster != null) {
            cluster.close();
        }
    }

*public* Session getSession() {
        if (session==null) {
            try {
                init();
            } catch (ArchiveException e) {
                logger.warning("unable to get falid session: " + e.getMessage());
                e.printStackTrace();
            }
        }
*return* session;
    }

   .....

}


And my rest service calls now looking like this:


@Path("/archive")
@Stateless
*public class* ArchiveRestService {

    @EJB
    ClusterService clusterService;

    @POST
    @Consumes({ MediaType.APPLICATION_XML, MediaType.TEXT_XML })
*public* Response postData(XMLDocument xmlDocument) {
        Session session = clusterService.getSession();
        session.execute(....);
        ...
    }
    ...
}


The result is now a super-fast behavior!Seems to be clear because my rest service no longer need to open a new session for each request.

My question is: Is this approach with a @Singleton ClusterService EJB valid or is there something I should avoid? As far as I can see this works pretty fine and is really fast. I am running the application on a Wildfly 15 server which is Java EE8.

Thanks for your comments

Ralph




--

*Imixs Software Solutions GmbH*
*Web:* www.imixs.com <http://www.imixs.com> *Phone:* +49 (0)89-452136 16
*Office:* Agnes-Pockels-Bogen 1, 80992 München
Registergericht: Amtsgericht Muenchen, HRB 136045
Geschaeftsführer: Gaby Heinle u. Ralph Soika

*Imixs* is an open source company, read more: www.imixs.org <http://www.imixs.org>

Reply via email to