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