| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.openejb.cdi; |
| |
| import junit.framework.TestCase; |
| import org.apache.openejb.jee.Beans; |
| import org.apache.openejb.jee.SessionBean; |
| import org.apache.openejb.jee.StatefulBean; |
| import org.apache.openejb.junit.ApplicationComposer; |
| import org.apache.openejb.testing.Module; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| import javax.ejb.Local; |
| import javax.ejb.Stateful; |
| import javax.enterprise.context.ApplicationScoped; |
| import javax.enterprise.inject.spi.Bean; |
| import javax.enterprise.inject.spi.BeanManager; |
| import javax.inject.Inject; |
| |
| /** |
| * @version $Rev$ $Date$ |
| */ |
| @RunWith(ApplicationComposer.class) |
| public class ApplicationScoped2Test extends TestCase { |
| |
| @Inject |
| private BeanManager beanManager; |
| |
| @Test |
| public void test() throws Exception { |
| |
| final Green green = createAndMutate(Green.class); |
| |
| { |
| Green green2 = getInstance(Green.class); |
| |
| assertEquals(green.getMessage(), green2.getMessage()); |
| } |
| |
| final Blue blue = createAndMutate(Blue.class); |
| |
| assertEquals(green.getMessage(), blue.getGreen().getMessage()); |
| |
| { |
| Blue blue2 = getInstance(Blue.class); |
| |
| assertEquals(blue.getMessage(), blue2.getMessage()); |
| } |
| |
| final BrownLocal brownLocal = createAndMutate(BrownLocal.class); |
| { |
| BrownLocal brownLocal2 = getInstance(BrownLocal.class); |
| |
| assertEquals(brownLocal.getMessage(), brownLocal2.getMessage()); |
| } |
| |
| final Green green2 = brownLocal.getGreen(); |
| green2.getMessage(); |
| |
| final Orange orange = createAndMutate(Orange.class); |
| assertNotNull(orange); |
| assertNotNull(orange.getBlue()); |
| assertNotNull(orange.getBlue().getGreen()); |
| assertNotNull(orange.getGreen()); |
| |
| final Green greenA = orange.getBlue().getGreen(); |
| final Green greenB = orange.getGreen(); |
| |
| assertSame(greenA, greenB); |
| } |
| |
| private <T extends Message> T createAndMutate(Class<T> beanType) { |
| |
| T instance = getInstance(beanType); |
| |
| final String prefix = beanType.getSimpleName(); |
| |
| // Mutate the instance one more time |
| instance.setMessage(prefix + ": hello again application"); |
| |
| return instance; |
| } |
| |
| private <T extends Message> T getInstance(Class<T> beanType) { |
| final Bean<T> bean = (Bean<T>) beanManager.getBeans(beanType).iterator().next(); |
| |
| // This should create the instance and put it in the context |
| return (T) beanManager.getReference(bean, beanType, beanManager.createCreationalContext(bean)); |
| } |
| |
| |
| |
| @Module |
| public SessionBean getEjbs() { |
| return new StatefulBean(Brown.class); |
| } |
| |
| @Module |
| public Beans getBeans() { |
| final Beans beans = new Beans(); |
| beans.addManagedClass(Orange.class); |
| beans.addManagedClass(Blue.class); |
| beans.addManagedClass(Green.class); |
| return beans; |
| } |
| |
| @Local |
| public static interface BrownLocal extends Message { |
| |
| public Green getGreen(); |
| } |
| |
| @Stateful |
| @ApplicationScoped |
| public static class Brown implements BrownLocal { |
| private String id; |
| |
| @Inject |
| private Green green; |
| |
| @Override |
| public String getMessage() { |
| return id; |
| } |
| |
| @Override |
| public void setMessage(String id) { |
| this.id = id; |
| } |
| |
| @Override |
| public Green getGreen() { |
| return green; |
| } |
| } |
| |
| @ApplicationScoped |
| public static class Orange implements Message { |
| |
| private String id; |
| private Blue blue; |
| |
| public Orange() { |
| System.out.println(this.getClass().getName()); |
| } |
| |
| @Override |
| public String getMessage() { |
| return id; |
| } |
| |
| @Override |
| public void setMessage(String id) { |
| this.id = id; |
| } |
| @Inject |
| private Green green; |
| |
| @Inject |
| public void setBlue(Blue blue) { |
| this.blue = blue; |
| } |
| |
| public Blue getBlue() { |
| return blue; |
| } |
| |
| public Green getGreen() { |
| return green; |
| } |
| } |
| |
| @ApplicationScoped |
| public static class Blue implements Message { |
| |
| private String id; |
| private Green green; |
| |
| public Blue() { |
| System.out.println(this.getClass().getName()); |
| } |
| |
| @Override |
| public String getMessage() { |
| return id; |
| } |
| |
| @Override |
| public void setMessage(String id) { |
| this.id = id; |
| } |
| |
| public Green getGreen() { |
| return green; |
| } |
| |
| @Inject |
| public void setGreen(Green green) { |
| this.green = green; |
| } |
| } |
| |
| @ApplicationScoped |
| public static class Green implements Message { |
| |
| private String id; |
| |
| public Green() { |
| "".length(); |
| System.out.println(this.getClass().getName()); |
| } |
| |
| @Override |
| public String getMessage() { |
| return id; |
| } |
| |
| @Override |
| public void setMessage(String id) { |
| this.id = id; |
| } |
| } |
| |
| public static interface Message { |
| |
| void setMessage(String id); |
| |
| String getMessage(); |
| } |
| } |