Tag: ejb

如何让这个定时器服务类处理“预定时间的变化”?

示例代码: @Singleton @Startup public class EBlastScheduler { @Resource TimerService timerService; EBlastScheduler what = new EBlastScheduler(); @PostConstruct public void initialize(){ if (timerService.getTimers() != null) { for (Timer timer : timerService.getTimers()) { if (timer.getInfo().equals(“EBlastScheduler”)){ timer.cancel(); } } } ScheduleExpression expression = new ScheduleExpression(); expression.second(“*/1”).minute(“*”).hour(“*”); timerService.createCalendarTimer(expression); } @Timeout public void execute(Timer timer){ System.out.println(“—-Invoked: ” + System.currentTimeMillis()); } } […]

如何从容器管理的事务提交中捕获exception?

我有一个带有@WebService接口的@Stateless EJB,使用容器管理的事务,这意味着如果没有抛出系统exception,在调用方法后,容器会自动提交事务。 如果我尝试EntityManager.persist(…)两个具有相同值的对象,对于具有唯一约束的列,容器将在我的代码之外的提交时向客户端抛出PersistenceException 。 我如何捕获此exception,以便我可以重新抛出自己的应用程序exception? 我是否必须在我的方法中手动提交事务以捕获提交中的exception? (并且EntityManager.flush()是正确的方法吗?)如果是这样,那么容器管理事务的重点是什么?

Java EE 7自动计时器(EJB计时器)不适用于WildFly 8.1.0

我正在按照使用定时器服务教程来构建一个简单的计划执行。 尝试自动方法并使用WildFly 8.1.0 Final 。 会话Bean @Singleton @Startup public class HelloJob { private static final Logger logger = Logger.getLogger(HelloJob.class); public HelloJob() { logger.error(“>>> Hello Job Created.”); } @Schedule(second=”*”) public void sayHello() { logger.error(“>>> Server Hello!”); } } 在部署时,正确实例化类,打印>>> Hello Job Created. 消息,但方法sayHello()永远不会被调用。 根据教程,@ @Schedule(second=”*”)表示它应该每秒执行一次。 将属性设置为星号(*)表示属性的所有允许值。 此外,只有有状态会话bean不允许用于计时器,我使用的是单例,也在示例中使用。 企业bean容器的计时器服务使您可以为除有状态会话bean之外的所有类型的企业bean计划定时通知。

使用本地EJB,在同一个Container但不同的耳朵

我正在试图在同一个Glassfish中使用本地EJB,但不同的耳朵。 但Glassfish无法找到本地EJB或无法使用 我读到了这一点: 根据JavaEE教程,@ Local bean的客户端必须在与它访问的企业bean相同的JVM中运行。 在第一只耳朵中 ,我在jar中有本地接口 @Local public interface MyLocalBean { int getNumber(int num3); } 在另一个jar中,我有实现 @Stateless @LocalBean public class MyLocalBeanImpl implements MyLocalBean,Serializable{ public MyLocalBeanImpl() {} public int getNumber(int num3){…… 在第二只耳朵中 ,在同一条Glassfish中 我在jar里面有本地接口 @Local public interface MyLocalBean { int getNumber(int num3); } 在另一个jar子里,我有消费者 @Stateless @LocalBean public class BeanConsumer{ @EJB(name=”MyLocalBeanImpl”) private MyLocalBean beanlocal; 使用@EJB和(name […]

JPA。 如何将现有实体子类化并保留其ID?

假设我有两个经典的非抽象JPA类:Person和Student。 @Entity @Inheritance(strategy = InheritanceType.JOINED) public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private String id; // … } @Entity public class Student extends Person { // … } 现在有一些身份证的人进入大学并成为学生。 如何在JPA中处理这个事实并保持个人身份? student = new Student(); student.setPersonData(person.getPersonData()); student.setId(person.getId()); entityManager.persist(student); 上面的代码生成’传递给持久化的分离实体’exception,而使用entityManager.merge(student)跳过分配的id并创建具有新id的Person和Student的两个新实体。 任何想法如何保持原始ID?

EJB工厂类

我正在尝试创建一个EJB工厂类,其工作原理如下:您有一个方法,它将EJB的一个类作为参数,然后检查EJB是否具有远程接口(如果不是抛出exception),如果它它会返回相关的EJB。 下面的代码就是这样做的。 但是它返回的对象是相关bean的远程接口的类型,而不是bean本身的类型。 我怎么能改变这个? 有没有办法告诉Javagenerics类型T与传递给方法的类的类型相同。 import java.util.Properties; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.naming.*; public class EJBFactory { private InitialContext ctx; public EJBFactory() throws NamingException { ctx = new InitialContext(); } public EJBFactory(String host, String port) throws NamingException { Properties props = new Properties(); props.setProperty(“org.omg.CORBA.ORBInitialHost”, host); props.setProperty(“org.omg.CORBA.ORBInitialPort”, port); ctx = new InitialContext(props); } . // To […]

在Java EE中与EJB交互的最佳方式

我有一个中等规模的Java EE 6项目,它使用多个EJB,其中一个目的是通过JPA管理数据库调用。 我的问题是添加一个新类的最佳方法是什么,该类执行一些随机的function,然后调用数据库访问EJB来保存此类中的数据。 如果需要访问注释和注入,这个新类必须是EJB吗? 如果必须与项目的其余部分一起部署,它是否必须是EJB? 有人告诉我,如果你想为项目添加一个新的逻辑类,它必须是一个EJB,或者你可以使用JNDI远程集成它来访问EJB元素并创建某种客户端接口。 现在我的新类只是一个POJO但它无法访问EJBfunction。 一般我该怎么办? 编辑:请注意我的问题不是数据库访问。 这只是我正在使用的一个例子。 我的猜测更广泛。 我想知道如何从我创建的其他类访问EJB方法。 从一个EJB到另一个EJB,您可以简单地注入另一个EJB,因为它们都是容器管理的。 但是说我在与EJB相同的包中创建另一个类如何才能访问这些方法? 可能吗? 这里的最佳做法是什么? 现在我有一个类从URL获取twitter feed数据,然后解析JSON并返回前10个条目的字符串。 我想调用管理数据库访问的EJB并将该字符串传递给相应的方法,但我不能这样做,因为我的类也不是EJB。

在JBoss 7.1上部署EJB

我正在部署一个非常简单的helloworld风格的EJB应用程序。 这样做我得到…… WARNING: -logmodule is deprecated. Please use the system property ‘java.util.logging.manager’ or the ‘java.util.logging.LogManager’ service loader. 13:15:54,638 INFO [org.jboss.modules] JBoss Modules version 1.1.1.GA 13:15:55,094 INFO [org.jboss.msc] JBoss MSC version 1.0.2.GA 13:15:55,175 INFO [org.jboss.as] JBAS015899: JBoss AS 7.1.0.Final “Thunder” starting 13:15:56,587 INFO [org.xnio] XNIO Version 3.0.3.GA 13:15:56,592 INFO [org.jboss.as.server] JBAS015888: Creating http management service using […]

如何在群集环境中使用javax.ejb.Singleton?

我需要在应用程序中维护一个对于集群环境中的所有用户和所有节点都是唯一的简单计数器。 我想过如下使用单例会话bean注释javax.ejb.Singleton: package foo; import javax.ejb.Singleton; @Singleton public class Bean { private int counter; […] } 这看起来很简单,但如果在集群环境中按预期工作,我找不到答案。 群集的每个节点都有自己的实例吗? 当然,我可以将bean保存在数据库中,但它实际上只是一个计数器,这样做会有点过分。 此外,我希望计数器在应用程序崩溃或重新启动时重置,因此持久存在会产生比解决的问题更多的问题。

JBoss AS 6中的QuartzScheduler注入

如何在JBoss AS 6上将QuartzScheduler服务注入我的无状态bean? Quartz服务确实在JBoss AS 6启动期间启动 00:58:38,025 INFO [QuartzScheduler] Scheduler meta-data: Quartz Scheduler (v1.8.3) ‘JBossQuartzScheduler’ with instanceId ‘NON_CLUSTERED’ Scheduler class: ‘org.quartz.core.QuartzScheduler’ – running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool ‘org.quartz.simpl.SimpleThreadPool’ – with 10 threads. Using job-store ‘org.quartz.simpl.RAMJobStore’ – which does not support persistence. and is not […]