<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ODataSpring</groupId>
<artifactId>ODataSpring</artifactId>
<version>0.1</version>
<packaging>war</packaging>
<properties>
<eclipselink.version>2.6.4</eclipselink.version>
<spring.cloud>1.2.3.RELEASE</spring.cloud>
<!-- Using SAP internal verison for Olingo. This could be replaced with
Olingo global version . -->
<olingo.v2.version>2.0.8-sap-05</olingo.v2.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.showDeprecation>true</maven.compiler.showDeprecation>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>3.2.0</version>
<exclusions>
<exclusion>
<artifactId>geronimo-javamail_1.4_spec</artifactId>
<groupId>org.apache.geronimo.specs</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-jpa-processor-api</artifactId>
<version>${olingo.v2.version}</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-jpa-processor-core</artifactId>
<version>${olingo.v2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-jpa-processor-ref</artifactId>
<version>${olingo.v2.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-core</artifactId>
<version>${olingo.v2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>olingo-odata2-api-annotation</artifactId>
<version>${olingo.v2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>
olingo-odata2-annotation-processor-ref
</artifactId>
<version>${olingo.v2.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.olingo</groupId>
<artifactId>
olingo-odata2-annotation-processor-core
</artifactId>
<version>${olingo.v2.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
</exclusions>
</dependency>
<!-- Spring JPA. Since, we are using eclipse link JPA. We exclude default
hibernate JPA. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>${eclipselink.version}</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<!-- <version>2.9.9</version> -->
</dependency>
<!-- spring cloud service connector for CF -->
<!-- For deployment in cloud foundry -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-spring-service-connector</artifactId>
<!-- <version>${spring.cloud}</version> -->
</dependency>
<!-- Cloud foundry connector -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-cloudfoundry-connector</artifactId>
<!-- <version>${spring.cloud}</version> -->
</dependency>
<!-- HANA service connector for connecting to HANA Service in SAP CF. -->
<dependency>
<groupId>com.sap.hana.cloud</groupId>
<artifactId>spring-cloud-cloudfoundry-hana-service-connector</artifactId>
<version>1.0.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>de.empulse.eclipselink</groupId>
<artifactId>staticweave-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>weave</goal>
</goals>
<configuration>
<persistenceXMLLocation>META-INF/persistence.xml</persistenceXMLLocation>
<logLevel>FINE</logLevel>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings
only. It has no influence on the Maven build itself. -->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
de.empulse.eclipselink
</groupId>
<artifactId>
staticweave-maven-plugin
</artifactId>
<versionRange>
[1.0.0,)
</versionRange>
<goals>
<goal>weave</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
@Entity
public class Employee implements Serializable {
@Id
private String id;
private String name;
private String description;
private static final long serialVersionUID = 1L;
public Employee() {
super();
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", description=" + description + "]";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="ODataSpring">
<class>com.sap.cf.odata.spring.model.Employee</class>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables" />
<!-- Disable weaving to prevent load time weaver exception. Instead use
static weaving as mentioned in pom.xml -->
<property name="eclipselink.weaving" value="false" />
</properties>
</persistence-unit>
</persistence>
/**
* Main class for this application. extends {@link SpringBootServletInitializer}
* it making a web application for war deployment.
*
* @author i324363
*
*/
@SpringBootApplication
public class AppController extends SpringBootServletInitializer {
// Main method gives control to Spring by invoking run on Spring Application.
// This enables Spring to Bootstrap the application
public static void main(String[] args) {
SpringApplication.run(AppController.class, args);
}
// This method adds Configuration class for Spring Application Context builder
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(AppController.class, CloudConfig.class);
}
}
@Configuration
@Profile("cloud")
@ComponentScan(basePackages = "com.sap.cf")
public class CloudConfig extends AbstractCloudConfig {
private static final String HANA_SVC = "hana-schema-svc";
private static final Logger LOG = LoggerFactory.getLogger(CloudConfig.class);
/**
* Create dataSource bean from SAP CF
*
* @return dataSource dataSoruce created from HANA Service.
*/
@Bean
public DataSource dataSource() {
DataSource dataSource = null;
try {
dataSource = connectionFactory().dataSource(HANA_SVC);
} catch (CloudException ex) {
LOG.error(" ", ex);
}
return dataSource;
}
/**
* Create Eclipselink EMF from the dataSource bean. JPAvendor and datasource
* will be set here. rest will be taken from persistence.xml
*
* @return EntityManagerFactory
*/
@Bean
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean springEMF = new LocalContainerEntityManagerFactoryBean();
springEMF.setJpaVendorAdapter(new EclipseLinkJpaVendorAdapter());
springEMF.setDataSource(dataSource());
springEMF.afterPropertiesSet();
return springEMF.getObject();
}
/**
* Registers OData servlet bean with Spring Application context to handle
* ODataRequests.
*
* @return
*/
@Bean
public ServletRegistrationBean odataServlet() {
ServletRegistrationBean odataServRegstration = new ServletRegistrationBean(new CXFNonSpringJaxrsServlet(),
"/odata.svc/*");
Map<String, String> initParameters = new HashMap<>();
initParameters.put("javax.ws.rs.Application", "org.apache.olingo.odata2.core.rest.app.ODataApplication");
initParameters.put("org.apache.olingo.odata2.service.factory",
"com.sap.cf.odata.spring.context.JPAServiceFactory");
odataServRegstration.setInitParameters(initParameters);
return odataServRegstration;
}
}
public class JPAServiceFactory extends ODataJPAServiceFactory {
private static final String PERSISTENT_UNIT = "ODataSpring";
private static final String EMF = "entityManagerFactory";
private static final Logger LOG = LoggerFactory.getLogger(JPAServiceFactory.class);
@Override
public ODataJPAContext initializeODataJPAContext() throws ODataJPARuntimeException {
ODataJPAContext oDataJPACtx = getODataJPAContext();
EntityManagerFactory emf = (EntityManagerFactory) SpringContextUtil.getBean(EMF);
LOG.debug("EMF in JPAservicefactory " + emf);
oDataJPACtx.setEntityManagerFactory(emf);
oDataJPACtx.setPersistenceUnitName(PERSISTENT_UNIT);
oDataJPACtx.setDefaultNaming(true);
this.setDetailErrors(true);
return oDataJPACtx;
}
}
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public SpringContextUtil() {
}
public static Object getBean(String beanName) throws BeansException {
return applicationContext.getBean(beanName);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
}
---
applications:
- name: odatav2-spring
path: target/ODataSpring-0.1.war
services:
- hana-schema-svc
env:
SPRING_PROFILES_DEFAULT: cloud
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
12 | |
10 | |
9 | |
7 | |
7 | |
7 | |
6 | |
6 | |
5 | |
4 |