Hi
Iam looking to develop a REST based webservice but I don't want to use any
application server. All I am looking is to start my application which in
turn should start the http server with CDI along with Jax-RS. I felt
OpenEJB is the right tool for this.
I have used "com.sun.net.httpserver.HttpServer" as http server and Jersey
for my Jax-RS implementation and now I would like to use OpenEJB for CDI.
When I tried to write something like
public static void main(String[] args) throws Exception {
MyBootStrap bootStrap= new MyBootStrap();
Properties p = new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
p.setProperty("com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager",
"true");
EJBContainer.createEJBContainer(p).getContext().bind("inject",
bootStrap);
HttpServer server = HttpServer.create(new InetSocketAddress(9998),
0);
HttpHandler sf = RuntimeDelegate.getInstance().createEndpoint(new
ApplicationConfig(), HttpHandler.class);
server.createContext("/", sf);
server.start();
}
But when I start my application then I am getting exception.
java.lang.RuntimeException: javax.naming.NoInitialContextException: Need to
specify class name in environment or system property, or as an applet
parameter, or in an application resource file: java.naming.factory.initial
at
com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:196)
at
com.sun.jersey.server.impl.cdi.CDIExtension.beforeBeanDiscovery(CDIExtension.java:297)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:295)
at
org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:429)
...More
Detail exception is attached as attachment.
I am not understanding how to trigger the CDI while starting http server.
Please give me some pointers if I am doing any wrong or if I should use any
thing more.
Thanks in advance.
--
Thanks and Regards
N Radhakrishna Kalyan
P: +46 733 312 584
http://about.me/nrkkalyan
<http://about.me/nrkkalyan>
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in
[jar:file:/C:/Users/rnimmagadda/.gradle/caches/artifacts-23/filestore/org.slf4j/slf4j-jdk14/1.7.2/jar/a31607d3a669240a0c282eda69bfefa7e8e05d75/slf4j-jdk14-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/C:/Users/rnimmagadda/.gradle/caches/artifacts-23/filestore/org.slf4j/slf4j-log4j12/1.7.5/jar/6edffc576ce104ec769d954618764f39f0f0f10d/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.JDK14LoggerFactory]
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO:
********************************************************************************
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: OpenEJB http://openejb.apache.org/
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: Startup: Sat Oct 19 16:45:58 CEST 2013
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: Copyright 1999-2012 (C) Apache OpenEJB Project, All Rights Reserved.
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: Version: 4.5.2
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: Build date: 20130320
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: Build time: 03:56
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO:
********************************************************************************
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: openejb.home = C:\DRWP\Workspace-Aug\OpenEJB-QuickStart
2013-okt-19 16:45:58 org.apache.openejb.OpenEJB$Instance <init>
INFO: openejb.base = C:\DRWP\Workspace-Aug\OpenEJB-QuickStart
2013-okt-19 16:45:58 org.apache.openejb.cdi.CdiBuilder initializeOWB
INFO: Created new singletonService
org.apache.openejb.cdi.ThreadSingletonServiceImpl@7cfefe3f
2013-okt-19 16:45:58 org.apache.openejb.cdi.CdiBuilder initializeOWB
INFO: Succeeded in installing singleton service
2013-okt-19 16:45:58 org.apache.openejb.util.OptionsLog info
INFO: Using 'javax.ejb.embeddable.EJBContainer=true'
2013-okt-19 16:45:58 org.apache.openejb.config.ConfigUtils
searchForConfiguration
INFO: Cannot find the configuration file [conf/openejb.xml]. Will attempt to
create one for the beans deployed.
2013-okt-19 16:45:58 org.apache.openejb.config.ConfigurationFactory
configureService
INFO: Configuring Service(id=Default Security Service, type=SecurityService,
provider-id=Default Security Service)
2013-okt-19 16:45:58 org.apache.openejb.config.ConfigurationFactory
configureService
INFO: Configuring Service(id=Default Transaction Manager,
type=TransactionManager, provider-id=Default Transaction Manager)
2013-okt-19 16:45:58 org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating TransactionManager(id=Default Transaction Manager)
2013-okt-19 16:45:58 org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating SecurityService(id=Default Security Service)
2013-okt-19 16:45:59 org.apache.openejb.config.DeploymentsResolver
loadFromClasspath
INFO: Inspecting classpath for applications: 24 urls. Consider adjusting your
exclude/include. Current settings: openejb.deployments.classpath.exclude='',
openejb.deployments.classpath.include='.*'
2013-okt-19 16:46:00 org.apache.openejb.config.DeploymentsResolver processUrls
INFO: Found EjbModule in classpath: c:\drwp\workspace-aug\openejb-quickstart\bin
2013-okt-19 16:46:00 org.apache.openejb.config.DeploymentsResolver
loadFromClasspath
INFO: Searched 24 classpath urls in 1090 milliseconds. Average 45 milliseconds
per url.
2013-okt-19 16:46:00 org.apache.openejb.config.ConfigurationFactory
loadApplication
INFO: Beginning load: c:\drwp\workspace-aug\openejb-quickstart\bin
2013-okt-19 16:46:00 org.apache.openejb.config.ConfigurationFactory
configureApplication
INFO: Configuring enterprise application:
C:\DRWP\Workspace-Aug\OpenEJB-QuickStart
2013-okt-19 16:46:00 org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb Course: EjbDeployment(deployment-id=Course)
2013-okt-19 16:46:00 org.apache.openejb.config.ConfigurationFactory
configureService
INFO: Configuring Service(id=Default Managed Container, type=Container,
provider-id=Default Managed Container)
2013-okt-19 16:46:00 org.apache.openejb.config.AutoConfig createContainer
INFO: Auto-creating a container for bean OpenEJB-QuickStart.Comp484661004:
Container(type=MANAGED, id=Default Managed Container)
2013-okt-19 16:46:00 org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Container(id=Default Managed Container)
2013-okt-19 16:46:00 org.apache.openejb.core.managed.SimplePassivater init
INFO: Using directory C:\Users\RNIMMA~1\AppData\Local\Temp for stateful session
passivation
2013-okt-19 16:46:00 org.apache.openejb.config.ConfigurationFactory
configureService
INFO: Configuring Service(id=Default Stateless Container, type=Container,
provider-id=Default Stateless Container)
2013-okt-19 16:46:00 org.apache.openejb.config.AutoConfig createContainer
INFO: Auto-creating a container for bean Course: Container(type=STATELESS,
id=Default Stateless Container)
2013-okt-19 16:46:00 org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Container(id=Default Stateless Container)
2013-okt-19 16:46:00 org.apache.openejb.config.AppInfoBuilder build
INFO: Enterprise application "C:\DRWP\Workspace-Aug\OpenEJB-QuickStart" loaded.
2013-okt-19 16:46:00 org.apache.openejb.assembler.classic.Assembler
createApplication
INFO: Assembling app: C:\DRWP\Workspace-Aug\OpenEJB-QuickStart
2013-okt-19 16:46:00 org.apache.openejb.assembler.classic.JndiBuilder bindJava
INFO: Jndi(name="java:global/OpenEJB-QuickStart/Course!org.gradle.Course")
2013-okt-19 16:46:00 org.apache.openejb.assembler.classic.JndiBuilder bindJava
INFO: Jndi(name="java:global/OpenEJB-QuickStart/Course")
2013-okt-19 16:46:00 org.apache.openejb.cdi.CdiBuilder initSingleton
INFO: Existing thread singleton service in SystemInstance():
org.apache.openejb.cdi.ThreadSingletonServiceImpl@7cfefe3f
2013-okt-19 16:46:00 org.apache.openejb.cdi.OpenEJBLifecycle startApplication
INFO: OpenWebBeans Container is starting...
2013-okt-19 16:46:00 org.apache.webbeans.plugins.PluginLoader startUp
INFO: Adding OpenWebBeansPlugin : [CdiPlugin]
2013-okt-19 16:46:00 org.apache.openejb.cdi.OpenEJBLifecycle startApplication
ALLVARLIG: CDI Beans module deployment failed
java.lang.RuntimeException: javax.naming.NoInitialContextException: Need to
specify class name in environment or system property, or as an applet
parameter, or in an application resource file: java.naming.factory.initial
at
com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:196)
at
com.sun.jersey.server.impl.cdi.CDIExtension.beforeBeanDiscovery(CDIExtension.java:297)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:295)
at
org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:429)
at
org.apache.webbeans.container.BeanManagerImpl.fireEvent(BeanManagerImpl.java:484)
at
org.apache.openejb.cdi.BeansDeployer.fireBeforeBeanDiscoveryEvent(BeansDeployer.java:153)
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:193)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:167)
at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:43)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:723)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:546)
at
org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:368)
at
javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
at org.gradle.Main1.main(Main1.java:36)
Caused by: javax.naming.NoInitialContextException: Need to specify class name
in environment or system property, or as an applet parameter, or in an
application resource file: java.naming.factory.initial
at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.getNameParser(InitialContext.java:480)
at
com.sun.jersey.server.impl.cdi.CDIExtension.diveIntoJNDIContext(CDIExtension.java:264)
at
com.sun.jersey.server.impl.cdi.CDIExtension.createJerseyConfigJNDIContext(CDIExtension.java:273)
at
com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:192)
... 17 more
2013-okt-19 16:46:00 org.apache.openejb.assembler.classic.Assembler
destroyApplication
INFO: Undeploying app: C:\DRWP\Workspace-Aug\OpenEJB-QuickStart
Exception in thread "main"
org.apache.openejb.OpenEjbContainer$AssembleApplicationException:
org.apache.openejb.OpenEJBException: Creating application failed:
C:\DRWP\Workspace-Aug\OpenEJB-QuickStart: couldn't start owb context
at
org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:372)
at
javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:56)
at org.gradle.Main1.main(Main1.java:36)
Caused by: org.apache.openejb.OpenEJBException: Creating application failed:
C:\DRWP\Workspace-Aug\OpenEJB-QuickStart: couldn't start owb context
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:836)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:546)
at
org.apache.openejb.OpenEjbContainer$Provider.createEJBContainer(OpenEjbContainer.java:368)
... 2 more
Caused by: org.apache.openejb.OpenEJBRuntimeException: couldn't start owb
context
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:169)
at org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:43)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:723)
... 4 more
Caused by: org.apache.openejb.OpenEJBRuntimeException:
java.lang.RuntimeException: javax.naming.NoInitialContextException: Need to
specify class name in environment or system property, or as an applet
parameter, or in an application resource file: java.naming.factory.initial
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:316)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:167)
... 6 more
Caused by: java.lang.RuntimeException: javax.naming.NoInitialContextException:
Need to specify class name in environment or system property, or as an applet
parameter, or in an application resource file: java.naming.factory.initial
at
com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:196)
at
com.sun.jersey.server.impl.cdi.CDIExtension.beforeBeanDiscovery(CDIExtension.java:297)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:295)
at
org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:429)
at
org.apache.webbeans.container.BeanManagerImpl.fireEvent(BeanManagerImpl.java:484)
at
org.apache.openejb.cdi.BeansDeployer.fireBeforeBeanDiscoveryEvent(BeansDeployer.java:153)
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:193)
... 7 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name
in environment or system property, or as an applet parameter, or in an
application resource file: java.naming.factory.initial
at
javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at
javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.getNameParser(InitialContext.java:480)
at
com.sun.jersey.server.impl.cdi.CDIExtension.diveIntoJNDIContext(CDIExtension.java:264)
at
com.sun.jersey.server.impl.cdi.CDIExtension.createJerseyConfigJNDIContext(CDIExtension.java:273)
at
com.sun.jersey.server.impl.cdi.CDIExtension.initialize(CDIExtension.java:192)
... 17 more