Project

General

Profile

« Previous | Next » 

Revision 45111

codebase used to migrate to java8 the production system

View differences:

modules/dnet-runtime/trunk/deploy.info
1
{"type_source": "SVN", "goal": "package -U -T 4C source:jar", "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet40/modules/dnet-runtime/trunk/", "deploy_repository": "dnet4-snapshots", "version": "4", "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet4-snapshots", "name": "dnet-runtime"}
modules/dnet-runtime/trunk/src/main/java/eu/dnetlib/conf/PropertyFetcher.java
1
package eu.dnetlib.conf;
2

  
3
import java.util.Map.Entry;
4
import java.util.Properties;
5

  
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.springframework.beans.BeansException;
9
import org.springframework.beans.factory.InitializingBean;
10
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
11
import org.springframework.beans.factory.config.PropertyResourceConfigurer;
12

  
13
/**
14
 * PropertyFletcher
15
 * 
16
 * @author marko
17
 * 
18
 */
19
public class PropertyFetcher extends PropertyResourceConfigurer implements InitializingBean {
20

  
21
	private static final Log log = LogFactory.getLog(PropertyFetcher.class); // NOPMD by marko on 11/24/08 5:02 PM
22

  
23
	boolean unchangedHostname = false;
24
	boolean unchangedPort = true;
25

  
26
	private Properties props;
27

  
28
	@Override
29
	public void afterPropertiesSet() throws Exception {
30
		this.props = mergeProperties();
31

  
32
		// Convert the merged properties, if necessary.
33
		convertProperties(props);
34

  
35
		log.debug("FOUND A container.hostname property " + props.getProperty("container.hostname"));
36

  
37
		if ("localhost".equals(props.getProperty("container.hostname"))) {
38
			unchangedHostname = true;
39
		}
40
		if (props.getProperty("container.port") != null) {
41
			log.debug("FOUND A container.port property " + props.getProperty("container.port"));
42
			unchangedPort = false;
43
		}
44

  
45
		if (log.isDebugEnabled()) {
46
			log.debug("HOST unchanged? " + unchangedHostname);
47
			log.debug("PORT unchanged? " + unchangedPort);
48
			for (Entry<?, ?> e : props.entrySet()) {
49
				log.debug("system property: " + e.getKey() + " --> " + e.getValue());
50
			}
51
		}
52
	}
53

  
54
	@Override
55
	protected void processProperties(final ConfigurableListableBeanFactory arg0, final Properties props) throws BeansException {
56

  
57
	}
58

  
59
	public boolean isUnchangedHostname() {
60
		return unchangedHostname;
61
	}
62

  
63
	public void setUnchangedHostname(final boolean unchangedHostname) {
64
		this.unchangedHostname = unchangedHostname;
65
	}
66

  
67
	public boolean isUnchangedPort() {
68
		return unchangedPort;
69
	}
70

  
71
	public void setUnchangedPort(final boolean unchangedPort) {
72
		this.unchangedPort = unchangedPort;
73
	}
74

  
75
	public String getProperty(final String key) {
76
		return props.getProperty(key);
77
	}
78

  
79
	public Properties getProps() {
80
		return props;
81
	}
82

  
83
	public void setProps(final Properties props) {
84
		this.props = props;
85
	}
86

  
87
}
modules/dnet-runtime/trunk/src/main/java/eu/dnetlib/conf/WebappContextPropertyLocationFactory.java
1
package eu.dnetlib.conf;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.springframework.beans.factory.FactoryBean;
9

  
10
/**
11
 * This class wraps a list of property file paths and expands the @{webapp} placeholder with the name of the webapp taken from servlet-api
12
 * 2.5.
13
 * 
14
 * @author marko
15
 * 
16
 */
17
public class WebappContextPropertyLocationFactory extends AbstractWebappContextProperty implements FactoryBean<List<String>> {
18

  
19
	/**
20
	 * logger.
21
	 */
22
	private static final Log log = LogFactory.getLog(WebappContextPropertyLocationFactory.class); // NOPMD by marko on 11/24/08 5:02 PM
23

  
24
	private List<String> locations;
25

  
26
	@Override
27
	public List<String> getObject() throws Exception {
28
		List<String> expanded = new ArrayList<String>();
29

  
30
		for (String loc : locations) {
31
			expanded.add(expand(loc).trim());
32
		}
33

  
34
		if (log.isInfoEnabled()) {
35
			for (String location : expanded) {
36
				log.info("Searching property file: " + location);
37
			}
38
		}
39

  
40
		return expanded;
41
	}
42

  
43
	private String expand(final String loc) {
44
		if (getContext() == null) return loc;
45
		return loc.replace("@{webapp}", getContext());
46
	}
47

  
48
	@Override
49
	public Class<?> getObjectType() {
50
		return locations.getClass();
51
	}
52

  
53
	@Override
54
	public boolean isSingleton() {
55
		return true;
56
	}
57

  
58
	public List<String> getLocations() {
59
		return locations;
60
	}
61

  
62
	public void setLocations(final List<String> locations) {
63
		this.locations = locations;
64
	}
65

  
66
}
modules/dnet-runtime/trunk/src/main/java/eu/dnetlib/conf/AbstractWebappContextProperty.java
1
package eu.dnetlib.conf;
2

  
3
import javax.servlet.ServletContext;
4

  
5
import org.apache.commons.logging.Log;
6
import org.apache.commons.logging.LogFactory;
7
import org.springframework.web.context.ServletContextAware;
8

  
9
/**
10
 * This spring bean detects the webapp context path, from the ServletContext. It requires servlet-api 2.5 (tomcat6 and
11
 * jetty 6.x).
12
 *
13
 * <p>
14
 * Concrete subclasses will know what to do with this information
15
 * </p>
16
 *
17
 * @author marko
18
 *
19
 */
20
public abstract class AbstractWebappContextProperty implements ServletContextAware {
21

  
22
	/**
23
	 * logger.
24
	 */
25
	private static final Log log = LogFactory.getLog(AbstractWebappContextProperty.class); // NOPMD by marko on 11/24/08 5:02 PM
26

  
27
	/**
28
	 * web application context.
29
	 */
30
	protected String context;
31

  
32
	/**
33
	 * saved servlet context.
34
	 */
35
	protected ServletContext servletContext;
36

  
37
	@Override
38
	public void setServletContext(final ServletContext servletContext) {
39
		this.servletContext = servletContext;
40

  
41
		try {
42
			context = servletContext.getContextPath().substring(1);
43
		} catch (final NoSuchMethodError e) {
44
			log.warn("cannot detect servlet context path. servlet-api 2.5 is required, falling back to property based configuration", e);
45
		}
46
	}
47

  
48
	public String getContext() {
49
		return context;
50
	}
51

  
52
	public void setContext(final String context) {
53
		this.context = context;
54
	}
55

  
56
	public ServletContext getServletContext() {
57
		return servletContext;
58
	}
59

  
60
}
modules/dnet-runtime/trunk/src/main/java/eu/dnetlib/conf/WebappContextProperyFactory.java
1
package eu.dnetlib.conf;
2

  
3
import java.net.InetAddress;
4
import java.net.UnknownHostException;
5
import java.util.Properties;
6

  
7
import javax.servlet.ServletContext;
8

  
9
import org.apache.catalina.Container;
10
import org.apache.catalina.connector.Connector;
11
import org.apache.catalina.core.StandardContext;
12
import org.apache.catalina.core.StandardEngine;
13
import org.apache.commons.lang.reflect.FieldUtils;
14
import org.apache.commons.logging.Log;
15
import org.apache.commons.logging.LogFactory;
16
import org.springframework.beans.factory.FactoryBean;
17
import org.springframework.beans.factory.annotation.Required;
18

  
19
/**
20
 * This factory generates default properties based on the amount of information available from the servlet container.
21
 * 
22
 * @author marko
23
 * 
24
 */
25
public class WebappContextProperyFactory extends AbstractWebappContextProperty implements FactoryBean<Properties> {
26

  
27
	/**
28
	 * logger.
29
	 */
30
	private static final Log log = LogFactory.getLog(WebappContextProperyFactory.class); // NOPMD by marko on
31
																							// 11/24/08 5:02 PM
32

  
33
	/**
34
	 * If false, the ip address will be returned, otherwise a best effort attemp will be made to retrieve a meaningful host name. There is a
35
	 * risk that the hostname is obtained without domain and thus completely useless.
36
	 */
37
	private boolean resolveHostname = false;
38

  
39
	private PropertyFetcher propertyFetcher;
40

  
41
	@Override
42
	public Properties getObject() throws Exception {
43
		Properties props = new Properties();
44

  
45
		if (getContext() == null) return props;
46

  
47
		props.setProperty("container.context", getContext());
48

  
49
		log.debug("trying to autodetect port and hostame");
50

  
51
		// if the user didn't customize, then autodetect, otherwise honour the
52
		// user!
53
		if (propertyFetcher.isUnchangedPort()) {
54
			log.debug("PORT IS NOT OVERRIDDEN, autodetecting");
55
			int port = getPort(getServletContext());
56
			if (port > 0) {
57
				props.setProperty("container.port", Integer.toString(port));
58
			}
59
		} else {
60
			log.debug("PORT IS OVERRIDDEN, NOT autodetecting");
61
		}
62

  
63
		if (propertyFetcher.isUnchangedHostname()) {
64
			log.debug("HOST IS NOT OVERRIDDEN, autodetecting");
65
			String hostname = getHost(getServletContext());
66
			if (hostname != null) {
67
				props.setProperty("container.hostname", hostname);
68
			}
69
		} else {
70
			log.debug("HOST IS OVERRIDDEN, NOT autodetecting");
71
		}
72

  
73
		return props;
74
	}
75

  
76
	@Override
77
	public Class<?> getObjectType() {
78
		return Properties.class;
79
	}
80

  
81
	@Override
82
	public boolean isSingleton() {
83
		return true;
84
	}
85

  
86
	private int getPort(final ServletContext servletContext) {
87
		try {
88
			return getContainerPort(servletContext);
89
		} catch (Throwable e) {
90
			log.warn("cannot obtain port from container...strange: I thought it would work both on jetty and tomcat7...)", e);
91
			return 0;
92
		}
93
	}
94

  
95
	private int getContainerPort(final ServletContext servletContext) {
96
		try {
97
			Object o = FieldUtils.readField(servletContext, "context", true);
98
			StandardContext sCtx = (StandardContext) FieldUtils.readField(o, "context", true);
99
			Container container = sCtx;
100

  
101
			Container c = container.getParent();
102
			while ((c != null) && !(c instanceof StandardEngine)) {
103
				c = c.getParent();
104
			}
105

  
106
			if (c != null) {
107
				StandardEngine engine = (StandardEngine) c;
108
				for (Connector connector : engine.getService().findConnectors()) {
109
					if (connector.getPort() > 0) return connector.getPort();
110
				}
111
			}
112
		} catch (Exception e) {
113
			e.printStackTrace();
114
		}
115
		return 0;
116
	}
117

  
118
	private String getHost(final ServletContext servletContext) {
119
		try {
120
			if (resolveHostname) return InetAddress.getLocalHost().getCanonicalHostName();
121
			else return InetAddress.getLocalHost().toString().split("/")[1];
122
		} catch (UnknownHostException e) {
123
			log.warn("cannot obtain hostname from JVM", e);
124
		}
125

  
126
		return null;
127
	}
128

  
129
	public boolean isResolveHostname() {
130
		return resolveHostname;
131
	}
132

  
133
	public void setResolveHostname(final boolean resolveHostname) {
134
		this.resolveHostname = resolveHostname;
135
	}
136

  
137
	public PropertyFetcher getPropertyFetcher() {
138
		return propertyFetcher;
139
	}
140

  
141
	@Required
142
	public void setPropertyFetcher(final PropertyFetcher propertyFetcher) {
143
		this.propertyFetcher = propertyFetcher;
144
	}
145

  
146
}
modules/dnet-runtime/trunk/src/main/resources/META-INF/jax-ws-catalog.xml
1
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
2
    <rewriteSystem systemIdStartString="http://www.w3.org/2006/03/addressing" rewritePrefix="classpath:/schemas/wsdl"/>
3
</catalog>
modules/dnet-runtime/trunk/src/main/resources/eu/dnetlib/applicationContext-defaultProperties.properties
1
transport.soap.baseAddress = http://${container.hostname}:${container.port}/${container.context}/services
modules/dnet-runtime/trunk/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
	<parent>
4
		<groupId>eu.dnetlib</groupId>
5
		<artifactId>dnet-parent</artifactId>
6
		<version>1.0.0</version>
7
		<relativePath />
8
	</parent>
9
	<modelVersion>4.0.0</modelVersion>
10
	<groupId>eu.dnetlib</groupId>
11
	<artifactId>dnet-runtime</artifactId>
12
	<packaging>jar</packaging>
13
	<version>1.0.1-SNAPSHOT</version>
14
	<scm>
15
		<developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/dnet-runtime/trunk</developerConnection>
16
	</scm>
17
	
18
	<dependencies>
19
		<!-- Do not remove these dependencies, even if they look like they are 
20
			unused other modules expect them to be here -->
21
		<dependency>
22
			<groupId>org.apache.cxf</groupId>
23
			<artifactId>cxf-api</artifactId>
24
			<version>${cxf.version}</version>
25
		</dependency>
26
		<dependency>
27
			<groupId>org.apache.cxf</groupId>
28
			<artifactId>cxf-rt-core</artifactId>
29
			<version>${cxf.version}</version>
30
		</dependency>
31
		<dependency>
32
			<groupId>org.apache.cxf</groupId>
33
			<artifactId>cxf-rt-bindings-soap</artifactId>
34
			<version>${cxf.version}</version>
35
		</dependency>
36
		<dependency>
37
			<groupId>org.apache.cxf</groupId>
38
			<artifactId>cxf-rt-transports-http</artifactId>
39
			<version>${cxf.version}</version>
40
		</dependency>
41
		<dependency>
42
			<groupId>org.apache.cxf</groupId>
43
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
44
			<version>${cxf.version}</version>
45
		</dependency>
46
		<dependency>
47
			<groupId>commons-lang</groupId>
48
			<artifactId>commons-lang</artifactId>
49
			<version>${commons.lang.version}</version>
50
		</dependency>
51
		<dependency>
52
			<groupId>org.springframework</groupId>
53
			<artifactId>spring-web</artifactId>
54
			<version>${spring.version}</version>
55
		</dependency>
56
		<dependency>
57
			<groupId>javax.servlet</groupId>
58
			<artifactId>javax.servlet-api</artifactId>
59
			<version>${javax.servlet.version}</version>
60
			<scope>provided</scope>
61
		</dependency>
62
		
63
		<!-- For tomcat7 -->
64
		<dependency>
65
			<groupId>org.apache.tomcat</groupId>
66
			<artifactId>tomcat-catalina</artifactId>
67
			<version>7.0.47</version>
68
			<scope>provided</scope>
69
		</dependency>
70

  
71
	</dependencies>
72
</project>
modules/dnet-runtime/tags/dnet-runtime-1.0.0/deploy.info
1
{"type_source": "SVN", "goal": "package -U -T 4C source:jar", "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet40/modules/dnet-runtime/trunk/", "deploy_repository": "dnet4-snapshots", "version": "4", "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet4-snapshots", "name": "dnet-runtime"}
modules/dnet-runtime/tags/dnet-runtime-1.0.0/src/main/java/eu/dnetlib/conf/PropertyFetcher.java
1
package eu.dnetlib.conf;
2

  
3
import java.util.Map.Entry;
4
import java.util.Properties;
5

  
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.springframework.beans.BeansException;
9
import org.springframework.beans.factory.InitializingBean;
10
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
11
import org.springframework.beans.factory.config.PropertyResourceConfigurer;
12

  
13
/**
14
 * PropertyFletcher
15
 * 
16
 * @author marko
17
 * 
18
 */
19
public class PropertyFetcher extends PropertyResourceConfigurer implements InitializingBean {
20

  
21
	private static final Log log = LogFactory.getLog(PropertyFetcher.class); // NOPMD by marko on 11/24/08 5:02 PM
22

  
23
	boolean unchangedHostname = false;
24
	boolean unchangedPort = true;
25

  
26
	private Properties props;
27

  
28
	@Override
29
	public void afterPropertiesSet() throws Exception {
30
		this.props = mergeProperties();
31

  
32
		// Convert the merged properties, if necessary.
33
		convertProperties(props);
34

  
35
		log.debug("FOUND A container.hostname property " + props.getProperty("container.hostname"));
36

  
37
		if ("localhost".equals(props.getProperty("container.hostname"))) {
38
			unchangedHostname = true;
39
		}
40
		if (props.getProperty("container.port") != null) {
41
			log.debug("FOUND A container.port property " + props.getProperty("container.port"));
42
			unchangedPort = false;
43
		}
44

  
45
		if (log.isDebugEnabled()) {
46
			log.debug("HOST unchanged? " + unchangedHostname);
47
			log.debug("PORT unchanged? " + unchangedPort);
48
			for (Entry<?, ?> e : props.entrySet()) {
49
				log.debug("system property: " + e.getKey() + " --> " + e.getValue());
50
			}
51
		}
52
	}
53

  
54
	@Override
55
	protected void processProperties(final ConfigurableListableBeanFactory arg0, final Properties props) throws BeansException {
56

  
57
	}
58

  
59
	public boolean isUnchangedHostname() {
60
		return unchangedHostname;
61
	}
62

  
63
	public void setUnchangedHostname(final boolean unchangedHostname) {
64
		this.unchangedHostname = unchangedHostname;
65
	}
66

  
67
	public boolean isUnchangedPort() {
68
		return unchangedPort;
69
	}
70

  
71
	public void setUnchangedPort(final boolean unchangedPort) {
72
		this.unchangedPort = unchangedPort;
73
	}
74

  
75
	public String getProperty(final String key) {
76
		return props.getProperty(key);
77
	}
78

  
79
	public Properties getProps() {
80
		return props;
81
	}
82

  
83
	public void setProps(final Properties props) {
84
		this.props = props;
85
	}
86

  
87
}
modules/dnet-runtime/tags/dnet-runtime-1.0.0/src/main/java/eu/dnetlib/conf/WebappContextPropertyLocationFactory.java
1
package eu.dnetlib.conf;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5

  
6
import org.apache.commons.logging.Log;
7
import org.apache.commons.logging.LogFactory;
8
import org.springframework.beans.factory.FactoryBean;
9

  
10
/**
11
 * This class wraps a list of property file paths and expands the @{webapp} placeholder with the name of the webapp taken from servlet-api
12
 * 2.5.
13
 * 
14
 * @author marko
15
 * 
16
 */
17
public class WebappContextPropertyLocationFactory extends AbstractWebappContextProperty implements FactoryBean<List<String>> {
18

  
19
	/**
20
	 * logger.
21
	 */
22
	private static final Log log = LogFactory.getLog(WebappContextPropertyLocationFactory.class); // NOPMD by marko on 11/24/08 5:02 PM
23

  
24
	private List<String> locations;
25

  
26
	@Override
27
	public List<String> getObject() throws Exception {
28
		List<String> expanded = new ArrayList<String>();
29

  
30
		for (String loc : locations) {
31
			expanded.add(expand(loc).trim());
32
		}
33

  
34
		if (log.isInfoEnabled()) {
35
			for (String location : expanded) {
36
				log.info("Searching property file: " + location);
37
			}
38
		}
39

  
40
		return expanded;
41
	}
42

  
43
	private String expand(final String loc) {
44
		if (getContext() == null) return loc;
45
		return loc.replace("@{webapp}", getContext());
46
	}
47

  
48
	@Override
49
	public Class<?> getObjectType() {
50
		return locations.getClass();
51
	}
52

  
53
	@Override
54
	public boolean isSingleton() {
55
		return true;
56
	}
57

  
58
	public List<String> getLocations() {
59
		return locations;
60
	}
61

  
62
	public void setLocations(final List<String> locations) {
63
		this.locations = locations;
64
	}
65

  
66
}
modules/dnet-runtime/tags/dnet-runtime-1.0.0/src/main/java/eu/dnetlib/conf/AbstractWebappContextProperty.java
1
package eu.dnetlib.conf;
2

  
3
import javax.servlet.ServletContext;
4

  
5
import org.apache.commons.logging.Log;
6
import org.apache.commons.logging.LogFactory;
7
import org.springframework.web.context.ServletContextAware;
8

  
9
/**
10
 * This spring bean detects the webapp context path, from the ServletContext. It requires servlet-api 2.5 (tomcat6 and
11
 * jetty 6.x).
12
 *
13
 * <p>
14
 * Concrete subclasses will know what to do with this information
15
 * </p>
16
 *
17
 * @author marko
18
 *
19
 */
20
public abstract class AbstractWebappContextProperty implements ServletContextAware {
21

  
22
	/**
23
	 * logger.
24
	 */
25
	private static final Log log = LogFactory.getLog(AbstractWebappContextProperty.class); // NOPMD by marko on 11/24/08 5:02 PM
26

  
27
	/**
28
	 * web application context.
29
	 */
30
	protected String context;
31

  
32
	/**
33
	 * saved servlet context.
34
	 */
35
	protected ServletContext servletContext;
36

  
37
	@Override
38
	public void setServletContext(final ServletContext servletContext) {
39
		this.servletContext = servletContext;
40

  
41
		try {
42
			context = servletContext.getContextPath().substring(1);
43
		} catch (final NoSuchMethodError e) {
44
			log.warn("cannot detect servlet context path. servlet-api 2.5 is required, falling back to property based configuration", e);
45
		}
46
	}
47

  
48
	public String getContext() {
49
		return context;
50
	}
51

  
52
	public void setContext(final String context) {
53
		this.context = context;
54
	}
55

  
56
	public ServletContext getServletContext() {
57
		return servletContext;
58
	}
59

  
60
}
modules/dnet-runtime/tags/dnet-runtime-1.0.0/src/main/java/eu/dnetlib/conf/WebappContextProperyFactory.java
1
package eu.dnetlib.conf;
2

  
3
import java.net.InetAddress;
4
import java.net.UnknownHostException;
5
import java.util.Properties;
6

  
7
import javax.servlet.ServletContext;
8

  
9
import org.apache.catalina.Container;
10
import org.apache.catalina.connector.Connector;
11
import org.apache.catalina.core.StandardContext;
12
import org.apache.catalina.core.StandardEngine;
13
import org.apache.commons.lang.reflect.FieldUtils;
14
import org.apache.commons.logging.Log;
15
import org.apache.commons.logging.LogFactory;
16
import org.springframework.beans.factory.FactoryBean;
17
import org.springframework.beans.factory.annotation.Required;
18

  
19
/**
20
 * This factory generates default properties based on the amount of information available from the servlet container.
21
 * 
22
 * @author marko
23
 * 
24
 */
25
public class WebappContextProperyFactory extends AbstractWebappContextProperty implements FactoryBean<Properties> {
26

  
27
	/**
28
	 * logger.
29
	 */
30
	private static final Log log = LogFactory.getLog(WebappContextProperyFactory.class); // NOPMD by marko on
31
																							// 11/24/08 5:02 PM
32

  
33
	/**
34
	 * If false, the ip address will be returned, otherwise a best effort attemp will be made to retrieve a meaningful host name. There is a
35
	 * risk that the hostname is obtained without domain and thus completely useless.
36
	 */
37
	private boolean resolveHostname = false;
38

  
39
	private PropertyFetcher propertyFetcher;
40

  
41
	@Override
42
	public Properties getObject() throws Exception {
43
		Properties props = new Properties();
44

  
45
		if (getContext() == null) return props;
46

  
47
		props.setProperty("container.context", getContext());
48

  
49
		log.debug("trying to autodetect port and hostame");
50

  
51
		// if the user didn't customize, then autodetect, otherwise honour the
52
		// user!
53
		if (propertyFetcher.isUnchangedPort()) {
54
			log.debug("PORT IS NOT OVERRIDDEN, autodetecting");
55
			int port = getPort(getServletContext());
56
			if (port > 0) {
57
				props.setProperty("container.port", Integer.toString(port));
58
			}
59
		} else {
60
			log.debug("PORT IS OVERRIDDEN, NOT autodetecting");
61
		}
62

  
63
		if (propertyFetcher.isUnchangedHostname()) {
64
			log.debug("HOST IS NOT OVERRIDDEN, autodetecting");
65
			String hostname = getHost(getServletContext());
66
			if (hostname != null) {
67
				props.setProperty("container.hostname", hostname);
68
			}
69
		} else {
70
			log.debug("HOST IS OVERRIDDEN, NOT autodetecting");
71
		}
72

  
73
		return props;
74
	}
75

  
76
	@Override
77
	public Class<?> getObjectType() {
78
		return Properties.class;
79
	}
80

  
81
	@Override
82
	public boolean isSingleton() {
83
		return true;
84
	}
85

  
86
	private int getPort(final ServletContext servletContext) {
87
		try {
88
			return getContainerPort(servletContext);
89
		} catch (Throwable e) {
90
			log.warn("cannot obtain port from container...strange: I thought it would work both on jetty and tomcat7...)", e);
91
			return 0;
92
		}
93
	}
94

  
95
	private int getContainerPort(final ServletContext servletContext) {
96
		try {
97
			Object o = FieldUtils.readField(servletContext, "context", true);
98
			StandardContext sCtx = (StandardContext) FieldUtils.readField(o, "context", true);
99
			Container container = sCtx;
100

  
101
			Container c = container.getParent();
102
			while ((c != null) && !(c instanceof StandardEngine)) {
103
				c = c.getParent();
104
			}
105

  
106
			if (c != null) {
107
				StandardEngine engine = (StandardEngine) c;
108
				for (Connector connector : engine.getService().findConnectors()) {
109
					if (connector.getPort() > 0) return connector.getPort();
110
				}
111
			}
112
		} catch (Exception e) {
113
			e.printStackTrace();
114
		}
115
		return 0;
116
	}
117

  
118
	private String getHost(final ServletContext servletContext) {
119
		try {
120
			if (resolveHostname) return InetAddress.getLocalHost().getCanonicalHostName();
121
			else return InetAddress.getLocalHost().toString().split("/")[1];
122
		} catch (UnknownHostException e) {
123
			log.warn("cannot obtain hostname from JVM", e);
124
		}
125

  
126
		return null;
127
	}
128

  
129
	public boolean isResolveHostname() {
130
		return resolveHostname;
131
	}
132

  
133
	public void setResolveHostname(final boolean resolveHostname) {
134
		this.resolveHostname = resolveHostname;
135
	}
136

  
137
	public PropertyFetcher getPropertyFetcher() {
138
		return propertyFetcher;
139
	}
140

  
141
	@Required
142
	public void setPropertyFetcher(final PropertyFetcher propertyFetcher) {
143
		this.propertyFetcher = propertyFetcher;
144
	}
145

  
146
}
modules/dnet-runtime/tags/dnet-runtime-1.0.0/src/main/resources/META-INF/jax-ws-catalog.xml
1
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
2
    <rewriteSystem systemIdStartString="http://www.w3.org/2006/03/addressing" rewritePrefix="classpath:/schemas/wsdl"/>
3
</catalog>
modules/dnet-runtime/tags/dnet-runtime-1.0.0/src/main/resources/eu/dnetlib/applicationContext-defaultProperties.properties
1
transport.soap.baseAddress = http://${container.hostname}:${container.port}/${container.context}/services
modules/dnet-runtime/tags/dnet-runtime-1.0.0/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
	<parent>
4
		<groupId>eu.dnetlib</groupId>
5
		<artifactId>dnet-parent</artifactId>
6
		<version>1.0.0</version>
7
		<relativePath />
8
	</parent>
9
	<modelVersion>4.0.0</modelVersion>
10
	<groupId>eu.dnetlib</groupId>
11
	<artifactId>dnet-runtime</artifactId>
12
	<packaging>jar</packaging>
13
	<version>1.0.0</version>
14
	<scm>
15
		<developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/dnet-runtime/tags/dnet-runtime-1.0.0</developerConnection>
16
	</scm>
17
	
18
	<dependencies>
19
		<!-- Do not remove these dependencies, even if they look like they are 
20
			unused other modules expect them to be here -->
21
		<dependency>
22
			<groupId>org.apache.cxf</groupId>
23
			<artifactId>cxf-api</artifactId>
24
			<version>${cxf.version}</version>
25
		</dependency>
26
		<dependency>
27
			<groupId>org.apache.cxf</groupId>
28
			<artifactId>cxf-rt-core</artifactId>
29
			<version>${cxf.version}</version>
30
		</dependency>
31
		<dependency>
32
			<groupId>org.apache.cxf</groupId>
33
			<artifactId>cxf-rt-bindings-soap</artifactId>
34
			<version>${cxf.version}</version>
35
		</dependency>
36
		<dependency>
37
			<groupId>org.apache.cxf</groupId>
38
			<artifactId>cxf-rt-transports-http</artifactId>
39
			<version>${cxf.version}</version>
40
		</dependency>
41
		<dependency>
42
			<groupId>org.apache.cxf</groupId>
43
			<artifactId>cxf-rt-frontend-jaxws</artifactId>
44
			<version>${cxf.version}</version>
45
		</dependency>
46
		<dependency>
47
			<groupId>commons-lang</groupId>
48
			<artifactId>commons-lang</artifactId>
49
			<version>${commons.lang.version}</version>
50
		</dependency>
51
		<dependency>
52
			<groupId>org.springframework</groupId>
53
			<artifactId>spring-web</artifactId>
54
			<version>${spring.version}</version>
55
		</dependency>
56
		<dependency>
57
			<groupId>javax.servlet</groupId>
58
			<artifactId>javax.servlet-api</artifactId>
59
			<version>${javax.servlet.version}</version>
60
			<scope>provided</scope>
61
		</dependency>
62
		
63
		<!-- For tomcat7 -->
64
		<dependency>
65
			<groupId>org.apache.tomcat</groupId>
66
			<artifactId>tomcat-catalina</artifactId>
67
			<version>7.0.47</version>
68
			<scope>provided</scope>
69
		</dependency>
70

  
71
	</dependencies>
72
</project>

Also available in: Unified diff