2
* Software License Agreement (BSD License)
4
* Copyright (c) 2008, Regents of the University of California
7
* Redistribution and use of this software in source and binary forms, with or
8
* without modification, are permitted provided that the following conditions
11
* * Redistributions of source code must retain the above
12
* copyright notice, this list of conditions and the
13
* following disclaimer.
15
* * Redistributions in binary form must reproduce the above
16
* copyright notice, this list of conditions and the
17
* following disclaimer in the documentation and/or other
18
* materials provided with the distribution.
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
* POSSIBILITY OF SUCH DAMAGE.
32
* Author: Chris Grzegorczyk grze@cs.ucsb.edu
35
package edu.ucsb.eucalyptus.cloud.entities;
37
import edu.ucsb.eucalyptus.keys.Hashes;
38
import org.hibernate.*;
39
import org.hibernate.annotations.*;
41
import javax.persistence.*;
42
import javax.persistence.Entity;
43
import javax.persistence.Table;
44
import java.util.List;
45
import java.util.zip.Adler32;
48
@Table( name = "counters" )
49
@Cache( usage = CacheConcurrencyStrategy.READ_WRITE )
50
public class Counters {
53
@Column( name = "id" )
54
private Long id = -1l;
55
@Column( name = "msg_count" )
56
private Long messageId;
64
public Long getMessageId()
69
public void setMessageId( Long messageId )
71
this.messageId = messageId;
75
private static long tempId = -1;
77
private static Adler32 digest = new Adler32();
78
public static synchronized long getIdBlock( int length )
81
long oldTemp = tempId;
86
public synchronized static String getNextId()
90
return Hashes.getDigestBase64( Long.toString( tempId ), Hashes.Digest.SHA512, false ).replaceAll( "\\.","" );
93
private static void ensurePersistence( )
99
EntityManager em = EntityWrapper.getEntityManagerFactory().createEntityManager( );
100
Session session = (Session) em.getDelegate();
101
List<Counters> found = ( List<Counters> ) session.createSQLQuery( "select * from COUNTERS" ).addEntity( Counters.class ).list();
102
if( found.isEmpty() )
104
EntityTransaction tx = em.getTransaction();
106
Counters newCounters = new Counters();
107
em.persist(newCounters);
114
tempId = find.getMessageId() + modulus;
117
else if ( tempId % modulus == 0 )
119
EntityManager em = EntityWrapper.getEntityManagerFactory().createEntityManager( );
120
Session session = (Session) em.getDelegate();
121
Transaction tx = session.beginTransaction();
123
Counters find = ( Counters ) session.createSQLQuery( "select * from COUNTERS" ).addEntity( Counters.class ).list().get( 0 );
125
find.setMessageId( tempId );
126
session.save( find );