/** * @author Arun Gupta */ @Local public interface Cart { public void addItem(String item); public void removeItem(String item); public void purchase(); public List<String> getItems(); }
private List<Class> remoteAndLocalIfaces(final Class<?> resourceClass) { final List<Class> allLocalOrRemoteIfaces = new LinkedList<>(); if (resourceClass.isAnnotationPresent(Remote.class)) { allLocalOrRemoteIfaces.addAll(Arrays.asList(resourceClass.getAnnotation(Remote.class).value())); } if (resourceClass.isAnnotationPresent(Local.class)) { allLocalOrRemoteIfaces.addAll(Arrays.asList(resourceClass.getAnnotation(Local.class).value())); } for (Class<?> i : resourceClass.getInterfaces()) { if (i.isAnnotationPresent(Remote.class) || i.isAnnotationPresent(Local.class)) { allLocalOrRemoteIfaces.add(i); } } return allLocalOrRemoteIfaces; }
/** * @author Arun Gupta */ @Local public interface Account { public String withdraw(float amount); public String deposit(float amount); }
private Collection<Class<?>> getLocalBusinessInterfaces(final DeploymentUnit deploymentUnit, final Class<?> sessionBeanClass) throws DeploymentUnitProcessingException { final Local localViewAnnotation = sessionBeanClass.getAnnotation(Local.class); if (localViewAnnotation == null) { Collection<Class<?>> interfaces = getBusinessInterfacesFromInterfaceAnnotations(sessionBeanClass, Local.class); if (!interfaces.isEmpty()) { return interfaces; } return Collections.emptySet(); } Class<?>[] localViews = localViewAnnotation.value(); if (localViews == null || localViews.length == 0) { Set<Class<?>> interfaces = getPotentialBusinessInterfaces(sessionBeanClass); // For version < 3.2, the EJB spec didn't allow more than one implementing interfaces to be considered as local when the bean class had the @Local annotation without any explicit value. // EJB 3.2 allows it (core spec, section 4.9.7) if (interfaces.size() != 1 && !isEjbVersionGreaterThanOrEqualTo32(deploymentUnit)) { throw EjbLogger.ROOT_LOGGER.beanWithLocalAnnotationImplementsMoreThanOneInterface(sessionBeanClass); } return interfaces; } return Arrays.asList(localViews); }
@Local public interface ExecutorServiceEJB extends ExecutorService { Executor getExecutor(); }
@Local public interface UserTaskServiceEJBLocal extends UserTaskService { }
@Local public interface DeploymentServiceEJBLocal extends DeploymentService, ListenerSupport { }
@Local public interface ProcessInstanceMigrationServiceEJBLocal extends ProcessInstanceMigrationService { }
@Local public interface RuntimeDataServiceEJBLocal extends RuntimeDataService, DeploymentEventListener { }
@Local public interface ProcessServiceEJBLocal extends ProcessService { }
@Local public interface QueryServiceEJBLocal extends QueryService { }
@Local public interface DefinitionServiceEJBLocal extends DefinitionService, DeploymentEventListener { }
@Local(MyManagedScheduledBatch.class) public class MyManagedScheduledBatchBean implements MyManagedScheduledBatch {
/** * EJB implementation of {@link TestEntityDao} which declares transaction * semantics for {@link #incrementCount(String)} with * {@link TransactionAttributeType#REQUIRED}. * * @author Sam Brannen * @author Xavier Detant * @since 4.0.1 * @see RequiresNewEjbTxTestEntityDao */ @Stateless @Local(TestEntityDao.class) @TransactionAttribute(TransactionAttributeType.MANDATORY) public class RequiredEjbTxTestEntityDao extends AbstractEjbTxTestEntityDao { @Override public int getCount(String name) { return super.getCountInternal(name); } @TransactionAttribute(TransactionAttributeType.REQUIRED) @Override public int incrementCount(String name) { return super.incrementCountInternal(name); } }
/** * EJB implementation of {@link TestEntityDao} which declares transaction * semantics for {@link #incrementCount(String)} with * {@link TransactionAttributeType#REQUIRES_NEW}. * * @author Sam Brannen * @author Xavier Detant * @since 4.0.1 * @see RequiredEjbTxTestEntityDao */ @Stateless @Local(TestEntityDao.class) @TransactionAttribute(TransactionAttributeType.MANDATORY) public class RequiresNewEjbTxTestEntityDao extends AbstractEjbTxTestEntityDao { @Override public int getCount(String name) { return super.getCountInternal(name); } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) @Override public int incrementCount(String name) { return super.incrementCountInternal(name); } }
@Local @Stateless
/** * A SLSB with a local business interface * * @author Daniel Meyer * */ @Stateless @Local(BusinessInterface.class) public class LocalSLSBean implements BusinessInterface { public boolean doBusiness() { return true; } }
@Local(ExecutorService.class) @TransactionAttribute(TransactionAttributeType.SUPPORTS) public class ExecutorServiceBean implements ExecutorService {
/** * A SLSB with a local business interface * * @author Daniel Meyer * */ @Stateless @Local(StartProcessInterface.class) public class StartProcessSLSB implements StartProcessInterface { public boolean doStartProcess() { BpmPlatform.getDefaultProcessEngine() .getRuntimeService() .startProcessInstanceByKey("callbackProcess"); return true; } }
@Local(ProcessApplicationService.class) @TransactionAttribute(TransactionAttributeType.SUPPORTS) public class EjbProcessApplicationService implements ProcessApplicationService {