1
/*******************************************************************************
2
*Copyright (c) 2009 Eucalyptus Systems, Inc.
4
* This program is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation, only version 3 of the License.
9
* This file is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* You should have received a copy of the GNU General Public License along
15
* with this program. If not, see <http://www.gnu.org/licenses/>.
17
* Please contact Eucalyptus Systems, Inc., 130 Castilian
18
* Dr., Goleta, CA 93101 USA or visit <http://www.eucalyptus.com/licenses/>
19
* if you need additional information or have any questions.
21
* This file may incorporate work covered under the following copyright and
24
* Software License Agreement (BSD License)
26
* Copyright (c) 2008, Regents of the University of California
27
* All rights reserved.
29
* Redistribution and use of this software in source and binary forms, with
30
* or without modification, are permitted provided that the following
33
* Redistributions of source code must retain the above copyright notice,
34
* this list of conditions and the following disclaimer.
36
* Redistributions in binary form must reproduce the above copyright
37
* notice, this list of conditions and the following disclaimer in the
38
* documentation and/or other materials provided with the distribution.
40
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
41
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
42
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
43
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
44
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
45
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
46
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
47
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
48
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
49
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
50
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USERS OF
51
* THIS SOFTWARE ACKNOWLEDGE THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE
52
* LICENSED MATERIAL, COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS
53
* SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING
54
* IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, SANTA
55
* BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, WHICH IN
56
* THE REGENTS’ DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
57
* OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO IDENTIFIED, OR
58
* WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT NEEDED TO COMPLY WITH
59
* ANY SUCH LICENSES OR RIGHTS.
60
*******************************************************************************/
62
* Author: chris grzegorczyk <grze@eucalyptus.com>
64
package com.eucalyptus.config;
66
import java.io.Serializable;
68
import java.util.Date;
70
import javax.persistence.Entity;
71
import javax.persistence.Id;
73
import org.hibernate.annotations.Cache;
74
import org.hibernate.annotations.CacheConcurrencyStrategy;
75
import org.hibernate.annotations.GenericGenerator;
77
import javax.persistence.MappedSuperclass;
78
import javax.persistence.PersistenceContext;
79
import javax.persistence.Table;
80
import javax.persistence.GeneratedValue;
81
import javax.persistence.Column;
82
import javax.persistence.Lob;
83
import javax.persistence.OneToMany;
84
import javax.persistence.OneToOne;
85
import javax.persistence.FetchType;
86
import javax.persistence.CascadeType;
87
import javax.persistence.JoinTable;
88
import javax.persistence.JoinColumn;
89
import javax.persistence.Transient;
90
import org.hibernate.sql.Alias;
91
import javax.persistence.Temporal;
92
import javax.persistence.TemporalType;
93
import javax.persistence.Version;
95
import com.eucalyptus.bootstrap.Component;
96
import com.eucalyptus.component.Components;
97
import com.eucalyptus.component.ServiceConfiguration;
98
import com.eucalyptus.util.NetworkUtil;
99
import com.eucalyptus.entities.AbstractPersistent;
102
public abstract class ComponentConfiguration extends AbstractPersistent implements ServiceConfiguration, Comparable {
103
@Column( name = "config_component_name", unique=true )
105
@Column( name = "config_component_hostname" )
107
@Column( name = "config_component_port" )
109
@Column( name = "config_component_service_path" )
112
public ComponentConfiguration( ) {}
114
public ComponentConfiguration( String name, String hostName, String servicePath ) {
117
this.hostName = hostName;
118
this.servicePath = servicePath;
120
public ComponentConfiguration( String name, String hostName, Integer port, String servicePath ) {
122
this.hostName = hostName;
124
this.servicePath = servicePath;
127
public String getUri() {
128
return "http://" + this.getHostName() + ":" + this.getPort() + this.getServicePath();
131
public String getName() {
135
public abstract Component getComponent();
137
public com.eucalyptus.component.Component lookup() {
138
return Components.lookup( this.getComponent() );
141
public Boolean isLocal() {
143
return NetworkUtil.testLocal( this.getHostName( ) );
144
} catch ( Exception e ) {
149
public String toString() {
154
public int hashCode( ) {
155
final int prime = 31;
157
result = prime * result + ( ( hostName == null ) ? 0 : hostName.hashCode( ) );
158
result = prime * result + ( ( name == null ) ? 0 : name.hashCode( ) );
162
public boolean equals( Object obj ) {
163
if ( this.is( obj ) ) return true;
164
if ( obj == null ) return false;
165
if ( !getClass( ).equals( obj.getClass( ) ) ) return false;
166
ComponentConfiguration other = ( ComponentConfiguration ) obj;
167
if ( hostName == null ) {
168
if ( other.hostName != null ) return false;
169
} else if ( !hostName.equals( other.hostName ) ) return false;
170
if ( name == null ) {
171
if ( other.name != null ) return false;
172
} else if ( !name.equals( other.name ) ) return false;
176
public int compareTo(Object o) {
177
return name.compareTo(((ComponentConfiguration) o).getName());
181
public class EphemeralConfiguration extends ComponentConfiguration {
186
public EphemeralConfiguration( Component c, URI uri ) {
187
super( c.name(), uri.getHost( ), uri.getPort( ), uri.getPath( ) );
191
public Component getComponent() {
194
public com.eucalyptus.component.Component lookup() {
195
return Components.lookup(this.getName());
197
public String getUri() {
198
return this.uri.toASCIIString( );
201
public class LocalConfiguration extends EphemeralConfiguration {
202
public LocalConfiguration( Component c, URI uri ) {
205
public Boolean isLocal() {
209
public class RemoteConfiguration extends EphemeralConfiguration {
210
public RemoteConfiguration( Component c, URI uri ) {
213
public Boolean isLocal() {
219
@PersistenceContext(name="eucalyptus_config")
220
@Table( name = "config_clusters" )
221
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL )
222
public class ClusterConfiguration extends ComponentConfiguration implements Serializable {
224
private static String DEFAULT_SERVICE_PATH = "/axis2/services/EucalyptusCC";
226
private static String INSECURE_SERVICE_PATH = "/axis2/services/EucalyptusGL";
227
@Column(name="minvlan")
229
@Column(name="maxvlan")
232
public ClusterConfiguration( ) {}
233
public ClusterConfiguration( String name, String hostName, Integer port ) {
234
super( name, hostName, port, DEFAULT_SERVICE_PATH );
236
public ClusterConfiguration( String name, String hostName, Integer port, Integer minVlan, Integer maxVlan ) {
237
super( name, hostName, port, DEFAULT_SERVICE_PATH );
238
this.minVlan = minVlan;
239
this.maxVlan = maxVlan;
241
public String getInsecureServicePath() {
242
return INSECURE_SERVICE_PATH;
244
public String getInsecureUri() {
245
return "http://" + this.getHostName() + ":" + this.getPort() + INSECURE_SERVICE_PATH;
248
public static ClusterConfiguration byClusterName( String name ) {
249
ClusterConfiguration c = new ClusterConfiguration( );
250
c.setClusterName(name);
253
public static ClusterConfiguration byHostName( String hostName ) {
254
ClusterConfiguration c = new ClusterConfiguration( );
255
c.setHostName(hostName);
258
public Component getComponent() {
259
return Component.cluster;
262
public Boolean isLocal() {
268
@PersistenceContext(name="eucalyptus_config")
269
@Table( name = "config_sc" )
270
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL )
271
public class StorageControllerConfiguration extends ComponentConfiguration implements Serializable {
273
private static String DEFAULT_SERVICE_PATH = "/services/Storage";
274
public StorageControllerConfiguration( ) {}
275
public StorageControllerConfiguration( String name, String hostName, Integer port ) {
276
super( name, hostName, port, DEFAULT_SERVICE_PATH );
278
public Component getComponent() {
279
return Component.storage;
283
@PersistenceContext(name="eucalyptus_config")
284
@Table( name = "config_walrus" )
285
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL )
286
public class WalrusConfiguration extends ComponentConfiguration implements Serializable {
288
private static String DEFAULT_SERVICE_PATH = "/services/Walrus";
289
public WalrusConfiguration( ) {
291
public WalrusConfiguration( String name, String hostName, Integer port ) {
292
super( name, hostName, port, DEFAULT_SERVICE_PATH );
294
public Component getComponent() {
295
return Component.walrus;
301
@PersistenceContext(name="eucalyptus_config")
302
@Table( name = "config_system" )
303
@Cache( usage = CacheConcurrencyStrategy.TRANSACTIONAL )
304
public class System implements Serializable {
306
@GeneratedValue(generator = "system-uuid")
307
@GenericGenerator(name="system-uuid", strategy = "uuid")
308
@Column( name = "config_system_id" )
310
@Column( name = "config_system_default_kernel" )
312
@Column( name = "config_system_default_ramdisk" )
313
String defaultRamdisk
314
@Column( name = "config_system_registration_id" )
315
String registrationId