javaee / fighterfish Goto Github PK
View Code? Open in Web Editor NEWModules supporting use of OSGi by Java EE applications.
License: Other
Modules supporting use of OSGi by Java EE applications.
License: Other
When bundle osgi-javaee-base
started during server startup it's activator starts ExtenderManager
which tracks registered Extender
s and starts them in turn.
When started, JavaEEExtender
initializes OSGiContainer
to track OSGiDeployer
s and to launch a DeployerAddedThread
thread whenever deployer is registered. Then it opens a bundle tracker to schedule a deploy of any registered bundles as a task in a separate local thread pool.
These threads are racing to deploy bundle using deploy
method of OSGiContainer
. When application was first deployed by DeployerAddedThread
, it skips the second deployment. In other case, when application was first deployed by the task in JavaEEExtender
, it is undeployed and deployed once again.
While this should not present an issue other than a slightly longer startup for well-written applications, it can be fatal for poorly written one. For instance, any CDI beans, registered as an OSGi service and not unregistered during undeployment, become defunct; singletons that reference application scoped objects (such as ServletContext
) do not work properly, etc. Beside that glassfish apparently has some issues cleaning-up OSGi services, and such application redeployment contributes to a memory leak.
This race condition also requires OsgiWebDeployer
to be registered before JavaEEExtender
starts. But since extenders are OSGi services defined in (usually) autostarted bundles, their launch order is platform-dependent. In case of my installation this order depends on jar-file creation order.
I was able to easily reproduce the issue on my installation by setting up one-thread breakpoint in the first line of DeployerAddedThread
run
method and waiting for task to deploy applications in other threads.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.