Tag: ejb

EJB的用途是什么

我目前正在学习Jave-EE,拥有丰富的C ++经验并且学过Java SE。 我不明白Enterprise Java Beans的目的; 谁能为我澄清这一点。 我对遗留用途不感兴趣:这是在EJB-3.1和Java-EE 6的上下文中。 似乎有些人使用它们来包含业务逻辑,用于实现传统3层架构的业务层。 这将域逻辑与域对象分开,导致贫血域模型 。 但这违背了我所有的OOD本能; 我同意Martin Fowler认为这是一种反模式 。 我是否应该放松对贫血领域模型的反对意见? 或者EJB有其他用途吗?

为什么池无状态会话bean?

Java中的无状态bean不会在客户端的两次调用之间保持状态。 因此,简而言之,我们可能会将它们视为具有业务方法的对象。 每个方法都接受参数并返回结果。 调用该方法时,会在执行堆栈中创建一些局部变量。 当方法返回时,将从堆栈中删除本地,如果分配了一些临时对象,则无论如何都会对它们进行垃圾回收。 从我的角度来看,与通过单独的线程调用同一单个实例的方法没有区别。 那么为什么容器不能使用bean的一个实例而不是汇集其中的一些呢?

ejb查找失败,出现NamingException

我在web.xml中添加了以下内容: ejb/userManagerBean Session gha.ywk.name.entry.ejb.usermanager.UserManagerHome what should go here?? 以下java代码给我NamingException: public UserManager getUserManager () throws HUDException { String ROLE_JNDI_NAME = “ejb/userManagerBean”; try { Properties props = System.getProperties(); Context ctx = new InitialContext(props); UserManagerHome userHome = (UserManagerHome) ctx.lookup(ROLE_JNDI_NAME); UserManager userManager = userHome.create(); WASSSecurity user = userManager.getUserProfile(“user101”, null); return userManager; } catch (NamingException e) { log.error(“Error Occured while […]

如何从客户端创建远程会话EJB

根据EJB客户端应用程序的Netbeans教程 ,我似乎无法调用该方法: 编译错误: -do-compile: [mkdir] Created dir: /home/thufir/NetBeansProjects/EntAppClient/build/empty [mkdir] Created dir: /home/thufir/NetBeansProjects/EntAppClient/build/generated-sources/ap-source-output [javac] Compiling 1 source file to /home/thufir/NetBeansProjects/EntAppClient/build/jar [javac] /home/thufir/NetBeansProjects/EntAppClient/src/java/entappclient/Main.java:16: error: cannot find symbol [javac] System.err.println(“result = ” + mySession.getResult()); [javac] ^ [javac] symbol: method getResult() [javac] location: variable mySession of type MySessionRemote [javac] 1 error BUILD FAILED 客户: package entappclient; import ejb.MySessionRemote; import […]

使用Servlet正确使用有状态Bean

我们目前有一个注入Servlet的有状态bean。 问题是有时我们得到一个Caused by: javax.ejb.ConcurrentAccessException: SessionBean is executing another request. [session-key: 7d90c02200a81f-752fe1cd-1] Caused by: javax.ejb.ConcurrentAccessException: SessionBean is executing another request. [session-key: 7d90c02200a81f-752fe1cd-1]在有状态bean上执行方法时。 public class NewServlet extends HttpServlet { @EJB private ReportLocal reportBean; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html;charset=UTF-8”); PrintWriter out = response.getWriter(); try { String[] parameters = fetchParameters(request); out.write(reportBean.constructReport(parameters)); } finally […]

Jboss Java EE容器和ExecutorService

我有一个独立的Java应用程序,它使用ExecutorService并行处理大量作业 ExecutorService es = Executors.newFixedThreadPool(10); 我现在想在EJB bean中重用相同的解决方案但不确定如何正确初始化ThreadPool,因为我通常会让Java EE容器控制所有线程资源。 我可以使用相同的代码,还是有另一种正确的方法来获取Jboss托管线程池?

JEE7:EJB和CDI bean是否支持容器管理的事务?

Java EE7由一堆“bean”定义组成: Managed Beans 1.0(JSR-316 / JSR-250) Java 1.0的dependency injection(JSR-330) CDI 1.1(JSR-346) JSF Managed Beans 2.2(JSR-344) EJB 3.2(JSR-345) 为了摆脱我心中的混乱,我研究了几篇“何时使用哪种豆类”的文章。 EJB的一个优点似乎是它们单独支持声明式容器管理事务 (着名的事务注释)。 不过,我不确定这是否正确。 任何人都可以批准这个吗? 同时,我想出了一个简单的演示应用程序来检查这是否真的如此。 我刚刚根据这个片段定义了一个CDI bean( 不是 EJB – 它没有类级别注释),如下所示: public class CdiBean { @Resource TransactionSynchronizationRegistry tsr; @Transactional(Transactional.TxType.REQUIRED) public boolean isTransactional() { return tsr.getTransactionStatus() == Status.STATUS_ACTIVE; } } 现在,GlassFish 4.0的结果是这个方法实际上返回true,根据我的询问,它没有按预期工作 。 我确实希望容器忽略CDI bean方法上的@Transactional注释,或甚至抛出exception。 我使用新安装的GlassFish 4服务器,因此没有干扰。 […]