JPA cascading using TopLink
Hi, I am writing DAOs for one of my workflow applications. I need to write to 2 tables A and B. Table A should have only the current operational data and Table B should have the history (for reporting/metrics info) of Table A. And to build the history, whenever there is an UPDATE event on Table A, I need to capture that as an INSERT in Table B, so that at any point of time I will have a list of events happened in Table B. I am planning to use JPA annotations and cascading features using TopLink for this. I know I can cascade INSERT and DELETE from Table A to Table B. My quiestion is - Is there a way I can cascade the updates in Table A as INSERTs in Table B? Any magic that annotations or JPA or even TopLink can provide? Any help/suggestions/thoughts are highly appreciated. Thanks!
Hi Doug, I tried implementing this with my own object and data model and also registered the handler in the persistence.xml. I am getting the following error. I am wondering if I need any additional setup to start the listener and make it work, any idea? do you have any sample test case that you had run your application with the handler? Thanks for all your help on this.
javax.persistence.RollbackException: java.lang.NullPointerException
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:105)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:45)
at A.B.C.dao.jpa.BaseDao.save(BaseDao.java:215)
at A.B.C.dao.jpa.BaseDao.save(BaseDao.java:1)
at A.B.C.dao.jpa.JpaWorkflowTests.testGetTaskReturningSingleTask(JpaWorkflowTests.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:69)
at org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.access$001(AbstractAnnotationAwareTransactionalTests.java:47)
at org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests$1.run(AbstractAnnotationAwareTransactionalTests.java:115)
at org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.runTest(AbstractAnnotationAwareTransactionalTests.java:180)
at org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.runTestTimed(AbstractAnnotationAwareTransactionalTests.java:153)
at org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests.runBare(AbstractAnnotationAwareTransactionalTests.java:111)
at org.springframework.test.jpa.AbstractJpaTests.runBare(AbstractJpaTests.java:159)
at org.springframework.test.jpa.AbstractJpaTests.runBare(AbstractJpaTests.java:239)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.NullPointerException
at A.B.C.model.TaskHistory.<init>(TaskHistory.java:296)
at A.B.C.audit.TaskAuditingHandler.insertTaskHistory(TaskAuditingHandler.java:32)
at A.B.C.audit.TaskAuditingHandler.aboutToInsert(TaskAuditingHandler.java:44)
at oracle.toplink.essentials.descriptors.DescriptorEventManager.notifyListener(DescriptorEventManager.java:649)
at oracle.toplink.essentials.descriptors.DescriptorEventManager.notifyListeners(DescriptorEventManager.java:679)
at oracle.toplink.essentials.descriptors.DescriptorEventManager.executeEvent(DescriptorEventManager.java:198)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:452)
at oracle.toplink.essentials.queryframework.InsertObjectQuery.executeCommit(InsertObjectQuery.java:74)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:635)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:599)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:495)
at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:130)
at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:283)
at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:67)
at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:609)
at oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:536)
at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:123)
at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:95)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2219)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:937)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:894)
at oracle.toplink.essentials.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:254)
at oracle.toplink.essentials.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:175)
at oracle.toplink.essentials.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:2638)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1030)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:387)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1112)
at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:91)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:842)
at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:87)
... 30 more
Similar Messages
-
Couldn't persist OneToMany JoinColumn/JoinTable (Unidir) using TopLink JPA
Hi All,
I am having a lot of difficulty deploying a OneToMany Unidirectional (Zipcode) record which consist of multiple Zipnames using TopLink on Glassfish v2r2, JDK1.6.0_06, MySQL 5.0, Netbeans 6.1 and Windows XP platform.
Below are the relevant EJBs snippets:
Zipcode class
@Entity
@Table(name="ZIPCODE")
public class Zipcode implements Serializable {
@OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
@JoinColumn(name="ZIPCODE_ID")
or
@JoinTable(name="ZIPCODE_ZIPNAME",
joinColumns={@JoinColumn(name="ZIPCODE_ID")},
inverseJoinColumns={@JoinColumn(name="ZIPNAME_ID")})
private Collection<Zipname> zipnames = new ArrayList<Zipname>();
public Collection<Zipname> getNames()
return zipnames;
public void setZipnames(Collection<Zipname> zipnames)
this.zipnames = zipnames;
Zipname class does not maintain relationship back to Zipcode.
public class ZipcodeApplicationClient {
@PersistenceContext(unitName="GeographicalDB-PU")
private static EntityManager manager;
public ZipcodeApplicationClient() {
public static void main(String[] args) {
try {
Zipcode zipcode_1 = new Zipcode();
zipcode_1.setcode(9001);
Zipname zipname_1 = new Zipname();
zipname_1.setName("Harbour Cove");
zipcode_1.getNames().add(zipname_1);
// Can add one Zipname record with JoinTable but not JoinColumn
Zipname zipname_2 = new Zipname();
zipname_2.setName("Wonderland");
zipcode_1.getNames().add(zipname_2);
manager.persist(zipcode_1); // line 45
The same deployment error message below was generated from both JoinColumn and JoinTable methods:
run-deploy:
run-display-browser:
run-ac:
Copying 1 file to C:\Documents and Settings\Jack\GeographicalBean\dist
Caught an unexpected exception!
java.lang.NullPointerException
at client.ZipcodeApplicationClient.main(ZipcodeApplicationClient.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.util.Utility.invokeApplicationMain(Utility.java:266)
at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:449)
at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:259)
at com.sun.enterprise.appclient.Main.main(Main.java:200)
run-InvestmentBean-app-client:The JoinColumn method would not work for one Zipname record. On the other hand, JoinTable approach would allow us to add a single Zipname record without error out.
Q1. Can you confirm whether TopLink JPA 1.0 (Glassfish v2r2) support OneToMany JoinColumn Unidirectional at all?
Q2. Does TopLink JPA 1.0 (Glassfish v2r2) support OneToMany JoinTable Unidirectional? If so, what is the cause of this issue? Otherwise, please make appropriate recommendation steps to take.
This question has been posted on http://forums.sun.com/thread.jspa?threadID=5330670&tstart=0 and http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=78&t=004489&p=1 earlier in the hope a quicker response.
Your guidance would be very much appreciated.
Many thanks,
JackHi,
Below are some more error output from the OneToMany JoinTable Unidirectional approach:
pre-run-deploy:
Initial deploying InvestmentBean to C:\Documents and Settings\abc\InvestmentBean\dist\gfdeploy
Completed initial distribution of InvestmentBean
Start registering the project's server resources
Finished registering server resources
moduleID=InvestmentBean
deployment started : 0%
deployment finished : 100%
Deploying application in domain completed successfully
Trying to create reference for application in target server completed successfully
Trying to start application in target server completed successfully
WARNING:
JDO76614: Deployment encountered SQL Exceptions:
JDO76609: Got SQLException executing statement "CREATE TABLE ZIPCODE (ID INTEGER NOT NULL, DIALING_CODE VARCHAR(255), TIME_ZONE VARCHAR(255), CODE INTEGER, NEAREST_AIRPORT VARCHAR(255), LONGITUDE VARCHAR(255), NEAREST_TRAIN_STATION VARCHAR(255), NEAREST_URBAN_CENTRE VARCHAR(255), HOTELS VARCHAR(255), LATITUDE VARCHAR(255), NEARBY_FEATURES VARCHAR(255), COUNCIL VARCHAR(255), LOCALITY VARCHAR(255), PRIMARY KEY (ID))": com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'zipcode' already exists
JDO76609: Got SQLException executing statement "CREATE TABLE ZIPCODE_ZIPNAME (ZIPCODE_ID INTEGER NOT NULL, ZIPNAME_ID INTEGER NOT NULL, PRIMARY KEY (ZIPCODE_ID, ZIPNAME_ID))": com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'zipcode_zipname' already exists
JDO76609: Got SQLException executing statement "CREATE TABLE ZIPNAME (ID INTEGER NOT NULL, NAME VARCHAR(255), PRIMARY KEY (ID))": com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'zipname' already exists
JDO76609: Got SQLException executing statement "ALTER TABLE ZIPCODE_ZIPNAME ADD CONSTRAINT FK_ZIPCODE_ZIPNAME_ZIPCODE_ID FOREIGN KEY (ZIPCODE_ID) REFERENCES ZIPCODE (ID)": java.sql.SQLException: Can't create table '.\geographicaldb\#sql-434_4.frm' (errno: 121)
JDO76609: Got SQLException executing statement "ALTER TABLE ZIPCODE_ZIPNAME ADD CONSTRAINT FK_ZIPCODE_ZIPNAME_ZIPNAME_ID FOREIGN KEY (ZIPNAME_ID) REFERENCES ZIPNAME (ID)": java.sql.SQLException: Can't create table '.\geographicaldb\#sql-434_4.frm' (errno: 121)Enable of InvestmentBean in target server completed successfully
Enable of application in all targets completed successfully
All operations completed successfully
post-run-deploy:
run-deploy:
run-display-browser:
run-ac:
Copying 1 file to C:\Documents and Settings\Jack\GeographicalBean\dist
Caught an unexpected exception!
java.lang.NullPointerException
at client.ZipcodeApplicationClient.main(ZipcodeApplicationClient.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.util.Utility.invokeApplicationMain(Utility.java:266)
at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:449)
at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:259)
at com.sun.enterprise.appclient.Main.main(Main.java:200)
run-GeographicalBean-app-client:
run:
I would like to correct an earleir comment where I stated that this method did work when adding a single Zipname record. This is no true.
Thanks,
Jack -
Useing toplink jpa in jdev11 and mysql4,but meet the DatabaseException
Hello everyone,I'm useing toplink jpa in jdev11 and mysql4.I create a class from database success.Then I use "Java Service Facade" to create a class called JavaServiceFacade sucess.Then I add some code:
System.out.println(javaServiceFacade.queryCnationalityFindAll().size())
in main
then I run the program,but I got this error:
xception in thread "main" Local Exception Stack:
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0 (Build b41-beta2 (03/30/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
Error Code: 0
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:290)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:87)
at oracle.toplink.essentials.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:170)
at oracle.toplink.essentials.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:218)
at oracle.toplink.essentials.internal.databaseaccess.DatabaseAccessor.connect(DatabaseAccessor.java:227)
at oracle.toplink.essentials.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:294)
at oracle.toplink.essentials.threetier.ConnectionPool.buildConnection(ConnectionPool.java:102)
at oracle.toplink.essentials.threetier.ConnectionPool.startUp(ConnectionPool.java:324)
at oracle.toplink.essentials.threetier.ServerSession.connect(ServerSession.java:443)
at oracle.toplink.essentials.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:571)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:208)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:212)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:78)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:111)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:105)
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:76)
at project6.JavaServiceFacade.getEntityManager(JavaServiceFacade.java:23)
at project6.JavaServiceFacade.queryCnationalityFindAll(JavaServiceFacade.java:72)
at project6.JavaServiceFacade.main(JavaServiceFacade.java:18)
Caused by: java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3074)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at oracle.toplink.essentials.sessions.DefaultConnector.connect(DefaultConnector.java:85)
... 17 more
there's some chinese you may not know,that means there's something wrong with
Microsoft odbc.I'm puzzle of that:I'm useing java+mysql,why there's wrong with odbc???
thank you very much
(maybe it's jdev11 technical preview edition so it can't work?)HI
can you reply the feedback of metalink? because I'm having similar problem.
I debug in junit and embebbed at the jdev and it works well, but when I deploy in a standalone oc4j it gives me the same error of Excepção de E/S: The Network Adapter could not establish the connection
And I'm not using 11g, I'm still in 10g but the problem might be the same.
cumps
DnlCY
null -
Why it is so slow using toplink JPA in applet or webstart
I use jpa in the applet,but it is too slow to initialize the toplink jpa.
It takes about 80 seconds to execute this method:
EntityManagerFactory factory=Persistence.createEntityManagerFactory("unit");
The applet/webstart has the security authorization.
I even modify the java.policy file to give the applet AllPermission.
How could I fix this?
thx for u help.
with regardsTo test if it is jpa's problem.
I create a new desktop project and didn't use toplink JPA.
It performace good. But if I use JPA in this project.It became so slow.
as I said before. I have give the programme authorization to run.
Can anyone help.
Even when I change to openJPA.It just performace a little faster.
cause the project is nearly finished,I can't replace JPA in the project.It cost too much time that I can't afford.
I don't know what is the problem.
Please help.
thank you. -
JPA cascade with @GeneratedValue(strategy=GenerationType.IDENTITY)
If anyone has got cascading persistance working in JPA with database generated primary keys I'd be much obliged if you could let me know how.
Am attempting to use tables with database auto generated primary keys (MySQL AUTO_INCREMENT), and using the JPA cascade features. But I can't see how to make it work.
The problem is that if you cascade persist a series of entities, you need to know the database primary keys before you persist to the database.
If I remove all the cascades in my @entity's, and explicitly persist entities in the correct order so the primary keys are set before them being needed, then all is ok.
When I put the cascades in, my JPA implementation (Toplink) attempts to create the entities with foreign keys to tables with the yet to be generated primary keys all null. I was hoping JPA/Toplink would be clever enough to persist the entities in order, setting the database generated primary keys as it went.
Has anyone tried this in Hibernate?
Sampe code exerts that does not work:
@Entity
public class Address implements Serializable {
private long id;
private Collection<Contact> contacts = new ArrayList<Contact>();
@OneToMany(cascade = { CascadeType.ALL })
public Collection<Contact> getContacts() {
return contacts;
@Entity
public class Contact implements Serializable {
private long id;
@Id
@Column(updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() {
return this.id;
CREATE TABLE address (
id BIGINT NOT NULL AUTO_INCREMENT
, address_line_1 VARCHAR(64)
, address_line_2 VARCHAR(64)
, address_line_3 VARCHAR(64)
, suburb VARCHAR(64)
, postcode VARCHAR(16)
, state VARCHAR(64)
, country_code CHAR(2)
, PRIMARY KEY (id)
CREATE TABLE contact (
id BIGINT NOT NULL AUTO_INCREMENT
, address_id BIGINT
, contact_type CHAR(10)
, value VARCHAR(255)
, PRIMARY KEY (id)
, INDEX (address_id)
, CONSTRAINT FK_contact_address FOREIGN KEY (address_id)
REFERENCES address (id)
);The way I have it, the contact does need annotations as it is a bidirectional link. The contact defines the link and the address has a mappedBy="address".
If you remove the annotations on contact, I think you will need to set up a unidirectional one-to-many link and my 'text book' says you need to have a join table to implement this. I tried all kinds of ways to have a unidirectional one-to-many link without a join table, but never succeeded.
I found if a persist failed it would still use up sequence numbers (Hibernate and MySQL), but I did not come accross your problem. I found it useful to look on the SQL Database logs to see exactly what SQL was getting to the server.
My code - so far working fine, am in mid development though.
Address.java:
@Entity
@Table(name = "address", schema = "z")
public class Address implements Serializable {
private static final long serialVersionUID = 1L;
private long id;
private String addressLine1;
private Collection<Contact> contacts = new ArrayList<Contact>();
public Address() {
super();
@Id
@Column(updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() {
return this.id;
public void setId(long id) {
this.id = id;
@Column(name = "address_line_1")
public String getAddressLine1() {
return this.addressLine1;
public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
@OneToMany(mappedBy="address", cascade={CascadeType.ALL})
public Collection<Contact> getContacts() {
return contacts;
public void setContacts(Collection<Contact> contacts) {
this.contacts = contacts;
Contact.java:
@Entity
@Table(name = "contact", schema = "z")
public class Contact implements Serializable {
private static final long serialVersionUID = 1L;
private long id;
private Address address;
private String value;
private String contactType;
public Contact() {
super();
@Id
@Column(updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long getId() {
return this.id;
public void setId(long id) {
this.id = id;
@ManyToOne (cascade={CascadeType.ALL})
@JoinColumn(name="address_id", referencedColumnName="id", nullable=false, updatable=false)
public Address getAddress() {
return this.address;
public void setAddress(Address address) {
this.address = address;
public String getValue() {
return this.value;
public void setValue(String value) {
this.value = value;
@Column(name = "contact_type")
public String getContactType() {
return this.contactType;
public void setContactType(String contactType) {
this.contactType = contactType;
} -
How to create a cache for JPA Entities using an EJB
Hello everybody! I have recently got started with JPA 2.0 (I use eclipseLink) and EJB 3.1 and have a problem to figure out how to best implement a cache for my JPA Entities using an EJB.
In the following I try to describe my problem.. I know it is a bit verbose, but hope somebody will help me.. (I highlighted in bold the core of my problem, in case you want to first decide if you can/want help and in the case spend another couple of minutes to understand the domain)
I have the following JPA Entities:
@Entity Genre{
private String name;
@OneToMany(mappedBy = "genre", cascade={CascadeType.MERGE, CascadeType.PERSIST})
private Collection<Novel> novels;
@Entity
class Novel{
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST})
private Genre genre;
private String titleUnique;
@OneToMany(mappedBy="novel", cascade={CascadeType.MERGE, CascadeType.PERSIST})
private Collection<NovelEdition> editions;
@Entity
class NovelEdition{
private String publisherNameUnique;
private String year;
@ManyToOne(optional=false, cascade={CascadeType.PERSIST, CascadeType.MERGE})
private Novel novel;
@ManyToOne(optional=false, cascade={CascadeType.MERGE, CascadeType.PERSIST})
private Catalog appearsInCatalog;
@Entity
class Catalog{
private String name;
@OneToMany(mappedBy = "appearsInCatalog", cascade = {CascadeType.MERGE, CascadeType.PERSIST})
private Collection<NovelEdition> novelsInCatalog;
The idea is to have several Novels, belonging each to a specific Genre, for which can exist more than an edition (different publisher, year, etc). For semplicity a NovelEdition can belong to just one Catalog, being such a Catalog represented by such a text file:
FILE 1:
Catalog: Name Of Catalog 1
"Title of Novel 1", "Genre1 name","Publisher1 Name", 2009
"Title of Novel 2", "Genre1 name","Pulisher2 Name", 2010
FILE 2:
Catalog: Name Of Catalog 2
"Title of Novel 1", "Genre1 name","Publisher2 Name", 2011
"Title of Novel 2", "Genre1 name","Pulisher1 Name", 2011
Each entity has associated a Stateless EJB that acts as a DAO, using a Transaction Scoped EntityManager. For example:
@Stateless
public class NovelDAO extends AbstractDAO<Novel> {
@PersistenceContext(unitName = "XXX")
private EntityManager em;
protected EntityManager getEntityManager() {
return em;
public NovelDAO() {
super(Novel.class);
//NovelDAO Specific methods
I am interested at when the catalog files are parsed and the corresponding entities are built (I usually read a whole batch of Catalogs at a time).
Being the parsing a String-driven procedure, I don't want to repeat actions like novelDAO.getByName("Title of Novel 1") so I would like to use a centralized cache for mappings of type String-Identifier->Entity object.
Currently I use +3 Objects+:
1) The file parser, which does something like:
final CatalogBuilder catalogBuilder = //JNDI Lookup
//for each file:
String catalogName = parseCatalogName(file);
catalogBuilder.setCatalogName(catalogName);
//For each novel edition
String title= parseNovelTitle();
String genre= parseGenre();
catalogBuilder.addNovelEdition(title, genre, publisher, year);
//End foreach
catalogBuilder.build();
2) The CatalogBuilder is a Stateful EJB which uses the Cache and gets re-initialized every time a new Catalog file is parsed and gets "removed" after a catalog is persisted.
@Stateful
public class CatalogBuilder {
@PersistenceContext(unitName = "XXX", type = PersistenceContextType.EXTENDED)
private EntityManager em;
@EJB
private Cache cache;
private Catalog catalog;
@PostConstruct
public void initialize() {
catalog = new Catalog();
catalog.setNovelsInCatalog(new ArrayList<NovelEdition>());
public void addNovelEdition(String title, String genreStr, String publisher, String year){
Genre genre = cache.findGenreCreateIfAbsent(genreStr);//##
Novel novel = cache.findNovelCreateIfAbsent(title, genre);//##
NovelEdition novEd = new NovelEdition();
novEd.setNovel(novel);
//novEd.set publisher year catalog
catalog.getNovelsInCatalog().add();
public void setCatalogName(String name) {
catalog.setName(name);
@Remove
public void build(){
em.merge(catalog);
3) Finally, the problematic bean: Cache. For CatalogBuilder I used an EXTENDED persistence context (which I need as the Parser executes several succesive transactions) together with a Stateful EJB; but in this case I am not really sure what I need. In fact, the cache:
Should stay in memory until the parser is finished with its job, but not longer (should not be a singleton) as the parsing is just a very particular activity which happens rarely.
Should keep all of the entities in context, and should return managed entities form mehtods marked with ##, otherwise the attempt to persist the catalog should fail (duplicated INSERTs)..
Should use the same persistence context as the CatalogBuilder.
What I have now is :
@Stateful
public class Cache {
@PersistenceContext(unitName = "XXX", type = PersistenceContextType.EXTENDED)
private EntityManager em;
@EJB
private sessionbean.GenreDAO genreDAO;
//DAOs for other cached entities
Map<String, Genre> genreName2Object=new TreeMap<String, Genre>();
@PostConstruct
public void initialize(){
for (Genre g: genreDAO.findAll()) {
genreName2Object.put(g.getName(), em.merge(g));
public Genre findGenreCreateIfAbsent(String genreName){
if (genreName2Object.containsKey(genreName){
return genreName2Object.get(genreName);
Genre g = new Genre();
g.setName();
g.setNovels(new ArrayList<Novel>());
genreDAO.persist(t);
genreName2Object.put(t.getIdentifier(), em.merge(t));
return t;
But honestly I couldn't find a solution which satisfies these 3 points at the same time. For example, using another stateful bean with an extended persistence context (PC) would work for the 1st parsed file, but I have no idea what should happen from the 2nd file on.. Indeed, for the 1st file the PC will be created and propagated from CatalogBuilder to Cache, which will then use the same PC. But after build() returns, the PC of CatalogBuilder should (I guess) be removed and re-created during the succesive parsing, although the PC of Cache should stay "alive": shouldn't in this case an exception being thrown? Another problem is what to do when the Cache bean is passivated. Currently I get the exception:
"passivateEJB(), Exception caught ->
java.io.IOException: java.io.IOException
at com.sun.ejb.base.io.IOUtils.serializeObject(IOUtils.java:101)
at com.sun.ejb.containers.util.cache.LruSessionCache.saveStateToStore(LruSessionCache.java:501)"
Hence, I have no Idea how to implement my cache.. Can you please tell me how would you solve the problem?
Many thanks!
ByeHi Chris,
thanks for your reply!
I've tried to add the following into persistence.xml (although I've read that eclipseLink uses L2 cache by default..):
<shared-cache-mode>ALL</shared-cache-mode>
Then I replaced the Cache bean with a stateless bean which has methods like
Genre findGenreCreateIfAbsent(String genreName){
Genre genre = genreDAO.findByName(genreName);
if (genre!=null){
return genre;
genre = //Build new genre object
genreDAO.persist(genre);
return genre;
As far as I undestood, the shared cache should automatically store the genre and avoid querying the DB multiple times for the same genre, but unfortunately this is not the case: if I use a FINE logging level, I see really a lot of SELECT queries, which I didn't see with my "home made" Cache...
I am really confused.. :(
Thanks again for helping + bye -
Toplink\JPA vs JDBC - Toplink died for my app with 5000 users
Hi All Just a quick question about performance when comparing toplink jpa ans jdbc.
I have an app I just develpoed using toplink for all data acces that will have approx 5000 users and initial testing with 200 things look good. However after launch and going live for 5000 people the app blew up. Lot's of memory heap errors, and TopLink exceptions...
To make things work I have replaced all the toplink with traditional JDBC, this works but I am currious as to why toplink blew up? I notice when JDev creates the Toplink code that it never does any checking for open connections and never explicitly closes connections. Is this something that I have to do?
I should not that I was not using datacontrols directly, I created a datacontrol but then ised the FacesContext to create a list of results in the backing bean??
Anyway, I know that's not a great description but I thought I would throw this question out there and see what people had to say?
Thanks
JIt is hard to say where a memory issue occurred. Normally usage of a memory profiler such as JRockit JRA, or JProfiler is useful in debugging such issues.
There were a couple related memory issues in previous releases, so ensure you have the latest release or patch release.
Using an isolated (shared=false) or weak cache may also help.
In general you should be able to scale to 5000 users without any issues.
James : http://www.eclipselink.org -
How to configure WebLogic to use TopLink?
I am using BEA Workshop to develop a webservice and I am having some issues to make it work. Basically, I am using Toplink plus JAX-WS. The main problem is how to get the EntityManager from the context in order to persist the data into database.
Here is a piece of code, hope it can help to understand the issue:
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,
"t3://localhost:7001");
ctx = new InitialContext(ht);
EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName");
Thanks!
DiegoThanks for the info mkeith!
Maybe this can give you a better idea of what I am talking about. I changed a few things based on the tutorials that oracle provides:
I keep getting the following exception when I try to deploy into weblogic:
weblogic.deployment.EnvironmentException: Error processing persitence unit defau
lt of module ejb.jar: Error instantiating the Persistence Provider class oracle.
toplink.essentials.PersistenceProvider of the PersistenceUnit default: java.lang
.ClassNotFoundException: oracle.toplink.essentials.PersistenceProvider
at weblogic.deployment.PersistenceUnitInfoImpl.createEntityManagerFactor
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="1.0">
<persistence-unit name="default" transaction-type="JTA">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>OracleDS</jta-data-source>
<class>br.com.tim.mw.soa.soarepo.entity.MacroProcessEntity</class>
<properties>
<property name="toplink.logging.level" value="FINE" />
<property name="toplink.jdbc.driver" value="oracle.jdbc.OracleDriver" />
<property name="toplink.jdbc.url" value="jdbc:oracle:thin:@localhost:WS" />
<property name="toplink.jdbc.password" value="jpa" />
<property name="toplink.jdbc.user" value="jpa" />
</properties>
</persistence-unit>
</persistence>
Entity
@Entity()
@Table(name="JPATable", schema="JPA")
@PersistenceUnit(name="default")
public class JPATableEntity implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
private Long macroProcId;
JPAResourceBean
public class JPAResourceBean {
protected EntityManagerFactory emf;
* Lazily acquire the EntityManagerFactory and cache it.
public EntityManagerFactory getEMF (){
if (emf == null){
emf = Persistence.createEntityManagerFactory("default", new java.util.HashMap());
return emf;
Persist Method
protected void persist(Object object) {
try{
em = jpaBEAN.getEMF().createEntityManager();
//Persist Object in Database
em.persist(object);
}catch(Exception err){
java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, "exception caught", err);
throw new RuntimeException(err);
}finally{
if( em.isOpen() ){
em.close();
if( jpaBEAN.getEMF().isOpen() ){
jpaBEAN.getEMF().close();
I also created a Data Source in WebLogic, but I am not sure if that's enough.
Thanks in advance,
Diego -
Problem using TopLink Grid on WebLogic
I encountered an error using TopLink Grid with WebLogic.
I have a servlet that persists an object through TopLink Grid, and then try to retrieve an object. It has the following setup:
JPA 2.0
TopLink 11.1.1.4.0
Coherence 3.6.0.4 (bundled with WebLogic)
WebLogic Server 10.3.4
Cache config: Grid Entity
Method of obtaining EntityManager: Injection of @PersistenceContext
Transaction Management: JTA
I put coherence-cache-config.xml and tangosol-coherence-override.xml in /APP-INF/classes in my EAR file.
I did not use active-cache.jar in my servlet. After the WebLogic server is started, the Coherence cache client is to be launched when the persist operation is called.
However, found that the insertion fails with error. Only when em.find() is called could the Coherence cache client be launched properly. I find it very strange because toplink grid complains about missing coherence-cache-config.xml when it tries to insert, but is perfectly ok when it tries to do an em.find().
Has anybody encountered the same issue before?
The log is: (the lines starting with #### are output by the servlet)
#### Inserting new dept
<Mar 7, 2011 10:17:43 AM CST> <Notice> <EclipseLink> <BEA-2005000> <2011-03-07 10:17:43.816--EclipseLink, version: Eclipse Persistence Services - 2.1.2.v20101206-r8635>
<Mar 7, 2011 10:17:43 AM CST> <Notice> <EclipseLink> <BEA-2005000> <2011-03-07 10:17:43.82--Server: 10.3.4.0>
<Mar 7, 2011 10:17:44 AM CST> <Notice> <EclipseLink> <BEA-2005000> <2011-03-07 10:17:44.261--file:/C:/Oracle/Middleware_1034/user_projects/domains/base_domain/servers/ManagedServer01/tmp/_WL_user/TopLinkGridApp/6df6x4/APP-INF/lib/TopLinkGridJPA.jar_GridLinkJPA login successful>
2011-03-07 10:17:45.113/50.199 Oracle Coherence 3.6.0.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded operational configuration from "zip:C:/Oracle/Middleware_1034/user_projects/domains/base_domain/servers/ManagedServer01/tmp/_WL_user/TopLinkGridApp/6df6x4/APP-INF/lib/coherence.jar!/tangosol-coherence.xml"
2011-03-07 10:17:45.132/50.217 Oracle Coherence 3.6.0.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded operational overrides from "zip:C:/Oracle/Middleware_1034/user_projects/domains/base_domain/servers/ManagedServer01/tmp/_WL_user/TopLinkGridApp/6df6x4/APP-INF/lib/coherence.jar!/tangosol-coherence-override-dev.xml"
2011-03-07 10:17:45.141/50.226 Oracle Coherence 3.6.0.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded operational overrides from "file:/C:/Oracle/Middleware_1034/user_projects/domains/base_domain/servers/ManagedServer01/tmp/_WL_user/TopLinkGridApp/6df6x4/APP-INF/classes/tangosol-coherence-override.xml"
2011-03-07 10:17:45.148/50.233 Oracle Coherence 3.6.0.0 <D5> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified
Oracle Coherence Version 3.6.0.0 Build 17229
Grid Edition: Development mode
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
<Mar 7, 2011 10:17:45 AM CST> <Warning> <EclipseLink> <BEA-2005000> <2011-03-07 10:17:45.491--Exception [EclipseLink-38] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Identity map constructor failed because an invalid identity map was specified.
Internal Exception: java.lang.reflect.InvocationTargetException
Target Invocation Exception: Exception [EclipseLink-80000] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): oracle.eclipselink.coherence.exceptions.IntegrationException
Exception Description: Unable to connect to Coherence Cache by name: Dept.
Internal Exception: (Wrapped: Failed to load the factory) java.lang.reflect.InvocationTargetException
Descriptor: RelationalDescriptor(test.gridlink.Dept --> [DatabaseTable(DEPT)])>
<Mar 7, 2011 10:17:45 AM CST> <Warning> <EclipseLink> <BEA-2005000> <2011-03-07 10:17:45.502--Exception [EclipseLink-38] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Identity map constructor failed because an invalid identity map was specified.
Internal Exception: java.lang.reflect.InvocationTargetException
Target Invocation Exception: Exception [EclipseLink-80000] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): oracle.eclipselink.coherence.exceptions.IntegrationException
Exception Description: Unable to connect to Coherence Cache by name: Dept.
Internal Exception: (Wrapped: Failed to load the factory) java.lang.reflect.InvocationTargetException
Descriptor: RelationalDescriptor(test.gridlink.Dept --> [DatabaseTable(DEPT)])>
<Mar 7, 2011 10:17:45 AM CST> <Warning> <EclipseLink> <BEA-2005000> <2011-03-07 10:17:45.584--Exception [EclipseLink-23011] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.TransactionException
Exception Description: Error trying to format exception message: UnitOfWork [{0}] was rendered inactive before associated externally managed transaction was complete. The arguments are: [Exception [EclipseLink-4022] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Accessor or its connection has been set to null. This can occur if the ClientSession or UnitOfWork was released in a seperate thread, for instance if a Timeout occurred.]>
<Mar 7, 2011 10:17:45 AM CST> <Warning> <JTA> <BEA-110401> <Ignoring error in afterCompletion. Object=[email protected]6e18, Exception=Exception [EclipseLink-23011] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.TransactionException
Exception Description: Error trying to format exception message: UnitOfWork [{0}] was rendered inactive before associated externally managed transaction was complete. The arguments are: [Exception [EclipseLink-4022] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Accessor or its connection has been set to null. This can occur if the ClientSession or UnitOfWork was released in a seperate thread, for instance if a Timeout occurred.]
Exception [EclipseLink-23011] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.TransactionException
Exception Description: Error trying to format exception message: UnitOfWork [{0}] was rendered inactive before associated externally managed transaction was complete. The arguments are: [Exception [EclipseLink-4022] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DatabaseException
Exception Description: Accessor or its connection has been set to null. This can occur if the ClientSession or UnitOfWork was released in a seperate thread, for instance if a Timeout occurred.]
at org.eclipse.persistence.exceptions.TransactionException.inactiveUnitOfWork(TransactionException.java:118)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.afterCompletion(AbstractSynchronizationListener.java:203)
at org.eclipse.persistence.transaction.JTASynchronizationListener.afterCompletion(JTASynchronizationListener.java:79)
at weblogic.transaction.internal.ServerSCInfo.doAfterCompletion(ServerSCInfo.java:1048)
at weblogic.transaction.internal.ServerSCInfo.callAfterCompletions(ServerSCInfo.java:1023)
Truncated. see log file for complete stacktrace
>
weblogic.transaction.RollbackException: Unexpected exception in beforeCompletion: sync=[email protected]6e18
Exception Description: Identity map constructor failed because an invalid identity map was specified.
Internal Exception: java.lang.reflect.InvocationTargetException
Target Invocation Exception: Exception [EclipseLink-80000] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): oracle.eclipselink.coherence.exceptions.IntegrationException
Exception Description: Unable to connect to Coherence Cache by name: Dept.
Internal Exception: (Wrapped: Failed to load the factory) java.lang.reflect.InvocationTargetException
Descriptor: RelationalDescriptor(test.gridlink.Dept --> [DatabaseTable(DEPT)])
at weblogic.transaction.internal.TransactionImpl.throwRollbackException(TransactionImpl.java:1881)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:345)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:240)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:300)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:294)
at test.gridlink.servlet.Test.process(Test.java:89)
at test.gridlink.servlet.Test.doGet(Test.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3717)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)
Caused by: Exception [EclipseLink-38] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Identity map constructor failed because an invalid identity map was specified.
Internal Exception: java.lang.reflect.InvocationTargetException
Target Invocation Exception: Exception [EclipseLink-80000] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): oracle.eclipselink.coherence.exceptions.IntegrationException
Exception Description: Unable to connect to Coherence Cache by name: Dept.
Internal Exception: (Wrapped: Failed to load the factory) java.lang.reflect.InvocationTargetException
Descriptor: RelationalDescriptor(test.gridlink.Dept --> [DatabaseTable(DEPT)])
at org.eclipse.persistence.exceptions.DescriptorException.invalidIdentityMap(DescriptorException.java:822)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.buildNewIdentityMap(IdentityMapManager.java:362)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.buildNewIdentityMap(IdentityMapManager.java:327)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.getIdentityMap(IdentityMapManager.java:902)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.acquireLockNoWait(IdentityMapManager.java:160)
at org.eclipse.persistence.internal.sessions.IdentityMapAccessor.acquireLockNoWait(IdentityMapAccessor.java:101)
at org.eclipse.persistence.internal.helper.WriteLockManager.attemptToAcquireLock(WriteLockManager.java:412)
at org.eclipse.persistence.internal.helper.WriteLockManager.acquireRequiredLocks(WriteLockManager.java:284)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitTransactionAfterWriteChanges(UnitOfWorkImpl.java:1601)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:340)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157)
at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68)
at weblogic.transaction.internal.ServerSCInfo.doBeforeCompletion(ServerSCInfo.java:1239)
at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1214)
at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:116)
at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1316)
at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:2132)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:272)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:239)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:299)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:293)
at test.gridlink.servlet.Test.process(Test.java:89)
at test.gridlink.servlet.Test.doGet(Test.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183)
... 9 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.invokeConstructor(PrivilegedAccessHelper.java:350)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.buildNewIdentityMap(IdentityMapManager.java:357)
... 36 more
Caused by: Exception [EclipseLink-80000] (Eclipse Persistence Services - 2.1.2.v20101206-r8635): oracle.eclipselink.coherence.exceptions.IntegrationException
Exception Description: Unable to connect to Coherence Cache by name: Dept.
Internal Exception: (Wrapped: Failed to load the factory) java.lang.reflect.InvocationTargetException
at oracle.eclipselink.coherence.exceptions.IntegrationException.unableToFindCoherenceCache(IntegrationException.java:76)
at oracle.eclipselink.coherence.integrated.cache.CoherenceInterceptor.<init>(CoherenceInterceptor.java:84)
... 42 more
Caused by: (Wrapped: Failed to load the factory) java.lang.reflect.InvocationTargetException
at com.tangosol.util.Base.ensureRuntimeException(Base.java:293)
at com.tangosol.net.DefaultCacheFactoryBuilder.getDefaultFactory(DefaultCacheFactoryBuilder.java:419)
at com.tangosol.net.DefaultCacheFactoryBuilder.getSingletonFactory(DefaultCacheFactoryBuilder.java:113)
at com.tangosol.net.DefaultCacheFactoryBuilder.getFactory(DefaultCacheFactoryBuilder.java:173)
at com.tangosol.net.DefaultCacheFactoryBuilder.getConfigurableCacheFactory(DefaultCacheFactoryBuilder.java:149)
at oracle.eclipselink.coherence.integrated.internal.cache.Coherence35Adaptor.getNamedCache(Coherence35Adaptor.java:34)
at oracle.eclipselink.coherence.integrated.internal.cache.CoherenceCacheHelper.getNamedCache(CoherenceCacheHelper.java:240)
at oracle.eclipselink.coherence.integrated.cache.CoherenceInterceptor.<init>(CoherenceInterceptor.java:79)
... 42 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.tangosol.util.ClassHelper.newInstance(ClassHelper.java:662)
at com.tangosol.net.DefaultCacheFactoryBuilder.getDefaultFactory(DefaultCacheFactoryBuilder.java:381)
... 48 more
Caused by: (Wrapped: Failed to load cache configuration: coherence-cache-config.xml) java.io.IOException: The cache configuration is missing: "coherence-cache-config.xml", loader=null
at com.tangosol.util.Base.ensureRuntimeException(Base.java:293)
at com.tangosol.run.xml.XmlHelper.loadResourceInternal(XmlHelper.java:330)
at com.tangosol.run.xml.XmlHelper.loadFileOrResource(XmlHelper.java:281)
at com.tangosol.net.DefaultConfigurableCacheFactory.loadConfig(DefaultConfigurableCacheFactory.java:396)
at com.tangosol.net.DefaultConfigurableCacheFactory.loadConfig(DefaultConfigurableCacheFactory.java:382)
at com.tangosol.net.DefaultConfigurableCacheFactory.<init>(DefaultConfigurableCacheFactory.java:148)
... 54 more
Caused by: java.io.IOException: The cache configuration is missing: "coherence-cache-config.xml", loader=null
at com.tangosol.run.xml.XmlHelper.loadResourceInternal(XmlHelper.java:316)
at com.tangosol.run.xml.XmlHelper.loadFileOrResource(XmlHelper.java:281)
at com.tangosol.net.DefaultConfigurableCacheFactory.loadConfig(DefaultConfigurableCacheFactory.java:396)
at com.tangosol.net.DefaultConfigurableCacheFactory.loadConfig(DefaultConfigurableCacheFactory.java:382)
at com.tangosol.net.DefaultConfigurableCacheFactory.<init>(DefaultConfigurableCacheFactory.java:148)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.tangosol.util.ClassHelper.newInstance(ClassHelper.java:662)
at com.tangosol.net.DefaultCacheFactoryBuilder.getDefaultFactory(DefaultCacheFactoryBuilder.java:381)
at com.tangosol.net.DefaultCacheFactoryBuilder.getSingletonFactory(DefaultCacheFactoryBuilder.java:113)
at com.tangosol.net.DefaultCacheFactoryBuilder.getFactory(DefaultCacheFactoryBuilder.java:173)
at com.tangosol.net.DefaultCacheFactoryBuilder.getConfigurableCacheFactory(DefaultCacheFactoryBuilder.java:149)
at oracle.eclipselink.coherence.integrated.internal.cache.Coherence35Adaptor.getNamedCache(Coherence35Adaptor.java:34)
at oracle.eclipselink.coherence.integrated.internal.cache.CoherenceCacheHelper.getNamedCache(CoherenceCacheHelper.java:240)
at oracle.eclipselink.coherence.integrated.cache.CoherenceInterceptor.<init>(CoherenceInterceptor.java:79)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.invokeConstructor(PrivilegedAccessHelper.java:350)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.buildNewIdentityMap(IdentityMapManager.java:357)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.buildNewIdentityMap(IdentityMapManager.java:327)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.getIdentityMap(IdentityMapManager.java:902)
at org.eclipse.persistence.internal.identitymaps.IdentityMapManager.acquireLockNoWait(IdentityMapManager.java:160)
at org.eclipse.persistence.internal.sessions.IdentityMapAccessor.acquireLockNoWait(IdentityMapAccessor.java:101)
at org.eclipse.persistence.internal.helper.WriteLockManager.attemptToAcquireLock(WriteLockManager.java:412)
at org.eclipse.persistence.internal.helper.WriteLockManager.acquireRequiredLocks(WriteLockManager.java:285)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitTransactionAfterWriteChanges(UnitOfWorkImpl.java:1601)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:342)
at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157)
at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:69)
at weblogic.transaction.internal.ServerSCInfo.doBeforeCompletion(ServerSCInfo.java:1239)
at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1214)
at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:116)
at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1318)
at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:2136)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:272)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:240)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:300)
at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:294)
at test.gridlink.servlet.Test.process(Test.java:89)
at test.gridlink.servlet.Test.doGet(Test.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184)
... 9 more
#### Finding dept
2011-03-07 10:17:45.783/50.868 Oracle Coherence GE 3.6.0.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Loaded cache configuration from "file:/C:/Oracle/Middleware_1034/user_projects/domains/base_domain/servers/ManagedServer01/tmp/_WL_user/TopLinkGridApp/6df6x4/APP-INF/classes/coherence-cache-config.xml"
2011-03-07 10:17:46.746/51.831 Oracle Coherence GE 3.6.0.0 <D4> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): TCMP bound to /10.222.60.143:8088 using SystemSocketProvider
2011-03-07 10:17:48.288/53.373 Oracle Coherence GE 3.6.0.0 <Info> (thread=Cluster, member=n/a): Failed to satisfy the variance: allowed=16, actual=60
2011-03-07 10:17:48.288/53.373 Oracle Coherence GE 3.6.0.0 <Info> (thread=Cluster, member=n/a): Increasing allowable variance to 21
2011-03-07 10:17:49.355/54.440 Oracle Coherence GE 3.6.0.0 <Info> (thread=Cluster, member=n/a): This Member(Id=2, Timestamp=2011-03-07 10:17:49.299, Address=10.222.60.143:8088, MachineId=59535, Location=site:corp.oocl.com,machine:WONGST3-W7-TEST,process:2952, Role=WeblogicServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1) joined cluster "CoherenceClusterRock" with senior Member(Id=1, Timestamp=2011-03-07 09:53:59.431, Address=10.222.60.143:8098, MachineId=59535, Location=site:corp.oocl.com,machine:WONGST3-W7-TEST,process:1204,member:CacheServerRock01, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=1)
2011-03-07 10:17:49.419/54.504 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Cluster with senior member 1
2011-03-07 10:17:49.421/54.506 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Management with senior member 1
2011-03-07 10:17:49.421/54.506 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service EclipseLinkJPAReadWrite with senior member 1
2011-03-07 10:17:49.437/54.522 Oracle Coherence GE 3.6.0.0 <Info> (thread=[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)', member=n/a): Started cluster Name=CoherenceClusterRock
Group{Address=224.3.6.0, Port=36000, TTL=4}
MasterMemberSet
ThisMember=Member(Id=2, Timestamp=2011-03-07 10:17:49.299, Address=10.222.60.143:8088, MachineId=59535, Location=site:corp.oocl.com,machine:WONGST3-W7-TEST,process:2952, Role=WeblogicServer)
OldestMember=Member(Id=1, Timestamp=2011-03-07 09:53:59.431, Address=10.222.60.143:8098, MachineId=59535, Location=site:corp.oocl.com,machine:WONGST3-W7-TEST,process:1204,member:CacheServerRock01, Role=CoherenceServer)
ActualMemberSet=MemberSet(Size=2, BitSetCount=2
Member(Id=1, Timestamp=2011-03-07 09:53:59.431, Address=10.222.60.143:8098, MachineId=59535, Location=site:corp.oocl.com,machine:WONGST3-W7-TEST,process:1204,member:CacheServerRock01, Role=CoherenceServer)
Member(Id=2, Timestamp=2011-03-07 10:17:49.299, Address=10.222.60.143:8088, MachineId=59535, Location=site:corp.oocl.com,machine:WONGST3-W7-TEST,process:2952, Role=WeblogicServer)
RecycleMillis=1200000
RecycleSet=MemberSet(Size=0, BitSetCount=0
TcpRing{Connections=[1]}
IpMonitor{AddressListSize=0}
2011-03-07 10:17:49.578/54.664 Oracle Coherence GE 3.6.0.0 <D5> (thread=Invocation:Management, member=2): Service Management joined the cluster with senior service member 1
2011-03-07 10:17:49.996/55.081 Oracle Coherence GE 3.6.0.0 <D5> (thread=DistributedCache:EclipseLinkJPAReadWrite, member=2): Service EclipseLinkJPAReadWrite joined the cluster with senior service member 1
#### em: test.gridlink.Dept@bebae9
#### em: TEST DEPTIt seems Coherence is unable to load the config files using the application class loader. You could try placing the config files in a location that gives them the same visibility as your PersistenceUnit.
-
Toplink support for JPA vs. Toplink Essentials
I think I read that Toplink has some support for EJB3/JPA as does Toplink Essentials.
What is the difference in features?
If one has a 10.1.3 app server license, should Toplink be used instead of Toplink Essentials for EJB3/JPA applications?
Does the Mapping Workbench produce JPA object-relational mapping annotations or XML?
Thank you.
Richard CatlinHi Robert,
I'm not sure which comments you were directing specifically to Dali vs. JDeveloper but I'll try and address them from a Dali perspective. I do want to point out that Dali is at 0.5 and so it is still under development.
yes you get a basic 1:1 entity from your databasetables...When generating Entities from tables, Dali will generate 1:1 and 1:many relationships based on database FK constraints.
@temporary annotations are not inserted if you have a Date oder Calendar type.Also when generating Entities from tables Dali will generate an instance variable of java.sql.Date for a database date column. java.sql.Date does not require an @Temporal annotation.
What's missing right now is a problem marker for missing @Temporal on java.util.Date and java.util.Calendar.
If you want to rename attributes or methods it's a lot of manual work to do... because >@Column annoations are not inserted, if they do not exist because of >dbname=attributenameThere is a bugzilla bug opened for this refactoring support. https://bugs.eclipse.org/bugs/show_bug.cgi?id=136333 Fortunately in Dali if you rename a class or attribute (field/getter) and your explicit or default mappings are broken you will get a problem marking on the attribute and in the Problems view so you can fix it rather than finding out at runtime.
generics are not inserted in the returnvalues of the methods...Generated Entities do use generics correctly e.g.:
public class Publisher implements Serializable {
@OneToMany(mappedBy="publisher")
private Set<Title> titles;
public Set<Title> getTitles() {
return this.titles;
public void setTitles(Set<Title> titles) {
this.titles = titles;
...--Shaun -
How can I use TopLink for querys that have two and more tables?
I use TopLink today, and I can use one table to query, but how can I use TopLink for querys that have two and more tables?
Thank you for see and answer this question.You can write a custom SQL query and map it to an object as needed. You can also use the Toplink query language "anyOf" or "get" commands to map two tables as long as you map them as one to one (get command) or one to many (anyOf command) in the toplink mapping workbench.
Zev.
check out oracle.toplink.expressions.Expression in the 10.1.3 API -
Can we pass the HashMap object to Stored procedure using toplink
Can we send the java.util.Map object as input to the stored procedures.
Can any one please tell how we can do this using toplink.
I tried to do that by doing following steps
1. Crated the
-- Column Name - Value Pair
CREATE TYPE col_data_pair IS OBJECT (column_name varchar2(50), data VARCHAR2(32767))
2. create or replace PROCEDURE XL_MAP_TEST (poData In COL_DATA_PAIR) as
v_timestamp TIMESTAMP;
BEGIN
INSERT INTO RECON_ATTR_UD_TFCHILD(RECON_TABLE_KEY, RE_KEY, RECON_UD_TESTFORM_KEY,RECON_UD_TFCHILD_GROUP)
values (RECON_TABLE_KEY_SEQ.NEXTVAL,15, 25 ,'Persistentss23');
END XL_MAP_TEST;
3. .
[junit] Exception [TOPLINK-4002] (Oracle TopLink - 11g Release 1 (11.1.1.0.0) (Build 080121)): oracle.toplink.exceptions.DatabaseException
[junit] Internal Exception: java.sql.SQLException: Invalid column type
[junit] Error Code: 17004
[junit] Call: BEGIN XL_MAP_TEST(?); END;
[junit] bind => [null => poData]
[junit] Query: ValueReadQuery()
[junit] at oracle.toplink.exceptions.DatabaseException.sqlException(DatabaseException.java:304)
[junit] at oracle.toplink.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:613)
[junit] at oracle.toplink.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:467)
[junit] at oracle.toplink.threetier.ServerSession.executeCall(ServerSession.java:447)
[junit] at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
[junit] at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:179)
[junit] at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:250)
[junit] at oracle.toplink.internal.queryframework.DatasourceCallQueryMechanism.executeSelect(DatasourceCallQueryMechanism.java:232)
[junit] at oracle.toplink.queryframework.DirectReadQuery.executeNonCursor(DirectReadQuery.java:92)
[junit] at oracle.toplink.queryframework.DataReadQuery.executeDatabaseQuery(DataReadQuery.java:118)
[junit] at oracle.toplink.queryframework.ValueReadQuery.executeDatabaseQuery(ValueReadQuery.java:55)
[junit] at oracle.toplink.queryframework.DatabaseQuery.execute(DatabaseQuery.java:671)
[junit] at oracle.toplink.queryframework.DataReadQuery.execute(DataReadQuery.java:104)
[junit] at oracle.toplink.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2260)
[junit] at oracle.toplink.internal.sessions.AbstractSession.executeQuery(AbstractSession.java
[junit] Caused by: java.sql.SQLException: Invalid column type
[junit] at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
[junit] at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
[junit] at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
[junit] at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:
4. StoredProcedureCall spc = new StoredProcedureCall();
HashMap poData = new HashMap();
poData.put("d", "s");
poData.put("s", "s");
spc.setProcedureName(procedureName);
spc.addUnamedInOutputArgument("poData", "poData", Types.OTHER,
"COL_DATA_PAIR",HashMap.class);
ValueReadQuery query = new ValueReadQuery();
query.setCall(spc);
query.addArgument("poData");
Vector args = new Vector();
args.add(poData);
session.executeQuery(query, args);Hi
Thanks for your inputs. Can you please send me the code stuff how we can use ObjectRelationalDescriptor. I tried to do that by doing following steps
1. Crated one class
oracle.InputOfTypeMap poData =
new oracle.InputOfTypeMap();
poData.setKay("ddd");
poData.setValue("ddd");
2. oracle.toplink.objectrelational.ObjectRelationalDescriptor descriptor =
new oracle.toplink.objectrelational.ObjectRelationalDescriptor(); descriptor.setJavaClass(oracle.iam.reconciliation.vo.InputOfTypeMap.class);
descriptor.setStructureName("COL_DATA_PAIR");
descriptor.addFieldOrdering("column_name");
descriptor.addFieldOrdering("data");
descriptor.addDirectMapping("key", "column_name");
descriptor.addDirectMapping("value", "data");
3. I was not sure how to use this further StoredProcedureCall
Can you plese help me, how we can do that? -
How to use user defined function in select query using Toplink
Hi Friends
I am little bit of new in Toplink stuff... so please help me...
I have to database functions 1. encrypt and 2. decrypt.
I want to exceute the following sql query using toplink
select port, database, user_name, decrypt(encrypt('String which is to be encrypt ','password'),'password') from CONFIGURATION
can anyone tell me , how to write code in toplink which will give the about sql output.
thanks .....The "Specifying a Custom SQL String in a DatabaseQuery" section in the TopLink Developer's Guide may help... http://download-uk.oracle.com/docs/cd/B32110_01/web.1013/b28218/qrybas.htm#BCFHDHBG
-
How to use Toplink as SDO in Oracle BPEL
can we use Toplink as SDO for BPEL?
We have not yet shipped our TopLink SDO implementation. The intent is that in our next major release the TopLink SDO will be used internally and should be available for your usage in the OracleAS/SOA suite.
Doug -
How to use toplink "build expression" with soundex function
We are using toplink experssion builder to build the query. can any one help me on build a query with soundex using toplink..
for example :
SELECT last_name, first_name
FROM hr.employees
WHERE SOUNDEX(last_name)
= SOUNDEX('SMYTHE');TopLink's ExpressionOperator does have an operator defined for soundex. I have an example that uses it that I customized to match you case.
I would recommend defining these queries as named queries using an after-load method:
public static void afterLoadEmployee(ClassDescriptor descriptor) {
ReadAllQuery raq = new ReadAllQuery(Employee.class);
ExpressionBuilder eb = raq.getExpressionBuilder();
Expression fnExp =
ExpressionOperator.soundex().expressionFor(eb.get("lastName"));
Expression valExp =
ExpressionOperator.soundex().expressionFor(eb.getParameter("L_NAME"));
raq.setSelectionCriteria(fnExp.equal(valExp));
raq.addArgument("L_NAME", String.class);
descriptor.getDescriptorQueryManager().addQuery("Employee.findBySoundexLastName",
raq);
}Now you can execute the query anywhere in your application using:
List<Employee> emps =
(List<Employee>)session.executeQuery("Employee.findBySoundexLastName",
Employee.class, "SMYTHE");The SQL generated is a little different due to the multiple tables used in the employee example model but here is what I got:
SELECT t0.EMP_ID, t1.EMP_ID, t0.F_NAME, t1.SALARY, t0.L_NAME, t0.GENDER, t0.VERSION, t0.ADDR_ID,
t0.MANAGER_ID, t0.END_DATE, t0.START_DATE FROM EMPLOYEE t0, SALARY t1
WHERE ((SOUNDEX(t0.L_NAME) = SOUNDEX('SMYTHE')) AND (t1.EMP_ID = t0.EMP_ID))Doug
Maybe you are looking for
-
I have IPhone 5. Songs on phone do not match songs in my itunes library. Can't get rid of songs on phone because they don't show up in library.
-
JSF 1,1 is a mature technology to put systems in production?
JSF 1,1 is a mature technology to put systems in production? Somebody has systems developed with JSF 1,1 in production? Thanks Pablo Dar�o Ingelhorn Ingelhorn Sistemas Toay- La Pampa - Argentina
-
I have a free version on my Ipad in Beta format, but until I can find a way to use it correctly and a guide available to help me sort the initial set up I cant evaluate it correctly. I use Adobe CC and I am very proficient in all aspects of the softw
-
How to Test Design Time Fusion Customizations in JDeveloper
Hi When we look at the wording and the diagram in the Oracle documentation, it says - "After you create these customizations, you can test them locally in JDeveloper and then deploy them directly into the full test environment. You can also deploy yo
-
Getting display only on attached monitor
My laptop is connected to a desk monitor. Most of the time I get the (same) display on both at once. Occasionally, the laptop monitor is black and the display is on the larger screen. I don't know what makes it do that, but often I would like to have