Entity bean questions
what is the sequence of events that takes place after, findAll method on EJB Home of an entity bean is called. In particular I want to know when EJB Objects are created? I am not able to understand this from Entity Bean lifecycle.
The underlying query will return zero or more primary keys to the container. The container then converts each primary key into its corresponding EJBObject or EJBLocalObject, depending on the interface through which the findAll call was made. In some cases, the EJBObject/EJBLocalObject already exists within the container. In other cases the container needs to create a new EJBObject/EJBLocalObject for the primary key. The resulting set of EJBObjects is then returned to the caller.
Similar Messages
-
Urgent: Entity Bean question
Hi,
I am using an entity beans to store and load records in a table. When I save records to the table I store them in an order of Primary key ID, but when loading the entity bean this order is not being preserved. Is there any way I can specify what the order (ascending or descending) the entiry bean needs to load records?
Thanks.Dunno what exactly are you asking.
I mean how are u making bulk entity bean save records?
What exactly is the purpose ?
Cheers,
manjunath -
Noob Question: Problem with Persistence in First Entity Bean
Hey folks,
I have started with EJB3 just recently. After reading several books on the topic I finally started programming myself. I wanted to develop a little application for getting a feeling of the technology. So what I did is to create a AppClient, which calls a Stateless Session Bean. This Stateless Bean then adds an Entity to the Database. For doing this I use Netbeans 6.5 and the integrated glassfish. The problem I am facing is, that the mapping somehow doesnt work, but I have no clue why it doesn't work. I just get an EJBException.
I would be very thankfull if you guys could help me out of this. And don't forget this is my first ejb project - i might need a very detailed answer ... I know - noobs can be a real ....
So here is the code of the application. I have a few methods to do some extra work there, you can ignore them, there are of no use at the moment. All that is really implemented is testConnection() and testAddCompany(). The testconnection() Methode works pretty fine, but when it comes to the testAddCompany I get into problems.
Edit:As I found out just now, there is the possibility of Netbeans to add a Facade pattern to an Entity bean. If I use this, everythings fine and it works out to be perfect, however I am still curious, why the approach without the given classes by netbeans it doesn't work.
public class Main {
private EntryRemote entryPoint = null;
public static void main(String[] args) throws NamingException {
Main main = new Main();
main.runApplication();
private void runApplication()throws NamingException{
this.getContext();
this.testConnection();
this.testAddCompany();
this.testAddShipmentAddress(1);
this.testAddBillingAddress(1);
this.testAddEmployee(1);
this.addBankAccount(1);
private void getContext() throws NamingException{
InitialContext ctx = new InitialContext();
this.entryPoint = (EntryRemote) ctx.lookup("Entry#ejb.EntryRemote");
private void testConnection()
System.err.println("Can Bean Entry be reached: " + entryPoint.isAlive());
private void testAddCompany(){
Company company = new Company();
company.setName("JavaFreaks");
entryPoint.addCompany(company);
System.err.println("JavaFreaks has been placed in the db");
}Here is the Stateless Session Bean. I added the PersistenceContext, and its also mapped in the persistence.xml file, however here the trouble starts.
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless(mappedName="Entry")
public class EntryBean implements EntryRemote {
@PersistenceContext(unitName="PersistenceUnit") private EntityManager manager;
public boolean isAlive() {
return true;
public boolean addCompany(Company company) {
manager.persist(company);
return true;
public boolean addShipmentAddress(long companyId) {
return false;
public boolean addBillingAddress(long companyId) {
return false;
public boolean addEmployee(long companyId) {
return false;
public boolean addBankAccount(long companyId) {
return false;
}That you guys and gals will have a complete overview of whats really going on, here is the Entity as well.
package ejb;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="COMPANY")
public class Company implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="COMPANY_NAME")
private String name;
public Long getId() {
return id;
public void setId(Long id) {
this.id = id;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
System.err.println("SUCCESS: CompanyName SET");
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Company)) {
return false;
Company other = (Company) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
return true;
@Override
public String toString() {
return "ejb.Company[id=" + id + "]";
}And the persistence.xml file
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="PersistenceUnit" transaction-type="JTA">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>jdbc/sample</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="toplink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>And this is the error message
08.06.2009 10:30:46 com.sun.enterprise.appclient.MainWithModuleSupport <init>
WARNUNG: ACC003: Ausnahmefehler bei Anwendung.
javax.ejb.EJBException: nested exception is: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.RemoteException: Transaction aborted; nested exception is: javax.transaction.RollbackException: Transaktion für Zurücksetzung markiert.; nested exception is:
javax.transaction.RollbackException: Transaktion für Zurücksetzung markiert.
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.RemoteException: Transaction aborted; nested exception is: javax.transaction.RollbackException: Transaktion für Zurücksetzung markiert.; nested exception is:
javax.transaction.RollbackException: Transaktion für Zurücksetzung markiert.
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:243)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(BCELStubBase.java:225)
at ejb.__EntryRemote_Remote_DynamicStub.addCompany(ejb/__EntryRemote_Remote_DynamicStub.java)I spend half the night figuring out whats wrong, however I couldnt find any solution.
If you have any idea pls let me know
Best regards and happy coding
Taggert
Edited by: Taggert_77 on Jun 8, 2009 2:27 PMWell I don't understand this. If Netbeans created a Stateless Session Bean as a facade then it works -and it is implemented as a CMP, not as a BMP as you suggested.
I defenitely will try you suggestion, just for curiosity and to learn the technology, however I dont have see why BMP will work and CMP won't.
I also don't see why a stateless bean can not be a CMP. As far as I read it should not matter. Also on the link you sent me, I can't see anything related to that.
Maybe you can help me answering these questions.
I hope the above lines don't sound harsh. I really appreciate your input.
Best regards
Taggert -
Questions about entity bean caching/pooling
We have a large J2ee app running on weblogic6.1 sp4. We are using entity beans
with cmp/cmr. We have about 200 EntityBeans and accessed quite heavily. We are
struggling with what is the right setting of max-beans-in-cache and idle-time-out.
The current max heap setting is 2GB. With the current setting (default setting
of max-beans-in-cache to 1000, with a few exceptions to take care of cachefullexceptions)
we run into extended gc happening after about 4 hours. The memory freed gradually
reduces with time and lurks around the 30% mark after about 4 hours of run at
the expected load. In relation to this we had the following questions
1. What does caching mean?
a. If a bean with primary key 100 exists in the cache, and the following
is done what is expected
i. findByPrimaryKey(100)
ii. findBySomeOtherKey(xyz)
which results in loading up bean with primary key 100
iii. cmr access to bean with
primary key 100
Is the instance in the cache reused at all between transactions?
If there is minimal reuse of the beans in cache, Is it fair to assume that caching
can only help loading of beans within a transaction. If this is the case, is there
any driver to increase the max-beans-in-cache other than to avoid CacheFullException?
In other words, is it wrong to say that max-beans-in-cache should be set to the
minimum value so as to avoid CacheFullExceptions.
2. Again what is the driver of setting idle-time-out to a value? ( We currently
have it at 30 secs) Partly the answer to this question would again go back to
what amount of reuse is done from cache? Is it right to say that it should be
set to a very low value? (Why is the default 10 min?)
3. Can you provide us any documentation that explains how all this works
in more detail, particularly in relevance to entity beans. We have already read
the documentation from weblogic as is. Anything to give more explicit detail?
Any tools that can be of use.
4. What is the right parameter (from among the things that weblogic console
throws up) to look at for optimizing?
Thanks in advance for your help
Cheers
ArunThe behaviour changes according to these descriptor settings: concurrency-strategy,
db-is-shared and include-updates.
1. If concurrency-strategy is Database, then the database is used to provide locking
and db-is-shared is ignored. A bean's ejbLoad() is called once per transaction,
and the 'cache' is really a per-transaction pool. A findByPrimaryKey() always
initially hits the db, but can use the cache if called again in the same txn (although
you'd simply just pass a reference around). A findByAnythingElse() always hits
the db.
2. If concurrency-strategy is ReadOnly then the cache is longer-term: ejbLoad()
is only called when the bean is activated; thereafter, the number of times ejbLoad()
is called is influenced by the setting of read-timeout-seconds. A findByPrimaryKey()
can use the cache. A findByAnythingElse() can't.
3. If concurrency-strategy is Exclusive then db-is-shared influences how many
times ejbLoad() is called. If db-is-shared is false (i.e. the container has exclusive
use of the underlying table), then the ejbLoad() behaviour is more like ReadOnly
(2. above), and the cache is longer-term. If db-is-shared is true, then the ejbLoad()
behaviour is like Database (1. above).
Exclusive concurrency reduces ejbLoads(), increases the effectiveness of the cache,
but can reduce app concurrency as only one instance of an entity bean can exist
inside the server, and access to it is serialised at the txn level.
You can't use db-is-shared = false in a cluster. So Exclusive mode is less useful.
That's when you think long and hard about Tangosol Coherence (http://www.tangosol.com)
4. If include-updates is true, then the cache is flushed to the db before every
non-findByPrimaryKey() finder call so the finder (which always hits the db) will
get the latest bean values. This overrides a true setting of delay-updates-until-end-of-tx.
The max-beans-in-cache setting refers to the maximum number of active beans (really
beans that have been returned by a finder in a txn that hasn't committed). This
wasn't checked in SP2 (we have an app that accidently loads 30,000 beans in a
txn with a max-beans-in-cache of 3,000. Slow, but it works, showing 3,000 active
beans, and 27,000 passivated ones...).
This setting is checked in SP5, but I don't know about SP4. So you do need to
size appropriately.
In summary:
- The cache isn't nearly as useful as you'd like. You get far more db activity
with entity beans than you'd like (too many ejbLoads()). This is disappointing.
- findByPrimaryKey() finders can use the cache. How long the cache is kept around
depends on concurrency-strategy.
- findByAnythingElse() finders always hit the db.
WebLogic 8 tidies all this up a bit with a cache-between-transactions setting
and optimistic locking. But I believe findByAnythingElse() finders still have
to hit the db - ejbql is never run against the cache, but is always converted
to SQL and run against the db.
Hope this is of some help - feel free to email me at simon-dot-spruzen-at-rbos-dot-com
(you get the idea!)
simon. -
EJB 3.0 question - saving an entity bean containing another entity bean
Hi,
First, I want to store an entity bean. Secondly, I want to store another entity bean - containing the first entity bean.
I have the following code in a session bean for this:
public void saveFeedScheduling(FeedScheduling feedScheduling, FeedSource feedSource) {
FeedSource feeds = em.merge(feedSource);
em.flush();
feedScheduling.setFeedSource(feeds);
FeedScheduling feedSched = em.merge(feedScheduling);
em.flush();
This seems to work fine - still, is this the proper way to do it?Hello,
This kind of parameter can be specified using the relationship annotation.
I'm not 100% sure, but, lok at the "cascade element".
Regards,
Sebastien Degardin -
Very Basic Question about Entity Beans !!! Need your help.
Hi,
I have the following requirement:-
==============================
There is an application A, whose multiple instances can run
at the same time. There is some data/variable which is to be
globally shared (i.e by all the instances). I have thought of using
Entity Beans and putting that data in a single record in DB.
Approach A:-
~~~~~~~~~~~
Instance 1 of A (with Entity Bean ) -
-> Database (only 1 row exist)
Instance 2 of A (with Entity Bean ) -
Approach B:-
~~~~~~~~~~~
Instance 1 of A
-> Entity Bean -> Database (only 1 row exist)
Instance 2 of A
My Query is:-
1) In Approach A, both the instances of Application
have their own Entity Bean (running in same JVM as them,
packaged with Application)..Now both the entity bean instances
represent 1 row on Database...At one time only 1 Entity bean
will be performing the operation (read/write, other will be
disallowed).
2) In Approach B, both the instances of application(or Client) using
the same Entity Bean - which is representing 1 row of Database
Which is correct....I have read somewhere instance of Entity Bean
corresponds to 1 row of database....If that is the case, Approach
A would be wrong..
Please help.1 Entity bean for 1 row is not true. An entity bean can represent data from multiple tables also. The correct statement is 1Entitybean for 1 resultset.
So in case 1, u have 2 instances of Application running so it should not be an issue. -
Question on Persistence (Entity Beans, Hibernate, JDBC)
Hi everybody!
Until now, I have read a lot about persistence in the J2EE-sector, but I am still confused about which technology to used in my case.
I hope, that maybe you can give me some hints, by telling me which technology is good or bad regarding my requirements:
I want to build a customer- and order-management system fullfilling the following requirements:
1. The client is a Java application, the server is a JBOSS 4.0.1
2. The databasa scheme exists already and I'm not allowed to change it.
Some data, that logically belongs together and which shall be presented together to the client is distributed over 2 database tables.
3. The user cannot just create new and view data, but will also edit existing data quite often.
4. The user can assign products to an order. Often, there will be more than 1000 products assigned to an order, which will be presented to the user as a table (e.g. JTable). The user can then edit each cell of that 1000-row table, which of course will lead to an update in the db.
5. The user can also assign customers to a specific role in an order-process. On the other hand, each customer can make many orders.
So, we have a n:m relation here with the db-tables Customer, Order, OrderCustomer.
6. A complex search functionality has to be implemented, where the db-query is created dynamically at runtime.
7. The application is a multi-user application (about 10 users). It will be very rare, that users will work on the same data at the same time, but it might happen.
8. The database type (SAP DB) will not be changed in the near future.
With these 8 requirements in mind, I dealed a lot with EntityBeans, Hibernate and JDBC with SesseionBeans during the last 2 weeks.
Until now, I came to the following conclusions.
Hibernate is too slow. That'S bad, for data is edited very often and sometimes I want to edit just a single cell in 1000-row table.
Hibernate's biggest advantage - that it makes your application independent of the database type - is not even required (see point 8).
JDBC with SessioBeans: Very fast (I tried a simple query and it was about 10 times faster than Hibernate).
The disadvantage is, that I have to take care about all the transaction, concurrency control etc. things.
If I use JDBC, I want to do it that way: A SessionFacade accesses a DAO-object which executes the DB-query and returns the result to the SessionFacade which in the last step will pass the result to the client.
Entity Beans: I am completely confused with Entity Beans.
I read a lot about the CompositeEntity-Pattern for BMP. But on sun's J2EE Pattern page (http://java.sun.com/blueprints/corej2eepatterns/Patterns/CompositeEntity.html)
they said, that it's just useful when using the EJB 1.1 specification, because from EJB 2.0. the container or whatever will take care about lazy loading and store optimization.
So, from EJB 2.0. you should prefer using CMP-Beans with Container Managed Relationships (CMR), but as I heard, the dependent objects cannot be accessed and changed by the client when using CMPBeans with CMR.
However, a simple DB/Entity-mapping will not work in my case, because as mentioned above, there are thousands of products from the db to be managed at the same time. So here, I thought, the Composite pattern with its lazy loading strategy would be useful.
Furthermore, I have an n:m relationship in my database scheme, which is not trivial to map to entity beans. And don't forget that some related data is spread over 2 databse tables.
To sum it up, it would be very nice if some of you could clarify this perisistence nightmare, especially some clarification about if and how to use EntityBeans when having n:m relationships, editing data a lot, managing lots of table rows at once and having related data distributed over 2 database tables.
So, which technology would you prefer with the 8 requirements in mind? Hibernate, Entity Beans or JDBC with SessionBeans? Or would you prefer a mixed solution?
Thanx for every hint.
Regards,
egonHere the requested information about the test:
Goal:
Find all customers, who's branches have the String "Branch" in their name.
Both times, a simple client accesses the same SessionBean in a JBOSS-Container.
This Bean has 2 methods. One accesses the DB via Hibernate (executeCriteria), the other one via JDBC (executeCriteriaJDBC).
The code to count the seconds of computation is as follows:
long startTime = System.currentTimeMillis();
List customerList = bean.executeCriteria(dc);
System.out.println("Hibernate: "+((System.currentTimeMillis()-startTime)/1000.0f)+" sek");
startTime = System.currentTimeMillis();
List customerListJDBC = bean.executeCriteriaJDBC(query);
System.out.println("JDBC: "+((System.currentTimeMillis()-startTime)/1000.0f)+" sek");
HIBERNATE:
CODE:
Branch Branch = new Branch();
Branch.setName("%Branch%");
Example example = Example.create(Branch);
DetachedCriteria dc = DetachedCriteria.forClass(Customer.class)
.createCriteria("branches").add(example.enableLike()).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
QUERY:
select
this_.UUID as UUID1_1_,
this_.NAME as NAME1_1_,
this_.CUSTOMERNO as CUSTOMERNO1_1_,
this_.SHORTDESC as SHORTDESC1_1_,
this_.LONGDESC as LONGDESC1_1_,
this_.TAXNUMBER as TAXNUMBER1_1_,
this_.SALESTAXID as SALESTAXID1_1_,
this_.ACCOUNTHOLDER as ACCOUNTH8_1_1_,
this_.BANKACCOUNT as BANKACCO9_1_1_,
this_.BANKCODE as BANKCODE1_1_,
this_.BANKNAME as BANKNAME1_1_,
this_.AREA1TEXT as AREA12_1_1_,
this_.AREA2TEXT as AREA13_1_1_,
this_.AREA3TEXT as AREA14_1_1_,
this_.AREA4TEXT as AREA15_1_1_,
this_.AREA5TEXT as AREA16_1_1_,
this_.CH_UUID as CH17_1_1_,
this_.REFTEXT1 as REFTEXT18_1_1_,
this_.REFTEXT2 as REFTEXT19_1_1_,
this_.REFTEXT3 as REFTEXT20_1_1_,
branch1_.UUID as UUID0_0_,
branch1_.NAME as NAME0_0_,
branch1_.ILN as ILN0_0_,
branch1_.BRANCHID as BRANCHID0_0_,
branch1_.SHORTDESC as SHORTDESC0_0_,
branch1_.LONGDESC as LONGDESC0_0_,
branch1_.BAGSRECEIVED as BAGSRECE7_0_0_,
branch1_.CUSTOMER_UUID as CUSTOMER8_0_0_
from
CUSTOMER this_,
BRANCH branch1_
where
this_.UUID=branch1_.CUSTOMER_UUID
and (
branch1_.NAME like ?
RESULT:
Customername: Customer_A
Customername: Customer_F
Customername: Customer_D
Customername: Customer_R
Customername: Customer_S
TIME:
Hibernate: 1.343 sek
JDBC:
QUERY:
Select distinct c.* from Customer c, Branch b where b.id=b.Customer_id and b.name like '%Branch%'
// After getting the result of the query: Create a list of Customer-objects. Set all attributes of each Customer-object.
RESULT:
Customername: Customer_R
Customername: Customer_A
Customername: Customer_S
Customername: Customer_D
Customername: Customer_F
TIME:
JDBC: 0.125 sek
The Customer.hbm.xml (auto-generated in Eclipse with Middlegen)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<!--
Created by the Middlegen Hibernate plugin 2.2
http://boss.bekk.no/boss/middlegen/
http://www.hibernate.org/
-->
<class
name="hibernate.hibernate.Customer"
table="CUSTOMER"
lazy="false"
>
<id
name="uuid"
type="java.lang.String"
column="UUID"
>
<generator class="assigned" />
</id>
<property
name="name"
type="java.lang.String"
column="NAME"
length="100"
/>
<property
name="customerno"
type="java.lang.Integer"
column="CUSTOMERNO"
length="5"
/>
<property
name="shortdesc"
type="java.lang.String"
column="SHORTDESC"
length="50"
/>
<property
name="longdesc"
type="java.lang.String"
column="LONGDESC"
length="100"
/>
<property
name="taxnumber"
type="java.lang.String"
column="TAXNUMBER"
length="50"
/>
<property
name="salestaxid"
type="java.lang.String"
column="SALESTAXID"
length="50"
/>
<property
name="accountholder"
type="java.lang.String"
column="ACCOUNTHOLDER"
length="50"
/>
<property
name="bankaccount"
type="java.lang.String"
column="BANKACCOUNT"
length="50"
/>
<property
name="bankcode"
type="java.lang.String"
column="BANKCODE"
length="50"
/>
<property
name="bankname"
type="java.lang.String"
column="BANKNAME"
length="50"
/>
<property
name="area1text"
type="java.lang.String"
column="AREA1TEXT"
length="50"
/>
<property
name="area2text"
type="java.lang.String"
column="AREA2TEXT"
length="50"
/>
<property
name="area3text"
type="java.lang.String"
column="AREA3TEXT"
length="50"
/>
<property
name="area4text"
type="java.lang.String"
column="AREA4TEXT"
length="50"
/>
<property
name="area5text"
type="java.lang.String"
column="AREA5TEXT"
length="50"
/>
<property
name="chUuid"
type="java.lang.String"
column="CH_UUID"
length="50"
/>
<property
name="reftext1"
type="java.lang.String"
column="REFTEXT1"
length="50"
/>
<property
name="reftext2"
type="java.lang.String"
column="REFTEXT2"
length="50"
/>
<property
name="reftext3"
type="java.lang.String"
column="REFTEXT3"
length="50"
/>
<!-- Associations -->
<!-- bi-directional one-to-many association to Branch -->
<set
name="branches"
lazy="true"
inverse="true"
cascade="all"
>
<key>
<column name="CUSTOMER_UUID" />
</key>
<one-to-many
class="hibernate.hibernate.Branch"
/>
</set>
</class>
</hibernate-mapping>So, seems to me like Hibernate is also getting the data from the Branch-Table related to each Customer. Maybe this is the reason, why Hibernate is slower.
But as you can see in the mapping-File of the customer, I wanted Branches to be lazy loaded.
Do you have any ideas, why Hibernate is so much slower? Any hints for optimizing that code?
Do you have any further tricks to optimize Hibernate? Unfortunately I am not allowed to make changes at the database, so I cannot e.g. set indices for optimization.
However, I�m a Hibernate-Newbie. In fact, I just made this test and was very disappointed about its result, so I didn�t keep on working with Hibernate.
But maybe you can proof me, that Hibernate is a good choice. If so, do you have any good resources (links, books) that help working with Hibernate in connection with JBOSS, describe how to map n:m relationships, show how to work with large results and so forth?
Thanx for help,
egon -
Question about multiple RequiresNew in Entity Bean transaction
Hi I've got a problem concerning transactions:
In both cases I've got a CMP Entity Bean called "Account" with some mothods like
increaseBalance(double amount)
decreaseBalance(double amount)
transferMoney(double amount)
for all methods the TransactionAttribute is "RequiresNew". When calling first decreaseBalance(amount) and afterwords
increaseBalance(amount), bothfrom within transferMoney(amount). When setting entityContext.RollbackOnly()
I would expect this rollback doesn't undo my changes because they are in a different transaction, which has been comitted
when the methods finished, but both are rolled back.
I thought there are no "nested transactions" in J2EE. Isn't this one?
Thanks!
MartinAhhhh! Right! If I call "this.increase(balance)" from the AccountBean method "transferMoney", the container has no chance to create a new transaction, so the same transaction as in "transferMoney" is used. I didn't think about that, but of course...
So one should never call a bean method directly even when it is a method of the same instance the thread is currently in.
Thanks a lot! -
Basic question about Entity Bean.
Hi:
Let's suppose that we have the code like below:
home = (ProductHome)javax.rmi.PortableRemoteObject.narrow(ctx.lookup("ProductHome"),
ProductHome.class);
home.create("mouse");
home.create("keyboard");
home.create("monitor");
home.create("mainboard");
Q1: Does the weblogic hold the four instances of Product Bean after run those
code?
Q2: When do the instances will be backed to pool or be destoryed?
Q3: Does the weblogic will ready all beans if client execute home.findByALL().
(findByAll method return all product), that will consume a lot of memory if there
is a mass of client do that?
Regards!
Eric Temel"Michael Jouravlev" <[email protected]> wrote in message
news:[email protected]..
>
"Eric Temel" <[email protected]> wrote in message
news:[email protected]..
Q3: Does the weblogic will ready all beans if client executehome.findByALL().
(findByAll method return all product), that will consume a lot of memoryif there
is a mass of client do that?WL has a setting which allows you to find a bean without loading it.Search
docs.
ah, good point. To be redundant, even though the beans are found and not
loaded (via the finders-load-bean DD setting which I think we're referring
to),
the 'found' but unloaded beans will still take up a some room in the entity
bean cache.
Something to keep in mind if memory is an issue..
-thorick -
Error While Deploying A CMP Entity Bean With A Composite Primary Key
Hello all,
I have a problem deploying CMP Entity beans with composite primary keys. I have a CMP Entity Bean, which contains a composite primary key composed of two local stubs. If you know more about this please respond to my post on the EJB forum (subject: CMP Bean Local Stub as a Field of a Primary Key Class).
In the mean time, can you please tell me what following error message means and how to resolve it? From what I understand it might be a problem with Sun ONE AS 7, but I would like to make sure it's not me doing something wrong.
[05/Jan/2005:12:49:03] WARNING ( 1896): Validation error in bean CustomerSubscription: The type of non-static field customer of the key class
test.subscription.CustomerSubscriptionCMP_1530383317_JDOState$Oid must be primitive or must implement java.io.Serializable.
Update the type of the key class field.
Warning: All primary key columns in primary table CustomerSubscription of the bean corresponding to the generated class test.subscription.CustomerSubscriptionCMP_1530383317_JDOState must be mapped to key fields.
Map the following primary key columns to key fields: CustomerSubscription.CustomerEmail,CustomerSubscription.SubscriptionType. If you already have fields mapped to these columns, verify that they are key fields.Is it enough that a primary key class be serializable or all fields have to implement Serializable or be a primitive?
Please let me know if you need more information to answer my question.
Thanks.
NikolaHi Nikola,
There are several problems with your CMP bean.
1. Fields of a Primary Key Class must be a subset of CMP fields, so yes, they must be either a primitive or a Serializable type.
2. Sun Application Server does not support Primary Key fields of an arbitrary Serializable type (i.e. those that will be stored
as BLOB in the database), but only primitives, Java wrappers, String, and Date/Time types.
Do you try to use stubs instead of relationships or for some other reason?
If it's the former - look at the CMR fields.
If it's the latter, I suggest to store these fields as regular CMP fields and use some other value as the PK. If you prefer that
the CMP container generates the PK values, use the Unknown
PrimaryKey feature.
Regards,
-marina -
EJB 3.0 entity beans and WebDynpro models
Hi all,
first off all my setup:
WebDynpro Development Component: dcA
EJB Module Development Component: dcB
i wan't to create Entity Beans in dcB an use it for my model in dcA.
My questions:
1. Why does the "New Wizard" only offer EJB 3.0 Session and Message Beans an no Entity Beans? What is the correct way for creating Entity Beans in DevStudio?
2. Is ist right that i have to define a public Part containing the Entity Bean to make it visible to dcA?
Regards,
ChristianHi,
I'm experiencing same problems, is this a bug or an feature? -
CMP Entity Bean with database specific features
Hi there,
I�m studying Entity Beans and I'm doing some experiences with SQL Server.
At first, I built a CMP Bean and marked in deploytool to create the tables. Ok, it worked.
Now, I'm trying to interact to an existent database. But, I got a problem: the primary key is defined by the Server. I can read it and I can remove entries. But, when I try to insert some entry, I can't pass the key in SQL statement. I edited the generated statement to do it, but it doesn't work. I get a RollbackException.
My question is: is it possible to do what I'm intending to do with CMP? What am I doing wrong?
Do you think that, to do this, I should use BMP Entity beans?
Thanks in advance,
Anicio"CMP provides you with database independence and less coding efforts."
BMP is not database dependent, unless you invoke database specific things in your SQL (something I do not do). CMP on the otherhand is inherently appserver specific (which was it's goal when BEA, IBM, et al. came up with it), and still limits your design possibilities. See this thread for an example:
http://forum.java.sun.com/thread.jsp?forum=13&thread=318785
As for less coding effort, that is a relative statment. Yes a simple CMP bean requires less coding to develop the first time. I personally view a few lines of SQL to load and store the data as being fairly trivial. But that needs to be offset with the problems inherent in using appserver specific CMP implementations.
As an example, try mapping WebSphere CMP to a pre-existing database without using IBM's IDE. It's an incredible pain in the ass since WebSphere does not come with a "meet-in-the-middle" solution. Any J2EE developer that has had the experience of working with different appservers (especially if they have had to port an app, as I have) can attest to the complications that arise with each implementation.
A BMP bean, written with non-DB-specific SQL, is the most portable, most flexible approach to EntityBeans. Yes, it requires the developer to be able to write some SQL, which should not take a significant amout of time. WRT queries, you have to write them, either SQL, EQL, or some appserver specific format.
As an aside, the use of code generators to simplify the creation of EJBs lends itself well to BMP. By using a (or writing your own) code generator, you can mitigate the annoying SQL bugs that creep up early in development. -
EJB 3.0: CMP Entity bean from view
Hi,
I have created an entity bean from a database view.
I don't have a good filed to use as id in my view. So I want to generate the id in my entity bean.
How can I do this ?
ThanksHi,
I didn't get your question.
CMP is something, which can be done by hand.
So maybe it is better, to do it manually.
Bea has some workaround, I am sure.
Maybe it is something with deployment descriptors, which
have to be configured to the underlying database.
Sorry for my stupid first answer.
Volker. -
How does a session bean find entity beans in EJB 3.0
Hi,
I am new to J2EE. I have difficulties finding out how a session bean locates the entity-manager for a group of entity beans. I understand that the entitymanager in the session bean is injected using the PersistenceContext annotation, but I dont see how it locates the intended EntityManager (which could be on another server).
I realize this is probably trivial, but can any of you guys tell me what I am missing?
Best Regards
ThomasHi Thomas,
Good question. Each @PersistenceContext annotation is associated with a single Persistence Unit. A Persistence Unit is defined either at the module level or at the .ear level. Each persistence unit has a name associated with it. The unitName() attribute is used to map @PersistenceContext to the associated PersistenceUnit. Since the most common case is that an application will only define one persistence unit, the spec requires that if the unitName() is not specified, it will automatically map to that single persistence unit.
--ken -
Do JNDI look up for entity beans from a session bean in different jars
I have a problem doing entity beans JNDI look up from a session bean which is deployed
as a separate package (session.jar) from the entity beans (entity.jar)
I believe if both session bean and entity beans are deployed into one jar and
I specify ejb-local-reference-description for session bean, it should work. However,
due to some reason, they have to be in separated packages but still in the same
container. Then question how to do JNDI lookup given entity beans only have local
interfaces?
FYI.
1 both session.jar and entity.jar are self-contained. i.e., no deployment error.
each JNDI name can be viewed from JNDI tree
2. weblogic-ejb-jar.xml for session.jar
<weblogic-ejb-jar>
<description><![CDATA[Generated by XDoclet]]></description>
<weblogic-enterprise-bean>
<ejb-name>PetstoreLogic</ejb-name>
<stateless-session-descriptor>
</stateless-session-descriptor>
<reference-descriptor>
</reference-descriptor>
<jndi-name>PetstoreLogic</jndi-name>
<local-jndi-name>PetstoreLogicLocal</local-jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
3. weblogic-ejb-jar.xml (code snip) for entity.jar
<weblogic-enterprise-bean>
<ejb-name>Account</ejb-name>
<entity-descriptor>
<persistence>
<persistence-type>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
<type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage>
</persistence-type>
<persistence-use>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
</persistence-use>
</persistence>
</entity-descriptor>
<reference-descriptor>
</reference-descriptor>
<local-jndi-name>net.sourceforge.cpetstore/AccountLocalHome</local-jndi-name>
</weblogic-enterprise-bean>
4. if I do
accountLocalHome = (AccountLocalHome) ic.lookup("net/sourceforge/cpetstore/AccountLocalHome");
get error like:
javax.naming.LinkException: . Root exception is javax.naming.NameNotFoundException:
While trying to look up /app/ejb/net.sourceforge.cpetstore-entity.jar#Account/local-home
in /app/ejb/cpetstore-ejb.jar#PetstoreLogic.; remaining name '/app/ejb/net/sourceforge/cpetstore-entity/jar#Account/local-home'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:869)
at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:150)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:338)In weblogic-ejb-jar.xml use jndi-name instead of local-jndi-name in reference-descriptor
element.
"Qiming He" <[email protected]> wrote:
>
I have a problem doing entity beans JNDI look up from a session bean
which is deployed
as a separate package (session.jar) from the entity beans (entity.jar)
I believe if both session bean and entity beans are deployed into one
jar and
I specify ejb-local-reference-description for session bean, it should
work. However,
due to some reason, they have to be in separated packages but still in
the same
container. Then question how to do JNDI lookup given entity beans only
have local
interfaces?
FYI.
1 both session.jar and entity.jar are self-contained. i.e., no deployment
error.
each JNDI name can be viewed from JNDI tree
2. weblogic-ejb-jar.xml for session.jar
<weblogic-ejb-jar>
<description><![CDATA[Generated by XDoclet]]></description>
<weblogic-enterprise-bean>
<ejb-name>PetstoreLogic</ejb-name>
<stateless-session-descriptor>
</stateless-session-descriptor>
<reference-descriptor>
</reference-descriptor>
<jndi-name>PetstoreLogic</jndi-name>
<local-jndi-name>PetstoreLogicLocal</local-jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
3. weblogic-ejb-jar.xml (code snip) for entity.jar
<weblogic-enterprise-bean>
<ejb-name>Account</ejb-name>
<entity-descriptor>
<persistence>
<persistence-type>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
<type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage>
</persistence-type>
<persistence-use>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>6.0</type-version>
</persistence-use>
</persistence>
</entity-descriptor>
<reference-descriptor>
</reference-descriptor>
<local-jndi-name>net.sourceforge.cpetstore/AccountLocalHome</local-jndi-name>
</weblogic-enterprise-bean>
4. if I do
accountLocalHome = (AccountLocalHome) ic.lookup("net/sourceforge/cpetstore/AccountLocalHome");
get error like:
javax.naming.LinkException: . Root exception is javax.naming.NameNotFoundException:
While trying to look up /app/ejb/net.sourceforge.cpetstore-entity.jar#Account/local-home
in /app/ejb/cpetstore-ejb.jar#PetstoreLogic.; remaining name '/app/ejb/net/sourceforge/cpetstore-entity/jar#Account/local-home'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:869)
at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:150)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:338)
Maybe you are looking for
-
Photos won't save to camera roll
Since I installed iOS7, all the pictures I take with the camera won't save to camera roll. I see them in the lower corner of the camera but when I click on it, they are not in the camera roll. In the camera roll, I just have a bunch of pictures that
-
I have just purchased my new Imac 21.5. I am trying to do an update my Iphoto through the app store but when i do it directs me to my Icloud. When i go to my Icloud there is no Iphoto app there to update. I have been trying to this update now for som
-
If you are desperately waiting for a new update... Read this!
WOW! Just saw this post. This is really pushing me towards Roku or Andoid mini-PC... I did their survey and commented in there that I do realize technology is always changing/improving/etc... But the existing WD TV lives that I have could very easil
-
Pages 8 doesn't seem to work with 10.8
I am having trouble opening a file in Pages 8 using my Air with 10.8. All that will show in the window are the recent changes. I can't get it to open the existing file with all the data in it. This file was created on my desktop iMac using a earlier
-
IExpenses: Foreign currency amounts
I am using iExpenses and the base currency is set to USD. An expense report is to be paid in YEN. When the approval process is submitted the expense report is sent to the next employee as the system advises the approver does not have sufficient spend