Code Monkey home page Code Monkey logo

micro-server's People

Contributors

arunbcodes avatar bryant1410 avatar danesfort avatar davidartplus avatar djgarcias avatar earlzero avatar edeegan avatar gitter-badger avatar jijisv avatar johnmcclean avatar kewangie avatar kybut avatar marcocast avatar morrowgi avatar oldratlee avatar philip-clarke avatar pvorb avatar quike avatar ramswaroop avatar tonyfinn avatar wwfifi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

micro-server's Issues

Create a 3-tier hierachial property file loading structure

  • instance properties override (instance.properties)
  • service type properties override (service-type.properties - use Microserver annotation to rename)
  • global properties (application.properties)

Each should be loadable from file system or classpath, with filename being set either via Microserver annotation or System property.

JacksonUtil not working in version 0.62

The previous com.aol.micro.server.rest.JacksonUtil has been replaced by com.aol.micro.server.rest.jackson.JacksonUtil, but when running a simple json conversion (working with 0.59) I get the following error :

java.lang.NoClassDefFoundError: com/aol/cyclops/lambda/monads/SequenceM
at com.aol.micro.server.PluginLoader.load(PluginLoader.java:21)
at com.aol.micro.server.PluginLoader$$Lambda$1/1282287470.get(Unknown Source)
at com.aol.cyclops.lambda.utils.LazyImmutable.setOnceFromSupplier(LazyImmutable.java:116)
at com.aol.cyclops.lambda.utils.LazyImmutable.computeIfAbsent(LazyImmutable.java:133)
at com.aol.cyclops.functions.Memoise.lambda$memoiseSupplier$109(Memoise.java:27)
at com.aol.cyclops.functions.Memoise$$Lambda$2/2104028992.get(Unknown Source)
at com.aol.micro.server.rest.jackson.JacksonUtil.getMapper(JacksonUtil.java:39)
at com.aol.micro.server.rest.jackson.JacksonUtil.serializeToJson(JacksonUtil.java:63)
at com.ucd.geoservices.model.QueryRadiusRequestTest.testJson(QueryRadiusRequestTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: com.aol.cyclops.lambda.monads.SequenceM
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 32 more

Is cyclops already part of the micro-server-core?

CORs module needs enhanced

Current CORs filter, is pretty basic (wrt features & configurability). A more advanced one should be pluggable also (perhaps the ebay CORs Filter).

swagger-ui: basePath or apiPath?

I'm trying to get swagger-ui to work without much success - in
applications.properties do I need to specify swagger-ui's basePath or apiPath?

microserver-boot pom has incorrect dependency

Having some issues with microservice boot dependencies. Looks like the generated pom for the microservices-boot is messed up. Namely it references

micro-server micro-core 0.52 compile

So when I attempt to use the shadow / application plugin I get the following error.

FAILURE: Build failed with an exception.

  • What went wrong:

Could not resolve all dependencies for configuration ':runtime'.

Could not find micro-server:micro-core:0.52.

It should be

com.aol.microservices microserver-core 0.52

etc...

micro-events : Query events identifier should not use processing thread id

Query events identifier should not use processing thread id as this means the query start & end events can't be executed by separate threads.

e.g.

bus.post(RequestEvents.start(query, correlationId,"standard-query",HashMapBuilder.of("ip",QueryIPRetriever.getIpAddress())));
         this.restClient.withAccept(ACCEPT_HEADERS)
                        .withContentType(CONTENT_TYPE)
                        .withResponse(Result.class)
                        .post(apiURL,query)
                        .thenAccept(action->asyncResponse.resume(action))
                        .thenAccept( action->bus.post(RequestEvents.finish(query, correlationId)));

This won't close the event properly on completion as the completion event occurs asynchronously

Variable substitution in properties is not being picked up by microserver

During installation of components using microserver. It is often nesecery to use command line variables to set log directories. In one such instance is the access logs. So currently micoroserver picks these up from the following property access.log.output.

If i initialize a variable in the start script for example like so:

export MY_APP=sample_microserver

If I add this property as follows:

access.log.output:/data/servers/${MY_APP}/logs/

The MY_APP variable does not get interpolated as sample_microserver.

Workaround is to hard code the access log location in the properties provided to the microservice

micro-log4j plugin

Many 3rd party projects use log4j - we've seen issues where by a third party library automatically changes log4j logging level.

This plugin will allow admins to reset the log level - either periodically or via a rest interface.

Reactive Microserver : Make simple-react available on Rest resource handlers

E.g. allow simple-react to handle incoming responses via sync / async methods on the RestResource interface.

sync will execute all simple-react tasks on a single thread (more performant), async will allow multiple threads to be used (equivalent to simple-react sync / async operators)

    @GET
@Produces("application/json")
@Path("/jobs")
public void activeJobs(@Suspended AsyncResponse asyncResponse) {

    this.sync(react-> react.of(this.activeJobs)
                              .then(JobsBeingExecuted::toString)
                              .then(str->asyncResponse.resume(str)))
                              .run();

}

This Rest Resource returns the calling thread to the server immediately and responds asynchronously using simple-react. Is totally non-blocking.

simple-react should elastically scale up required number of Executors (Elastic Pools mechanism).

typo in pom.xml leads to not being able to build Eclipse project

In the pom.xml hosted on Maven central, the dependency for jackson-jaxrs-providerhas a typo:

com.fasterxml.jackson.jaxrs
jackson-jaxrs-providers
^^
The artifactId should be 'jackson-jaxrs-provider' - Eclipse shows an error:
Missing artifact com.fasterxml.jackson.jaxrs:jackson-jaxrs-providers:jar:2.2.3

Could someone fix this and upload a new pom to Maven central? TIA (thanks-in-advance)

micro-events : SystemData should include the correlation id

SystemData captures metrics for active jobs. The correlation id past into ActiveEvents is not stored on SystemData, so any subscribers to the jobs Guava EventBus can't correlate back the exact event triggered.

Correlation id should be included in SystemData.

Spring seems does not like bean classes with the same name

Fox example:

In micro-mysql and micro-data plugins, we have:
com.aol.micro.server.mysql.distlock.datasource.DataSourceBuilder
com.aol.micro.server.spring.datasource.DataSourceBuilder

when both plugins appear on classpath, applications always can not find "mainDataSource" bean which should instantiated by com.aol.micro.server.spring.datasource.DataSourceBuilder

Modularise Microserver

Move all data-access into (Hibernate, JDBC, Spring Data)

Micro-data

Swagger into

Micro-swagger

Metrics into

Micro-metrics

Trying to access Jersey ResourceConfig when using micro-server

Our team is using micro-server, and I'm trying to register an annotation for us to use with our authentication solution.

Is there a way to access the ResourceConfig (in com.aol.micro.server.rest.Jersey.JerseyRestApplication.java) when using the micro-server code?

Question : Possible API change, remove Annotations and Configurable Module

This might make application configuration simpler, and slightly more functional.

Simplest example :

  Microserver.of("my-app")
                     .run();

Example with configuration

  Microserserver.of("my-app")
                          .filters(Filter1.class,Filter2.class)
                          .resourcesFromSpring(ResourceMarker.class,ResourceMarker2.class)
                          .onPort(8080)
                          .run();

It would open up the option of exposing the internals such as the Spring Context and Jersey itself for Configuration e.g.

  Microserserver.of("my-app")
                          .configureJersey( resourceConfig -> resourceConfig.property("myProperty"));

RestAnnotationClasses not available in ConfigurableModule

Per the docs for the most recent micro-server, a way to add annotation classes should be available in ConfigurableModule:

default List getRestAnnotationClasses() {
return Arrays.asList(Rest.class);
}

However, as of micro-server-0.5.8, there doesn't appear to be any way to add annotation classes via ConfigurableModule:

https://github.com/aol/micro-server/blob/master/micro-core/src/main/java/com/aol/micro/server/module/ConfigurableModule.java

Make host name configurable for application registry

Add a property (application or system) called host.address that overrides the value returned from InetAddress.getLocalHost().getHostName() for senders IP Address.

InetAddress.getLocalHost().getHostName() doesn't work inside Docker containers

WrongMethodTypeException: cannot convert MethodHandle(Object)Optional to (Object,Object)Object

Hi,

I am in the process of upgrading to version 0.62.

at startup, I'm calling JacksonUtil.getMapper() which causes this failure in cyclops.
stack trace below.

When I comment out the getMapper, I get a similar failure when getDefaultJaxRsPackage() is called.

Have you seen this before, or any ideas ?

Exception in thread "main" java.lang.invoke.WrongMethodTypeException: cannot convert MethodHandle(Object)Optional to (Object,Object)Object
at java.lang.invoke.MethodHandle.asTypeUncached(MethodHandle.java:776)
at java.lang.invoke.MethodHandle.asType(MethodHandle.java:770)
at java.lang.invoke.Invokers.checkGenericType(Invokers.java:366)
at com.aol.cyclops.lambda.api.InvokeDynamic.executeMethod(InvokeDynamic.java:106)
at com.aol.cyclops.lambda.api.InvokeDynamic.execute(InvokeDynamic.java:60)
at com.aol.cyclops.lambda.api.InvokeDynamic.lambda$execute$119(InvokeDynamic.java:44)
at com.aol.cyclops.lambda.api.InvokeDynamic$$Lambda$39/149047107.apply(Unknown Source)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:529)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:516)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
at com.aol.cyclops.lambda.api.InvokeDynamic.execute(InvokeDynamic.java:44)
at com.aol.cyclops.comprehensions.comprehenders.InvokeDynamicComprehender.of(InvokeDynamicComprehender.java:158)
at com.aol.cyclops.lambda.api.Comprehender.resolveForCrossTypeFlatMap(Comprehender.java:154)
at com.aol.cyclops.lambda.api.Comprehender.unwrapOtherMonadTypes(Comprehender.java:140)
at com.aol.cyclops.lambda.api.Comprehender.lambda$executeflatMap$2(Comprehender.java:92)
at com.aol.cyclops.lambda.api.Comprehender$$Lambda$31/926370398.apply(Unknown Source)
at com.aol.cyclops.comprehensions.comprehenders.InvokeDynamicComprehender.lambda$flatMap$27(InvokeDynamicComprehender.java:133)
at com.aol.cyclops.comprehensions.comprehenders.InvokeDynamicComprehender$$Lambda$36/422392391.apply(Unknown Source)
at com.aol.cyclops.comprehensions.comprehenders.FunctionExecutionInvocationHandler.invoke(FunctionExecutionInvocationHandler.java:23)
at com.sun.proxy.$Proxy3.apply(Unknown Source)
at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
at com.aol.cyclops.lambda.monads.SequenceM.forEach(SequenceM.java:1415)
at com.aol.micro.server.rest.jackson.JacksonUtil.getMapper(JacksonUtil.java:42)
at com.aol.advertising.psm.campaign.bootstrap.CampaignStartup.main(CampaignStartup.java:43)

Can't make it work in a Groovy script

Hi!

This looks like a very nice project. By its simplicity I started trying to write a Groovy script but couldn't make it work due to the lambda used on the init method.

I tried something like this:

@Grab('com.aol.microservices:micro-core:0.62')

import com.aol.micro.server.*
import com.aol.micro.server.auto.discovery.*
import javax.ws.rs.*

@Rest
@Path("/status")
class StatusApp {

    static void main(String[] args){
        def init = { -> "status-app"}
        def app = new MicroserverApp(init)
        // also tried like this
        //def app = new MicroserverApp({ -> "status-app" })
        app.run()
    }

    @GET
    @Produces("text/plain")
    @Path("/ping")
    String respondToPing() {
        return "pong!"
    }
}

I know this is probably related to how Groovy handles Java 8 lambdas (I've been Googling but can not find a way to use a Groovy closure as a Java lambda for this case). What would be the best approach to make this script work?

Any help or pointers in the right direction would be very appreciated.

Thanks

micro-reactive

Give option to connect to Pipes via Reactive Streams subscribers & publishers.

Support direct connect for jdk 8 Stream and Cyclops SequenceM

Reactive Microserver : Allow inter thread communication via Queues & Topics

Make use simple-reacts support for Streaming from async Queues and Topics.

E.g. we can register a Queue and get back an infinite LazyFutureStream.

 LazyFutureStream<String> logInfo = Pipes.registerQueue(LOG_LEVEL, 
                                            QueueFactories.   <String>boundedNonBlockingQueue(1000)
                                            .build());


    logInfo.pollStrategy(SPIN_WAIT).peek(this::updateLogLevel).run();

In our Rest Resources we can enqueue data to be processed and return immediately (if desired) e.g.

 this.enqueue(LOG_LEVEL, "DEBUG");

Wrong Gradle Shadow Plugin version

Current version is causing the eclipse gradle plugin to fail see example below:

FAILURE: Build failed with an exception.

  • Where:
    Build file 'C:\repositories\micro-server\build.gradle' line: 15

  • What went wrong:
    A problem occurred evaluating root project 'micro-server'.

    Failed to apply plugin [id 'com.github.johnrengelman.shadow']
    No signature of method: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar_Decorated.getManifest() is applicable for argument types: () values: []
    Possible solutions: getManifest(), getManifest(), getManifest(), setManifest(org.gradle.api.java.archives.Manifest), setManifest(org.gradle.api.java.archives.Manifest), manifest(groovy.lang.Closure)

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 1.122 secs

I fixed myself changing to the current version recommended on the wiki fo the project repository

https://github.com/johnrengelman/shadow to

classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.0'

and worked well

beanvalidator conflict with Hibernate 5 / JBoss Logging

'org.glassfish.hk2.external:bean-validator:2.4.0-b31' has it's own internal version of JBoss Logging that conflicts with

org.jboss.logging:jboss-logging:3.30 used in Hibernate 5. This results in exceptions when Hibernate attempts to access newer logging methods such as

  Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.