Tag: ejb 3.1

在websphere中查找本地EJB的正确方法 – 获取ClassCastException

我有一个EJB,它由本地和远程接口公开 package com.sam.enqueue; import javax.ejb.Local; import javax.ejb.Remote; import javax.ejb.Singleton; @Singleton @Local(SamEnqueueLocal.class) @Remote(SamEnqueueRemote.class) public class SamEnqueue implements SamEnqueueRemote, SamEnqueueLocal { } // remote interface package com.sam.enqueue; import javax.ejb.Remote; @Remote public interface SamEnqueueRemote { } // local interface package com.sam.enqueue; @Local public interface SamEnqueueLocal { } 我的app容器是websphere 8.0,我没有覆盖服务器分配的默认JNDI名称。 在服务器启动期间,我在日志中获得以下默认绑定: CNTR0167I: The server is binding the com.sam.enqueue.SamEnqueueRemote interface […]

公开@Asynchronous函数的当前进度以在View中使用

在我的JEE6-App(在Glassfish 3.0.1上运行)中,我有一个EmailEJB,它必须发送大量邮件。 邮件是异步发送的,所以它用新的EJB3.1 @Asynchronous注释,让它在一个单独的Thread中运行。 现在我想让用户了解该方法的当前状态:已发送了多少封邮件? 异步发送邮件工作正常,但我无法弄清楚如何从外部访问进度。 似乎我的做法是非常错误的,但不知何故它必须是可能的(也许是另一种方法)。 这就是我的EmailEJB目前的样子(它的伪代码,但解释了我想要的): @Stateful public class EmailEJB { @Asynchronous public Future sendMails() { for (int i=0; i<mails.size; i++) { sendMail(mails[i]) // i want to return the progress without returning 😉 return new AsyncResult(i) } } } //Just for the completeness… from outside, i’m accessing the progress like this: Future progress […]

将scalafunction添加到现有的EJB eclipse项目中

我在Eclipse Helios中设置了一个现有的EJB项目,并希望将Scala慢慢引入该项目。 Scala IDE已成功安装,我可以创建独立的scala项目。 然而,当尝试使用scala添加项来使用我现有的项目时,就出现了这个问题。 我已经开始手动编辑项目主目录的.settings下的.project,.classpath和相关文件。 但是我仍然遇到Java编译器尝试编译.scala类的问题,这会导致错误并最终无法构建项目。 有没有人遇到类似的情况或有任何解决方法? 提前致谢。

如何在使用JPA2时对EJB进行unit testing?

您将如何对使用JPA的EJB进行unit testing? 例如,如果我有一个Order实体和OrderEJB,它应该计算一个订单的总数(如下定义),我将如何在不触及数据库的情况下对EJB进行unit testing? 另外,您将如何定义实体的值,以便断言预期的计算? 以下是一些示例代码… @Entity public class Order { @Id private long OrderId; private LineItem[] items; } 和订单EJB @Stateless public class OrderEJB { EntityManager em; public double calculateOrderTotal(long orderId) { .. } } 如果我无法触摸数据库,您将如何进行单位测试calculateOrderTotal方法? 我不想实现DAO,因为我试图摆脱这种方法。 谢谢你的帮助。

Deltaspike和@Stateless Bean

我想用DeltaSpike-API保护我的“无状态”EJb。 @Stateless @Remote(UserServiceRemote.class) public class UserService implements UserServiceRemote 在方法级别,我有一个自定义注释“支持” @Support public void doSomething() {} 因此我写了一个自定义注释“@Support”: @Retention(value = RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD }) @Documented @SecurityBindingType public @interface Support { 我的自定义授权器看起来像: @Secures @Support public boolean doAdminCheck(Identity identity, IdentityManager identityManager, RelationshipManager relationshipManager) throws Exception { return hasRole(relationshipManager, identity.getAccount(), getRole(identityManager, “Support”)); } 在我的“beans.xml”文件中,我包括: org.apache.deltaspike.security.impl.extension.SecurityInterceptor 但是在我登录我的应用程序并在每次远程调用时调用“doSomething”方法后,无论我是否拥有该角色,都会忽略“支持”注释。 我做错了什么? 所有建议的Thanx!

在CDI实现项目中包含空beans.xml的目的是什么?

我在我的JSF-EJB-JPA Web应用程序中使用weld ,CDI的RI作为dependency injection组件。 我在项目中看到ejb.jar中的META-INF/beans.xml和WAR中的WEB-INF/beans.xml都有空beans.xml。 我不明白为什么我们需要在该文件中没有定义时保留空beans.xml ?

@Startup @Singleton在WebLogic中实例化两次(EJB 3.1)

我有一个标记为@Startup和@Singleton的类,构造函数被调用两次。 为什么被叫两次? WebLogic 12.1.1 本地运行(不是群集) 当@PostConstruct存在时,它也被调用两次 与XML配置无关(weblogic-ejb-jar.xml等) 这是class级: import java.util.concurrent.atomic.AtomicInteger; import javax.ejb.Singleton; import javax.ejb.Startup; @Startup @Singleton public class CacheStartupListener { static AtomicInteger count= new AtomicInteger(0); public CacheStartupListener() { System.err.println(“Singleton invoked ” + count.incrementAndGet() + ” ” + getClass().getClassLoader().toString()); } } 我可以从输出中看到构造函数都是从同一个类加载器中调用的。 构造函数中的wlfullclient-12.1.1jar都通过wlfullclient-12.1.1jar ,但wlfullclient-12.1.1jar 在其他方面是不同的。 这是第一个实例化的堆栈跟踪: Daemon Thread [[ACTIVE] ExecuteThread: ‘0’ for queue: ‘weblogic.kernel.Default (self-tuning)’] (Suspended […]

在运行JUnit时,使用CDI bean注入EJB 3.1的问题

我使用@inject创建了一个EJB3.1并注入了CDI bean,但是在unit testing时遇到了一些问题,但是当从servlet测试它工作正常时。 我在WEB-INF文件夹中有beans.xml。 下面是我的EJB代码: @Stateless public class CdiUsingEjb { @Inject private HelloServletCDIPojo helloServletCDIPojo; public String greet() { assert helloServletCDIPojo != null; return helloServletCDIPojo.from(); } } 下面是我的CDI bean: public class HelloServletCDIPojo { public String from() { return “from HelloServletStateless CDI”; } } 我创建了一个JUnit类: public class CdiUsingEjbTest { @EJB private CdiUsingEjb cdiUsingEjb; @Before public void setUp() […]

Maven 2&Packaging ejb vs jar

如果我正在使用ejb 3.1,那么它们之间的差异是什么 jar 和 ejb … org.apache.maven.plugins maven-ejb-plugin 2.3 3.1

控制EJB 3.1中的CDI启动

我是新来的,也是CDI世界的新手,我在工作中得到的第一项任务就是找到一种控制CDI上传的方法。 我们使用EJB 3.1和CDI 1.0 ,并且因为它们由不同的容器控制,我们可以通过使用@Startup和@Singleton注释来控制EJB Managed Beans的启动时间和顺序。 但是我在我的类中声明的@Inject CDI bean因为CDI容器尚未启动而变为null。 我已经尝试了几天来寻找解决方案,而我在这里找到的解决方案没有用(仍然是空的)。 我们正在使用Java EE 6并在WebSphere Application Server 8上运行该应用程序。 请问,如果你能帮我找到一种方法来控制内部和不管EJB的CDI上传? 这是一个示例代码: import javax.annotation.PostConstruct; import javax.ejb.Singleton; import javax.ejb.Startup; @Singleton @Startup public class BaseStartupLoader{ /** * Default constructor. */ @Inject @MyStartup BaseStartUp myStartup; private static Logger m_logger = LoggerFactory.getLogger(BaseStartupLoader.class); public BaseStartupLoader() { } @PostConstruct public void init(){ String applicationName […]