Giter VIP home page Giter VIP logo

openliberty / open-liberty Goto Github PK

View Code? Open in Web Editor NEW
1.1K 38.0 576.0 924.36 MB

Open Liberty is a highly composable, fast to start, dynamic application server runtime environment

Home Page: https://openliberty.io

License: Eclipse Public License 2.0

Java 96.26% Gherkin 0.32% JavaScript 2.68% Shell 0.06% Batchfile 0.02% Dockerfile 0.01% HTML 0.45% Makefile 0.01% CSS 0.16% Smalltalk 0.01% Ruby 0.01% XSLT 0.01% Python 0.01% Objective-J 0.01% SCSS 0.03% VBScript 0.01% Perl 0.01%

open-liberty's Introduction

title


Maven Central Container Images Website Stack Overflow Groups.io License Twitter

Summary

A lightweight open framework for building fast and efficient cloud-native Java microservices:

  • Open Liberty is fast to start up with low memory footprint and live reload for quick iteration.
  • Simple to add and remove features from the latest versions of MicroProfile and Java EE.
  • Zero migration lets you focus on what's important, not the APIs changing under you.

Getting Started

Launch a sample app using Maven

git clone https://github.com/OpenLiberty/sample-getting-started.git
cd sample-getting-started
mvn clean package liberty:run

Open browser to http://localhost:9080/ and explore the demo application.

See this guide to learn how it works.

Downloads

Usage

Docker

  • This guide demonstrates development using Docker containers.

Maven

  • This guide demonstrates development using the Liberty Maven Plugin.

Command Line

Open Liberty Docs

Contributing

Our CONTRIBUTING document contains details for submitting pull requests. FYI: The project recently renamed master branch to release. More info here: https://github.com/OpenLiberty/open-liberty/wiki/Master-rename-to-Release

Running a Build

  1. Clone the repository to your system.

     git clone [email protected]:OpenLiberty/open-liberty.git
    
  2. Run a gradle build.

     cd open-liberty/dev
     ./gradlew cnf:initialize
     ./gradlew assemble
    
  3. Run the unit or FAT tests.

    ./gradlew test for unit tests

    ./gradlew build.example_fat:buildandrun to run a FAT project

    NOTE: ./gradlew build runs the assemble and test tasks

  4. Perform a local release

    ./gradlew releaseNeeded

    NOTE: This task releases all projects to the local releaseRepo. The final openliberty zip can be found in

    open-liberty\dev\cnf\release\dev\openliberty\<version>\openliberty-xxx.zip

License

Usage is provided under the EPL 2.0 license See LICENSE for the full details.

open-liberty's People

Contributors

aguibert avatar andymc12 avatar anjumfatima90 avatar arunavemulapalli avatar ayoho avatar azquelt avatar benjamin-confino avatar brenthdaniel avatar brutif avatar c00crane avatar cbridgha avatar channyboy avatar hlhoots avatar jgrassel avatar jhanders34 avatar jonhawkes avatar kristip17 avatar kyleaure avatar neilgsyoung avatar neuwerk avatar njr-11 avatar pnicolucci avatar tbitonti avatar tevans78 avatar tjwatson avatar tkburroughs avatar toshiyamamoto avatar utle avatar volosied avatar wtlucy 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

open-liberty's Issues

SIB JMS unicode string transmission problem

Strings containing unicode supplementary code points are not transmitted correctly in SIB JMS messages, as they are currently written in Modified-UTF8 but read in (strict) UTF8.

The fix will be to read and write strings in strict UTF8, except for the implementation of BytesMessage.readUTF() & BytesMessage.writeUTF(), which will read and write strings in modified-UTF8, to be similar to DataOutput.writeUTF() and DataInput.readUTF().

Add LDAP membership attribute

Membership defined on groups is working properly, but membership defined on users is not working if any LDAP filters are set.

Issues raised by non-members should be labelled for member attention

Because we have a high volume of issues opened/owned by OpenLiberty members, it would be easy to miss issues that are raised by non-members who have no power to properly label their issue for attention. Ideally, OpenLiberty members should be able to query for issues raised by non-members so the members can process the issues in a timely manner.

Suggestion: When a user who is not a member of the OpenLiberty organization raises an issue, Rosie ought to tag the issue with a label such as [Needs member attention] so that members can easily query for these issues. Also, members should be able to remove the tag once the issue has received some initial level of member attention (i.e. don't have rosie re-add the tag if removed)

Moving in session.db

Need to move \dev\com.ibm.ws.session.db from internal repo to open-liberty.

Need to move nl props to proper location
Need to fix copyrights

bnd and gradle files already there, but need to check if changes with .classpath and build.xml

JAX-RS security without a web.xml

Currently, in jaxrs-2.0 and jaxrs-2.1 with the appSecurity-2.0 feature enabled, it is possible for a user to add @DenyAll, @PermitAll, and @RolesAllowed annotations to JAX-RS resources and expect security (authentication and authorization), but only if the user has also provided a web.xml that defines the security constraints for the URIs exposed by the resources. The security constraints in the web.xml is required for authentication. Only when the user is authenticated would the @RolesAllowed annotation be of any use for authorization - if the user is not authenticated, then that user is most likely not in any roles.

This issue should address this gap by distinguishing between a user that is unauthenticated (in which case a 401 should be returned so that the client could retry the request with the proper credentials) and one that is unauthorized (in which case a 403 should be returned).

assemble fails in task jsonp.1.0:jar: Files do not exist

Attempting to follow the contributing instructions on macOS 10.12. Cloning and cnf:initialize work fine, but assemble or releaseNeeded fail with Project com.ibm.websphere.javaee.jsonp.1.0 has errors, 24 errors were reported. I note that the files all have names starting with "ibm" and that it is looking at the JRE on my $PATH which is an Oracle JRE.

Full output:

PowerBook-i73000:dev liamwestby$ ./gradlew --stacktrace assemble

> Configure project :com.ibm.websphere.javaee.management.j2ee.1.1
-d /Users/liamwestby/Documents/Programming/open-liberty/dev/com.ibm.websphere.javaee.management.j2ee.1.1/build/classes/java/main
-cp /Users/liamwestby/Documents/Programming/open-liberty/dev/com.ibm.websphere.javaee.management.j2ee.1.1/build/classes/java/main:/Users/liamwestby/Documents/Programming/open-liberty/dev/com.ibm.websphere.javaee.ejb.3.2/build/libs/com.ibm.websphere.javaee.ejb.3.2.jar:/Users/liamwestby/Documents/Programming/open-liberty/dev/com.ibm.ws.org.osgi.annotation.versioning/build/libs/com.ibm.ws.org.osgi.annotation.versioning.jar

> Task :com.ibm.websphere.javaee.jsonp.1.0:jar
Warning: There is an empty jar or directory on the classpath: main
Warning: Imports that lack version ranges: [org.glassfish.json]
Warning: Unreferenced class path entries [javax.json-1.0.4, main]
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmcertpathfw.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjcefw.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjgssfw.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjgssprovider.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjssefw.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmorbapi.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmpkcs.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/math.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/rt.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/bin/default/jclSC180/vm.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/xml.jar
Error  : Cannot find /error/File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/xmldsigfw.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmcertpathfw.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjcefw.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjgssfw.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjgssprovider.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmjssefw.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmorbapi.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/ibmpkcs.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/math.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/rt.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/bin/default/jclSC180/vm.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/xml.jar
Error  : File does not exist: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/jre/lib/xmldsigfw.jar


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':com.ibm.websphere.javaee.jsonp.1.0:jar'.
> Project com.ibm.websphere.javaee.jsonp.1.0 has errors, 24 errors were reported

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':com.ibm.websphere.javaee.jsonp.1.0:jar'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:242)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:95)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:235)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:224)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:121)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:77)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:102)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:96)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:612)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:567)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:96)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:46)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.GradleException: Project com.ibm.websphere.javaee.jsonp.1.0 has errors, 24 errors were reported
        at aQute.bnd.gradle.BndPlugin.checkErrors(BndPlugin.groovy:515)
        at aQute.bnd.gradle.BndPlugin.checkErrors(BndPlugin.groovy)
        at aQute.bnd.gradle.BndPlugin.this$2$checkErrors(BndPlugin.groovy)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:479)
        at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:191)
        at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:80)
        at org.gradle.internal.metaobject.BeanDynamicObject$GroovyObjectAdapter.invokeOpaqueMethod(BeanDynamicObject.java:579)
        at org.gradle.internal.metaobject.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:506)
        at org.gradle.internal.metaobject.BeanDynamicObject.tryInvokeMethod(BeanDynamicObject.java:191)
        at org.gradle.internal.metaobject.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:80)
        at aQute.bnd.gradle.BndPlugin$_apply_closure1_closure13_closure48.doCall(BndPlugin.groovy:264)
        at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:670)
        at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:651)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:317)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:309)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:185)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:95)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
        ... 27 more


BUILD FAILED in 48s
5 actionable tasks: 3 executed, 2 up-to-date

Fix cache labels in ldapRegistry-3.0 feature.

I made the following changes in the metatype for ldapRegistry-3.0, but they failed the schema validation tests. Instead of holding up the fixes for a customer, I created this issue.

sizeLimit=Maximum entity attributes cached
sizeLimit.desc=The maximum number of attributes per LDAP entity that will be cached.
resultsSizeLimit=Maximum search results cached
resultsSizeLimit.desc=The maximum number of results that can be cached for a single LDAP search.

Exceptions will need to be added into com.ibm.ws.config.internal.schemaChecker.MetaTypeValidatorTest.java to allow the 'attribute' banned word to be used.

junit.framework.AssertionFailedError: The label for attribute sizeLimit of type com.ibm.ws.security.wim.adapter.ldap.attributeCache contains the banned word attribute in the label "Maximum entity attributes cached".
	at com.ibm.ws.config.internal.schemaChecker.MetaTypeValidator$FailureRecord.<init>(MetaTypeValidator.java:102)
	at com.ibm.ws.config.internal.schemaChecker.MetaTypeValidator$FailureRecord.<init>(MetaTypeValidator.java:94)
	at com.ibm.ws.config.internal.schemaChecker.MetaTypeValidator.validateAnnotation(MetaTypeValidator.java:483)
	at com.ibm.ws.config.internal.schemaChecker.MetaTypeValidator.validateAnnotation(MetaTypeValidator.java:522)
	at com.ibm.ws.config.internal.schemaChecker.MetaTypeValidator.validateType(MetaTypeValidator.java:418)
	at com.ibm.ws.config.internal.schemaChecker.MetaTypeValidator.suite(MetaTypeValidator.java:363)
	at com.ibm.ws.config.internal.schemaChecker.MetaTypeValidator.<init>(MetaTypeValidator.java:271)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:437)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:437)

Introspector for Programmatically Constructed Policy Executors

User story:
"As a user of Liberty policy executors, I want server dump to gather information on programmatically configured policy executors such as the queue capacity and threads utilized and maybe even a list of queued tasks/running tasks so that I can debug performance problems and hangs."

MicroProfile Health check fails when server has an OSGi app (internal or external) or a WAR without any CDI beans

The common theme here is that the Health Check discovery can fail because of the presence of other deployed application modules that aren't themselves contributing Health Check beans. These can be true application modules or internal, "system" app modules.

In these cases, the health endpoint (e.g. http://localhost:9080/health) will return a response status of 500.

There are two main cases, with different response payloads (which will also include a stack trace):

In the one case, in which there is an OSGi application (external app or "system app") deployed contributing a web module, the error response looks like:

java.lang.IllegalStateException: ClassLoader ID is null for application component com.ibm.ws.microprofile.metrics#com.ibm.ws.microprofile.metrics. Verify the application component is installed.
	at com.ibm.ws.microprofile.health.services.impl.AppModuleContextService.getContextClassLoaderIdentifier(AppModuleContextService.java:151)
	at com.ibm.ws.microprofile.health.services.impl.AppModuleContextService.createThreadContext(AppModuleContextService.java:169)
	at com.ibm.ws.microprofile.health.services.impl.AppModuleContextService.createContextualProxy(AppModuleContextService.java:195)
	at com.ibm.ws.microprofile.health.services.impl.HealthExecutorImpl.runHealthChecks(HealthExecutorImpl.java:69)
	at com.ibm.ws.microprofile.health.internal.HealthCheckServiceImpl.performHealthCheck(HealthCheckServiceImpl.java:107)
	at com.ibm.ws.microprofile.health.internal.servlet.HealthCheckServlet.service(HealthCheckServlet.java:53)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1255)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:743)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:440)
        ... stack trace continues ...

In the second case, in which there is a WAR module deployed, but one in which there are zero discovered CDI-managed beans, the exception in the response looks like:

javax.naming.NameNotFoundException: javax.naming.NameNotFoundException: java:comp/BeanManager
	at com.ibm.ws.jndi.url.contexts.javacolon.internal.JavaURLContext.lookup(JavaURLContext.java:355)
	at com.ibm.ws.jndi.url.contexts.javacolon.internal.JavaURLContext.lookup(JavaURLContext.java:370)
	at org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161)
	at javax.naming.InitialContext.lookup(InitialContext.java:428)
	at com.ibm.ws.microprofile.health.services.impl.HealthCheckCDIBeanInvokerImpl.getHealthCheckBeans(HealthCheckCDIBeanInvokerImpl.java:71)
	at com.ibm.ws.microprofile.health.services.impl.HealthCheckCDIBeanInvokerImpl.checkAllBeans(HealthCheckCDIBeanInvokerImpl.java:51)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
	at java.lang.reflect.Method.invoke(Method.java:508)
	at com.ibm.ws.context.service.serializable.ContextualInvocationHandler.invoke(ContextualInvocationHandler.java:76)
	at com.ibm.ws.context.service.serializable.ContextualInvocationHandler.invoke(ContextualInvocationHandler.java:97)
	at com.sun.proxy.$Proxy41.checkAllBeans(Unknown Source)
	at com.ibm.ws.microprofile.health.services.impl.HealthExecutorImpl.runHealthChecks(HealthExecutorImpl.java:72)
	at com.ibm.ws.microprofile.health.internal.HealthCheckServiceImpl.performHealthCheck(HealthCheckServiceImpl.java:107)
	at com.ibm.ws.microprofile.health.internal.servlet.HealthCheckServlet.service(HealthCheckServlet.java:53)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1255)
	at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:743)

javaee.servlet.4.0 project references internal.prereq.java

the bnd.bnd file in javaee.servlet.4.0 references:

com.ibm.ws.internal.prereq.java:java.ibmjgssprovider;strategy=exact;version=1.8.0,\

which needs to come out.

Additionally, the cross compile bootclasspaths are figured out internally for you so you'll never need to add a JDK library to a buildpath.

CLA Label changes proposed

Existing IBM Org members are getting the "CLA Not Needed" label applied, but should be made more specific like "CLA covered under Corporate Agreement" - but obviously too long.

In general - it should be clear why the CLA signature is not needed in this case, as IBM employees are automatically covered.

Will consider options.

LibbyBot is not scanning additional pull request pushes

LibbyBot is properly scanning the changes when a pull request is opened, but not when additional commits are pushed to a branch with an existing pull request. The problem seems to be that the git event feed doesn't include the extra push events to existing branches, but we are still investigating.

Concurrency policy / PolicyExecutor for Microprofile and Managed Executors

This epic enhances and provides the policy executor for enforcing concurrency constraints, as well as queuing constraints and run policies, with execution that is backed by the Liberty global thread pool, so that it can be used by Microprofile FaultTolerance and Managed Executors.

Policy executor (an ExecutorService) will be provided as a configuration-based OSGi service component via the concurrencyPolicy element, with the following attributes:

  • expedite - specifies a core number of tasks that the policy executor should aim to run concurrently by expediting requests to the global thread pool. This provides no guarantee that this many tasks will be running concurrently. The default value is 0.
  • max (maximum concurrency) - specifies the maximum number of tasks from this threading policy that can be running at any given point in time. The default value is -1 which means unlimited.
  • maxPolicy - Indicates whether to loosely or strictly enforce maximum concurrency for tasks that run on the thread that invokes untimed invokeAll and untimed invokeAny (with a single task), and in the case where runIfQueueFull=true, the execute and submit methods. Values are loose and strict. A value of loose, which is the default, allows tasks to run on the submitter’s thread without counting against maximum concurrency. A value of strict counts tasks that run on the submitter’s thread towards maximum concurrency and does not allow running on the submitter’s thread if already at maximum concurrency.
  • maxQueueSize - Specifies the maximum number of tasks that can be queued for execution. As tasks are started or canceled, they are removed from the queue. When the queue is at capacity and another task is submitted, the behavior is determined by the maxWaitForEnqueue and runIfQueueFull attributes. The default value is -1 which means unlimited.
  • maxWaitForEnqueue - Specifies the maximum amount of time to wait for enqueuing a submitted task. If unable to enqueue the task within this interval, the task submission is subject to the runIfQueueFull policy. A value of 0 (which is the default) indicates to not wait at all, in which case, if there is not a queue position available, the runIfQueueFull policy is immediately applied. The maxWaitForEnqueue does not apply in cases where untimed invokeAll (or untimed invokeAny with a single task) is able to run tasks on the caller's thread.
  • runIfQueueFull - Indicates whether or not to use the thread upon which submit or execute is invoked to run the task if the queue is full and the maxWaitForEnqueue has been exceeded. The default value is false.
  • startTimeout - Specifies a number of milliseconds, starting at task submit, after which a task should not start. The default value of -1 means no timeout. Can override on a per-task basis.

invokeAll for policy executor

User stories:
"As a user of Liberty policy executors, I want to submit a group of tasks and have control returned to the current thread after they have all completed, so that operations performed after this point can rely upon their completion."
"As a user of Liberty policy executors, I want a variant of invokeAll to be subject to a timeout, in order to place an upper bound on the amount of time that I am willing to wait for their completion."

Need to complete the invokeAll function for policy executor.

NullPointerException when authResult is null after TAI not intercepted.

While Liberty prepares webReply for an incoming web request, if it is not authenticated by TAI, it may throw NullPointerException from recently added audit code. The audit code was trying to collect as much information as possible and in one code area, accessed authResult without null check.

Fix Open liberty build generating a beta version scheme

Two things need to be considered:

  1. The flag "release.version.override" should also change the product version -
    Today is still shows the "beta" version.

  2. If no override is set - should OL build have a different versioning scheme? OL won't have beta's
    So maybe we need a new scheme

invokeAny for policy executor

User stories:
"As a user of Liberty policy executors, I want to submit a group of tasks and wait for at least one to complete, with the others being canceled, so that operations performed after this point can rely upon completion of at least one of the tasks."
"As a user of Liberty policy executors, I want a variant of invokeAny to be subject to a timeout, in order to place an upper bound on the amount of time that I am willing to wait for their completion."

FaultTolerance: Add further test coverage

Additional tests are required for the following;

Asynchronous + Circuit Breaker
Asynchronous + Fallback
Asynchronous double jump - FAT test is disabled

Bulkhead config
Bulkhead validation
Bulkhead + CircuitBreaker
Bulkhead + Fallback

CircuitBreaker config
CircuitBreaker validation
CircuitBreaker + Fallback
CircuitBreaker + Retry

Fallback + Timeout
Timeout config
Timeout validation
Fallback validation
Retry validation

Need to update Equinox Framework to address bundle ID lock issues

See Equinox bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=522313

When liberty is deployed with a massive number of applications there is a risk of timing out the bundle id lock required to install gateway bundles. Gateway bundles are installed for each application deployed to liberty in order to grant API visibility to the application class loaders. The issue comes while installing the gateway bundles in parallel while deploying the massive number of applications. The stacktrace looks like this when it occurs:

    org.osgi.framework.BundleException: Failed to obtain id locks for installation.
	at org.eclipse.osgi.storage.Storage.getNextRootID(Storage.java:895)
	at org.eclipse.osgi.storage.Storage.install(Storage.java:527)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.installBundle(BundleContextImpl.java:146)
	at org.eclipse.equinox.internal.region.BundleIdBasedRegion.installBundle0(BundleIdBasedRegion.java:117)
	at org.eclipse.equinox.internal.region.BundleIdBasedRegion.installBundleAtLocation(BundleIdBasedRegion.java:97)
	at com.ibm.ws.dynamic.bundle.BundleFactory.createBundle(BundleFactory.java:175)
	at com.ibm.ws.classloading.internal.GatewayBundleFactory.createGatewayBundle(GatewayBundleFactory.java:149)
	at com.ibm.ws.classloading.internal.GatewayBundleFactory.createGatewayBundleClassLoader(GatewayBundleFactory.java:88)
	at com.ibm.ws.classloading.internal.ClassLoaderFactory.inferParentLoader(ClassLoaderFactory.java:156)
	at com.ibm.ws.classloading.internal.ClassLoaderFactory.createClassLoader(ClassLoaderFactory.java:127)
	at com.ibm.ws.classloading.internal.ClassLoaderFactory.create(ClassLoaderFactory.java:108)
	at com.ibm.ws.classloading.internal.ClassLoadingServiceImpl.createTopLevelClassLoader(ClassLoadingServiceImpl.java:217)
	at com.ibm.ws.classloading.internal.ClassLoadingServiceImpl.createTopLevelClassLoader(ClassLoadingServiceImpl.java:82)
	at com.ibm.ws.classloading.ClassLoaderConfigHelper.createTopLevelClassLoader(ClassLoaderConfigHelper.java:324)
	at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.createTopLevelClassLoader(DeployedAppInfoBase.java:465)
	at com.ibm.ws.app.manager.war.internal.WARDeployedAppInfo.createModuleClassLoader(WARDeployedAppInfo.java:107)
	at com.ibm.ws.app.manager.module.internal.ExtendedModuleInfoImpl.getClassLoader(ExtendedModuleInfoImpl.java:123)
	at com.ibm.ws.container.service.annotations.internal.WebAnnotationsImpl.<init>(WebAnnotationsImpl.java:155)
	at com.ibm.ws.container.service.annotations.internal.WebAnnotationsAdapter.adapt(WebAnnotationsAdapter.java:77)
	at com.ibm.ws.container.service.annotations.internal.WebAnnotationsAdapter.adapt(WebAnnotationsAdapter.java:32)
	at com.ibm.ws.adaptable.module.internal.AdapterFactoryServiceImpl.adapt(AdapterFactoryServiceImpl.java:193)
	at com.ibm.ws.adaptable.module.internal.AdaptableContainerImpl.adapt(AdaptableContainerImpl.java:171)
	at com.ibm.ws.webcontainer.osgi.container.config.WebAppConfigurator.configure(WebAppConfigurator.java:376)
	at com.ibm.ws.webcontainer.osgi.container.config.WebAppConfigurationAdapter.adapt(WebAppConfigurationAdapter.java:116)
	at com.ibm.ws.webcontainer.osgi.container.config.WebAppConfigurationAdapter.adapt(WebAppConfigurationAdapter.java:44)
	at com.ibm.ws.adaptable.module.internal.AdapterFactoryServiceImpl.adapt(AdapterFactoryServiceImpl.java:193)
	at com.ibm.ws.adaptable.module.internal.AdaptableContainerImpl.adapt(AdaptableContainerImpl.java:171)
	at com.ibm.ws.webcontainer.osgi.WebContainer.createModuleMetaData(WebContainer.java:777)
	at com.ibm.ws.app.manager.module.internal.ModuleHandlerBase.createModuleMetaData(ModuleHandlerBase.java:64)
	at com.ibm.ws.app.manager.module.internal.SimpleDeployedAppInfoBase$ModuleContainerInfoBase.createModuleMetaData(SimpleDeployedAppInfoBase.java:169)
	at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.preDeployApp(DeployedAppInfoBase.java:364)
	at com.ibm.ws.app.manager.module.internal.DeployedAppInfoBase.deployApp(DeployedAppInfoBase.java:403)
	at com.ibm.ws.app.manager.war.internal.WARApplicationHandlerImpl.install(WARApplicationHandlerImpl.java:66)
	at com.ibm.ws.app.manager.internal.statemachine.StartAction.execute(StartAction.java:141)
	at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.enterState(ApplicationStateMachineImpl.java:1253)
	at com.ibm.ws.app.manager.internal.statemachine.ApplicationStateMachineImpl.run(ApplicationStateMachineImpl.java:866)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1153)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.lang.Thread.run(Thread.java:785)

DDParser does not handle attribute with namespace=""

com.ibm.ws.javaee.ddmodel/src/com/ibm/ws/javaee/ddmodel/web/common/WebAppType.java implements the method handleAttribute(DDParser parser, String nsURI, String localName, int index) called in com.ibm.ws.javaee.ddmodel/src/com/ibm/ws/javaee/ddmodel/DDParser.parse(ParsableElement parsable) method to parse xml.

Currently it just handles namespace == null and does not handle if the namespace is equal to "".

Some implementations of XMLStreamReader returns null and others "" (empty string) when there is no namespace for an attribute.

JDK bootclasspath needs to be more flexible

In open-liberty/dev/cnf/build.bnd we wire the bootclasspath to an IBM JDK.

The code would compile fine with any recent JDK, but right now it's wired to those libraries. We should update it to be more flexible.

Open Liberty package filtering

We need the ability to include/exclude features.

Our builds could have a list of excluded features / bundles for instance.

Use JSON-P and JSON-B RI or use Apache Johnzon

Had a call today to discuss whether to use the reference implementations for JSON-P/JSON-B as was the case when the features were first released in the WebSphere Liberty beta, or to use Apache Johnzon as is currently the case for Open Liberty.

Currently JSON-P 1.0 is based on the reference implementation.

On the conference call was @kwsutter @NottyCode @aguibert @njr-11 @andymc12 @WhiteCat22 @realModusOperandi @alexsm82

The discussion looked at 3 issues:

  1. Would there be any migration problems for someone going from JSON-P 1.0 to JSON-P 1.1 if we change implementation
  2. Which JSON-B implementation has the failure semantics we preferred
  3. Which JSON-P/JSON-B implementations perform better.

Interestingly although Jackson has the best performance when you are running in a Java SE environment when used from JAX-RS in Liberty the performance of Jackson, Johnzon and the RI's are similar. Jackson is best for serialization, and Johnson for deserialization and the reference implementation is in the middle. This suggests that while Jackson has the best performance in raw terms, the marshalling and unmarshalling of the JSON is such a small component of the JAX-RS performance that it doesn't matter which is used.

Moving from JSON-P to Johnzon would result in some differences in behaviour. When calling build on a JsonObjectBuilder or a JsonArrayBuilder the RI resets the map. So you can call build, and reuse the builder. However Johnzon throws a NullPointerException on a JsonObjectBuilder and the JsonArrayBuilder acts as if all the state added prior to the build is still there. Both of these would likely surprise and disappoint people used to the behaviour of the reference implementation.

In general none of the implementations have first class parse error messages, so that wasn't a major issue, but Johnzon tended not to provide context for the failure, so if it reported an error message it would tell you the value, but not the attribute, nor where in the json structure the error was which could make debug quite hard.

Overall the decision was made that the RI should be used in favour of Johzon, however given the problems found in Johnzon are ones we think others would see we will contact the Apache Johnzon community to let them know of our findings.

There was one interesting behaviour of the JSON-B reference implementation that wasn't liked and seemed inconsistent with jackson and johnzon which is that if you tried to put a JsonObject into a String in the reference implementation you end up with the Object being created with an empty string injected, the others threw exceptions. It was felt that fail fast would be preferable as a default object and the behaviour of the reference implementation was thus not ideal. It also contrasts badly with the behaviour of JPA entities which would throw an error if the database row type and the entity type were incompatible.

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.