jboss
摘要: ejb3可以通过拦截器对bean方法进行拦截和覆盖。这有些象aop中的around。通过aop的around方法,可以修改被拦截方法的返回值、参数值,甚至可以取消被拦截方法的执行。ejb3的拦截器可以用在无状态session bean、有状态session bean和消息驱动bean(mdb)的方法中。实现拦截器的最简单的方法是使用拦截器方法。也就是说,只要在当前的bean中使用 @aroundinvoke对某个方法进行注释(关于拦截器的类都在javax.interceptor包中),那么这个方法就会变成拦截器方法,该拦截器方法会拦截当前bean中的所有方法。
摘要: 在前面的文章中给出的sessionbean的例子都是同步调用sessionbean方法的,也就是说,只有当方法中的代码都执行完,才能返回到客户端。但在某些情况下,由于sessionbean方法的执行时间比较长,这就需要异步地调用该方法,否则客户端就需要等待比较长的时间。要实现异步调用,就需要使用本要讲的消息驱动bean。消息驱动bean的基本原理是客户端向消息服务器发送一条消息后,消息服务器会将该消息保存在消息队列中。在这时消息服务器中的某个消费者(读取并处理消息的对象)会读取该消息,并进行处理。发送消息的客户端被称为消息生产者。
摘要: 在前面的文章中使用的都是容器管制的entitymanager对象。这类entitymanager对象是由ejb容器创建的,在这种情况下,entitymanager对象的生命周期完全由ejb容器来管理。在sessionbean中可以使用如下的代码来通知ejb容器创建 entitymanager对象:
@persistencecontext(unitname="myentity")
protected entitymanager em;
上面的代码需要放在任意一个sessionbean的类中,ejb容器会自动创建entitymanager对象。但如果要在servlet中直接访问 entitymanager对象,需要使用entitymanagerfactory接口的createentitymanager方法来创建 entitymanager对象,在使用完entitymanagerfactory和entitymanager对象后,可以使用相应的close方方关闭这两个对象。
摘要: 在ejb3中可以使用entitymanager对象的createquery方法来执行jpql(类似于hibernate中的hql),这非常简单。但使用createquery方法处理jpql时,在每次执行jpql的过程中系统都需要对jpql进行分析,这在一定程度上降低了系统运行时的性能。为此,ejb3提供了命名查询的概念。命名查询有些类型于数据库中的存储过程,在提交的过程中就已经被编译处理了。因此,在执行效率上要高一些。
摘要: 本文介绍了如何使用连接策略(joined strategy)对物理表进行划分。子表与父表共享主键。
摘要: 如果以前使用过ejb1.x或ejb2.x的实体bean,会发现无法通过继承实体bean将单个表分成多表。而在ejb3中,我们可以很容易地使用@inheritance和@discriminatorcolumn注释来实现这个功能。
摘要: 本文介绍了如何使用@manytomany注释实现多对多的映射关系。在ejb3中多对多的映射关系需要使用一个连接表来描述。
摘要: 本文介绍了如使用@onetomany注释来实现一对多的映射,以及使用@jointable注释指定连接表来实现一对多的单向映射。
摘要: 一对一映射是很常用的。在一般情况下,一个主表通过外键和从表形成一对一的关系。在ejb3中使用@onetoone注释来映射。一对一关系除了使用外键进行关联外,也可以采用共享主键的方式连接两个表。
摘要: ejb3容器通过entitymanager对象管理实体bean,该类最主要的功能就是在记录和javabean之间进行互相映射。例如,我们从数据库中查出一条记录,这条记录有field1和field2两个字段,假设有一个javabean,也包含了field1和field2属性。那么 entitymanager可以将这条记录中的值映射到javabean的field1和field2属性中。也就是说,在数据库中的一条记录就对应于一个javabean的对象实例。下面将给出一个简单的例子来演示如何来实现一个应用实体bean的程序。在这个例子中使用无状态的session bean通过entitymanager对象从数据表中查找一条记录,将该记录映射成实体bean的对象实例,最后通过session bean的方法返回该记录的某个字段值。
摘要: session bean除了可以使用注释来发布外,也可以使用相应的配置文件来发布。在这种情况下,就不需要在接口和session bean中使用注释了。在jboss中需要两个文件对session bean进行配置。这两个文件是ejb-jar.xml和jboss.xml。这两个文件应该meta-inf目录中,该目录应该放在jar文件的根目录。ejb-jar.xml文件负责配置session bean,
摘要: 有时需要在session bean中初始化和释放一些资源。这些工作应该在sessionbean的@postconstruct和@predestroy方法中进行。其中用 @postconstruct注释的方法在sessionbean的构造方法调用之后以后ejb容器在处理完一些其他工作后调用。用 @predestroy注释的方法在sessionbean的对象实例被ejb容器销毁之前调用。
摘要: 有时客户端程序(如jsp、servlet)会和ejb组件运行在同一个jvm上,如在同一个j2ee服务器(jboss、weblogic等)中运行。这时就没必要再通过远程(remote)接口访问session bean了,因为客户端和session bean都在同一个jvm上,只需要通过本地接口(local)访问即可。就象直接访问本地类一样(当然,不能直接访问ejb类,需要使用jndi和 local接口来获得本地接口对象。当然,也可以通过remote接口来访问ejb,不过这样会有一些性能损失。就象在同一台机器上还通过socket进行访问一样,很多性能都损耗在网络上了。
摘要: 编写有状态的(stateful)的session bean也非常简单,只需要将无状态注释(@stateless)改成有状态注释(@stateful)即可。如果使用stateful sessionbean,客户端在使用同一个sessionbean对象实例时可以保存状态,也就是说,在多次引用该对象时实际上在服务端是使用的同一个 sessionbean的对象实例,而无状态sessionbean使用了不同的sessionbean对象实例,因此,是无法保存状态的。
摘要: 本文中将编写一个简单的无状态sessionbean。在发布ejb时,一般需要将ejb程序以jar文件的形式进行发布。这些jar文件将被放在\server\default\deploy目录中。如果在eclipse中开发ejb程序,需要进行一些配置。首选需要在首选项(preferences)对话框中设置jboss的安装目录(如d:\jboss5)。然后在运行配置对话框中添加jboss的运行项。在jboss4.2及以后的版本中,默认情况下jboss只接收来自localhost或127.0.0.1的请求,也就是只接收本地的访问。为了使 jboss接收来自其他地址的请求,在启动jboss时需要使用-b命令行参数进行设置。如下面的启动命令所示:run.bat -b 200.200.200.123,run.bat -b 0.0.0.0